Supprimer les lignes quand la cellule de la colonne B est vide
Tags :
Dernière réponse : dans Programmation
Bonjour
Je souhaite réaliser une macro sur Excel qui supprimera automatiquement la ligne, si la cellule dans la colonne B est vide.
Mon tableau se définit sur la plage B5:J100
Lorsque la macro s'exécute, il faut que toutes les lignes s'effacent si et seulement si la cellule en B est vide.
J'ai déja crée un code, mais lorsque je l'exécute, mais ce dernier ne fait effacer que quelques une des lignes et il faut que je clic plusieurs fois sur le bouton active x pour supprimer les autres
Je souhaite réaliser une macro sur Excel qui supprimera automatiquement la ligne, si la cellule dans la colonne B est vide.
Mon tableau se définit sur la plage B5:J100
Lorsque la macro s'exécute, il faut que toutes les lignes s'effacent si et seulement si la cellule en B est vide.
J'ai déja crée un code, mais lorsque je l'exécute, mais ce dernier ne fait effacer que quelques une des lignes et il faut que je clic plusieurs fois sur le bouton active x pour supprimer les autres
Spoiler
Range("B:B").Select
For Each cell In Range("B:B")
If cell.Value = "" Then
cell.EntireRow.Delete Shift:=xlUp
End if
Next cell
For Each cell In Range("B:B")
If cell.Value = "" Then
cell.EntireRow.Delete Shift:=xlUp
End if
Next cell
Autres pages sur : supprimer lignes cellule colonne vide
Lassé par la pub ? Créez un compte
Oupss désolé
Donc je remet tout depuis le début lol
Bonjour
Je souhaite réaliser une macro sur Excel qui supprimera automatiquement la ligne, si la cellule dans la colonne B est vide.
Mon tableau se définit sur la plage B5:J100
Lorsque la macro s'exécute, il faut que toutes les lignes s'effacent si et seulement si la cellule en B est vide.
Pour information, j'ai crée une plage de cellule dynamique que j'ai nommé "suppression_lignes_raison_des_depenses" pour la colonne B5:B100
J'ai déja crée un code, mais lorsque je l'exécute, mais ce dernier ne fait effacer que quelques une des lignes et il faut que je clic plusieurs fois sur le bouton active x pour supprimer les autres
Donc je remet tout depuis le début lol
Bonjour
Je souhaite réaliser une macro sur Excel qui supprimera automatiquement la ligne, si la cellule dans la colonne B est vide.
Mon tableau se définit sur la plage B5:J100
Lorsque la macro s'exécute, il faut que toutes les lignes s'effacent si et seulement si la cellule en B est vide.
Pour information, j'ai crée une plage de cellule dynamique que j'ai nommé "suppression_lignes_raison_des_depenses" pour la colonne B5:B100
J'ai déja crée un code, mais lorsque je l'exécute, mais ce dernier ne fait effacer que quelques une des lignes et il faut que je clic plusieurs fois sur le bouton active x pour supprimer les autres
Private Sub CommandButton1_Click()
Dim cell As Range
For Each cell In Range("suppression_lignes_raison_des_depenses")
If cell.Value = "" Then
cell.EntireRow.Delete Shift:=xlUp
End If
Next cell
End Sub
- | Alerter
Salut,
Rhooooo, j'explique pourtant tout ça, et en image, s'il vous plaît :
![]()
Pas mal du tout ta syntaxe, c'est même excellent. Mais le problème n'est pas là !
J'explique tout ici : http://www.presence-pc.com/forum/ppc/Programmation/tuto...
Si tu as tout compris, refais ton code
Si tu n'as rien compris, relis le topic
Si tu es entre les deux, fais-nous en part
A te lire.
Citation :
Donc je remet tout depuis le début lol 
Pas mal du tout ta syntaxe, c'est même excellent. Mais le problème n'est pas là !
J'explique tout ici : http://www.presence-pc.com/forum/ppc/Programmation/tuto...
Si tu as tout compris, refais ton code
Si tu n'as rien compris, relis le topic
Si tu es entre les deux, fais-nous en part
A te lire.
- | Alerter
Contenus similaires
- Vba excel cell - Forum
- Programmation en excel pdf - Forum
- Macro excel insertion ligne - Forum
- Excel macro supprimer ligne - Forum
Merci, ton topic m'a été d'une grande aide.
Effectivement j'ai réussi à comprendre pourquoi celà ne fonctionnais pas avec mon code, et j'ai réussi à en créer un qui fonctionne.
Cependant, j'ai utilisé la boucle "for next" avec comme valeur de variable: "i" qui est définit de la ligne 44 à 7.
Or, ce que je voudrais se serai définir la variable par rapport à une plage de cellule dynamique.
voici mon code
Comment faire pour remplacer
i = 44 to 7 step - 1 par
"i" = plage de cellule dynamique ?
Next
End Sub
Effectivement j'ai réussi à comprendre pourquoi celà ne fonctionnais pas avec mon code, et j'ai réussi à en créer un qui fonctionne.
Cependant, j'ai utilisé la boucle "for next" avec comme valeur de variable: "i" qui est définit de la ligne 44 à 7.
Or, ce que je voudrais se serai définir la variable par rapport à une plage de cellule dynamique.
voici mon code
Private Sub CommandButton1_Click()
Dim i As Integer
For i = 44 To 7 Step -1
If cells(i, 14).Value = "" Then
cells(i, 14).EntireRow.Delete Shift:=xlUp
End If
Comment faire pour remplacer
i = 44 to 7 step - 1 par
"i" = plage de cellule dynamique ?
Next
End Sub
- | Alerter
rooooooo,
l'indentation, le next manquant
POur ce qui est de ta question... il va falloir que tu fasse faire a VB une recherche du début et de la fin de ton tableau (par exemple)
pour ce faire tu as 2 possibilités :
- soit tu as un tableau avec une colonne dont les cellules sont toujours remplies ... et dans ce cas tu regarde la premiere cellule remplie et la derniere et ton tableau se trouve entre les 2 !!
(assez efficace mais dangeureux ... NEVER trust user input )
- soit tu effectue ton opération sur toute la feuille excel mais comme dans ton cas il faut supprimer des lignes de cellulles vide ... il y en aura un paquet.. et ca risque peut etre d'etre plus lent a l'execution..
donc si je transpose ca en code tu risque d'avoir besoins de :
.Range() , .END()
de telle maniere a faire qqch comme ca :
mainetnant l'autre sollution est de faire cette recherche sur toute la feuille et ainsi de supprimer toutes les lignes qui ont une cellule vide dans la colonne qui t'intéresse :
dans ce cas utilise range sur toute la feuille !!!
l'indentation, le next manquant
POur ce qui est de ta question... il va falloir que tu fasse faire a VB une recherche du début et de la fin de ton tableau (par exemple)
pour ce faire tu as 2 possibilités :
- soit tu as un tableau avec une colonne dont les cellules sont toujours remplies ... et dans ce cas tu regarde la premiere cellule remplie et la derniere et ton tableau se trouve entre les 2 !!
(assez efficace mais dangeureux ... NEVER trust user input )
- soit tu effectue ton opération sur toute la feuille excel mais comme dans ton cas il faut supprimer des lignes de cellulles vide ... il y en aura un paquet.. et ca risque peut etre d'etre plus lent a l'execution..
donc si je transpose ca en code tu risque d'avoir besoins de :
.Range() , .END()
de telle maniere a faire qqch comme ca :
dim first_cell as Range
dim last_cell as Range
dim i as long
dim ws_xxxx as worksheet
set ws_xxxx = Worksheets("...") '// définition de ta feuille excel !!!
set first_cell = ws_xxxx.Columns( ...).end(...) '// trouve la premiere cellule
set last_cell = ws_xxxx.range(first_cell, first_cell.column).end() '// trouve la derniere cellule
for i = last_cell to first_cell step -1 '// ta boucle s'effectue sur le tableau peut importe ou il commence et ou il termine
[...]
Next
mainetnant l'autre sollution est de faire cette recherche sur toute la feuille et ainsi de supprimer toutes les lignes qui ont une cellule vide dans la colonne qui t'intéresse :
dans ce cas utilise range sur toute la feuille !!!
dim i as long '// les integer ne vont qu'a 32367 (qqch comme ca) or les lignes excel vont jusqu'a 65536
for i = 65536 to 1 step -1
[...]
Next
- | Alerter
Ben, elle est où la réponse que je faisais à Schmitx ???????
-------------------
Salut les jeunes,
Eh, oozenot, je crois que tu n'as tout bien compris
D'abord, regarde mieux le message de Schmitx, le Next et le End Sub y sont, mais tous seuls, à la fin du mesage
Il y en a un qui s'est planté
Ensuite, la plage est connue, elle porte un nom : Range("suppression_lignes_raison_des_depenses" ).
Donc il ne s'agit pas de la trouver, mais de l'utiliser.
J'ai quelques devinettes pour Schmitx :
Soit plage, une plage de cellules donnée.
Exemple :
Combien cette plage contient-elle de cellules ?
Quelle est la première cellule de cette plage ?
Quelle est la ligne de la première cellule de cette plage ?
Quelle est la dernière cellule de cette plage ?
-------------------
Salut les jeunes,
Eh, oozenot, je crois que tu n'as tout bien compris
D'abord, regarde mieux le message de Schmitx, le Next et le End Sub y sont, mais tous seuls, à la fin du mesage
Il y en a un qui s'est planté
Ensuite, la plage est connue, elle porte un nom : Range("suppression_lignes_raison_des_depenses" ).
Donc il ne s'agit pas de la trouver, mais de l'utiliser.
J'ai quelques devinettes pour Schmitx :
Soit plage, une plage de cellules donnée.
Exemple :
Dim plage As Range
Set plage = Range("B5:J100")
Combien cette plage contient-elle de cellules ?
Spoiler
Réponse : plage.Cells.Count
Quelle est la première cellule de cette plage ?
Spoiler
Réponse : plage.Cells(1)
Quelle est la ligne de la première cellule de cette plage ?
Spoiler
Réponse : plage.Cells(1).Row
Quelle est la dernière cellule de cette plage ?
Spoiler
Réponse :
C'est à toi de trouver tout seul![[:nyghost] [:nyghost]]()
(J'ai dans l'idée que les questions et réponses précédentes devraient t'aider quand même
)
C'est à toi de trouver tout seul
![[:nyghost] [:nyghost]](http://m.bestofmedia.com/sfp/design/usr/fr/smilies/2e/8f/nyghost.gif)
(J'ai dans l'idée que les questions et réponses précédentes devraient t'aider quand même
)- | Alerter
ah, ben forcément,
s'ai fait ma réponse en partant du dernier code proposé... je ne pensais apas qu'il ne s'agissait que d'un bout..
bah de toute facon ca peut toujours servir ...
et je n'ai meme plus besoin de répondre... tu as déja tout prévu.. sacré zeb...
bon ben j'ai fais un passage inutile !! mdr
...
s'ai fait ma réponse en partant du dernier code proposé... je ne pensais apas qu'il ne s'agissait que d'un bout..
bah de toute facon ca peut toujours servir ...
et je n'ai meme plus besoin de répondre... tu as déja tout prévu.. sacré zeb...
bon ben j'ai fais un passage inutile !! mdr
...
- | Alerter
- | Alerter
J'ai regardé ta proposition de code.
Alors j'ai commencé à rédiger mais cela ne vas pas. Donc si je n'ai pas réussi c'est certainement parce que je n'ai pas saisi la logique du code.
En fait je vais d'abord chercher à savoir pourquoi on doit le rédiger de cette manière et ensuite je reviendrai pour l'écrire et l'adopter à mon problème.
Donc si tu peux simplement m'aiguiller en m'expliquant le rôle de la fonction count puis ce que signifie exactement ce que l'on place dans les parenthèse après cells, celà pourrais m'aider d'avantage.
Merci
Je met quand même mon code, le message d'erreur étant "utilisation incorrect de la propriété de count"
Alors j'ai commencé à rédiger mais cela ne vas pas. Donc si je n'ai pas réussi c'est certainement parce que je n'ai pas saisi la logique du code.
En fait je vais d'abord chercher à savoir pourquoi on doit le rédiger de cette manière et ensuite je reviendrai pour l'écrire et l'adopter à mon problème.
Donc si tu peux simplement m'aiguiller en m'expliquant le rôle de la fonction count puis ce que signifie exactement ce que l'on place dans les parenthèse après cells, celà pourrais m'aider d'avantage.
Merci
Je met quand même mon code, le message d'erreur étant "utilisation incorrect de la propriété de count"
Dim plage As Range
Set plage = Range("n7;n46")
plage.cells.Count
plage.cells (1)
plage.cells(1).Row
plage.cells (31)
end sub
- | Alerter
Nan mais qu'est-ce que c'est que ça ?
Je te donne des fonctions qui renvoient des informations qui sont censées t'aider.
Elles sont faites pour être utilisées dans des calculs, pas pour être mises directement comme ça.
Essaie comme ça, par exemple pour Count :
Et quand t'as compris ce que ça renvoie, réfléchis.
Je te donne des fonctions qui renvoient des informations qui sont censées t'aider.
Elles sont faites pour être utilisées dans des calculs, pas pour être mises directement comme ça.
Essaie comme ça, par exemple pour Count :
MsgBox plage.cells.Count
Et quand t'as compris ce que ça renvoie, réfléchis.
- | Alerter
Lassé par la pub ? Créez un compte