VBA excel condition supprimer lignes
Résolu/Fermé
Fou_Du_Guidon
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
-
8 juil. 2009 à 10:06
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 - 8 juil. 2009 à 15:17
Fou_Du_Guidon Messages postés 320 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 juillet 2010 - 8 juil. 2009 à 15:17
A voir également:
- Supprimer lignes excel avec condition vba
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne excel - Guide
- Liste déroulante excel - Guide
- Supprimer une page word - Guide
- Supprimer compte instagram - Guide
9 réponses
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
8 juil. 2009 à 10:39
8 juil. 2009 à 10:39
Bonjour,
une syntaxe possible :
A+
une syntaxe possible :
If Range("Y2") = "" And Range("Z2") = "" Then Rows(2).Delete Shift:=xlUp End If If Range("Y3") = "" And Range("Z3") = "" Then Rows(3).Delete Shift:=xlUp End If
A+
Fou_Du_Guidon
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
8 juil. 2009 à 10:43
8 juil. 2009 à 10:43
Oui possible mais il faudrai imbriquier les 2 IF du genre si Y vide on va voir a Z si Z vide on supprime.
Merci de te pencher sur la question.
Merci de te pencher sur la question.
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
8 juil. 2009 à 10:52
8 juil. 2009 à 10:52
Oui bien sur imbriquer les if ça peut avoir une utilité si tu as des traitements à faire si Y est vide tout seul ..
Voila une syntaxe pour l'imbrication :
Voila une syntaxe pour l'imbrication :
If Range("Y2") = "" Then '..... traitement si Y2 est vide et que Z2 soit vide ou pas If Range("Z2") = "" Then Rows(2).Delete Shift:=xlUp else '... traitement si Y2 est vide et Z2 non vide End If End If
Fou_Du_Guidon
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
8 juil. 2009 à 11:12
8 juil. 2009 à 11:12
C'est bon sa fonctionne , mais sa ne va pas jusqu'a la fin. Et aussi une ligne est traité deux fois si la suivante est supprimée avec ca sa fonctionne?
Rows(ligne).Delete
ligne = ligne - 1
Merci encore
Rows(ligne).Delete
ligne = ligne - 1
Merci encore
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
8 juil. 2009 à 11:52
8 juil. 2009 à 11:52
Oui, habituellement quand on doit nettoyer un fichier en supprimant des lignes on fait un traitement qui remonte de la dernière ligne à la première du style :
EDIT : Le delete décale les lignes vers le haut même si on omet l'argument Shift, comme il s'agit de la suppression d'une ligne il décale par defaut vers le haut
For NumLigne = Derligne To 2 Step -1 If Range("Y" & NumLigne) = "" Then '..... If Range("Z" & NumLigne) = "" Then Rows(NumLigne).Delete Shift:=xlUp End If End If Next NumLigne
EDIT : Le delete décale les lignes vers le haut même si on omet l'argument Shift, comme il s'agit de la suppression d'une ligne il décale par defaut vers le haut
Fou_Du_Guidon
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
8 juil. 2009 à 13:49
8 juil. 2009 à 13:49
Arf sa ne supprime aucune lignes, et sa me décale d'une colonne le contenu de la colonne I est remplacer par celle d'aprés
Je comprend pas :-/
Je comprend pas :-/
Fou_Du_Guidon
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
8 juil. 2009 à 13:50
8 juil. 2009 à 13:50
Je met le code au besoin
Sub PréparationRetour()
'
' PréparationRetour Macro
'
'
nom_fichier = InputBox("Nom du fichier :", "Saisir le nom du fichier à traiter")
If nom_fichier = "" Then Exit Sub
If Right(nom_fichier, 4) <> ".xls" Then nom_fichier = nom_fichier & ".xls"
Workbooks(nom_fichier).Activate
'Workbooks("Zone 1.xls").Activate
For NumLigne = Derligne To 2 Step -1
If Range("W" & NumLigne) = "" Then
If Range("X" & NumLigne) = "" Then
Rows(NumLigne).Delete Shift:=xlUp
End If
End If
Next NumLigne
Columns("AE:AH").Select
Selection.Delete Shift:=xlToLeft
Columns("AB:AB").Select
Selection.Cut
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Windows("Retour44.xls").Activate
Workbooks(nom_fichier).Activate
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:AD500").Select
Selection.Copy
Windows("Retour44.xls").Activate
Range("A2").Select
ActiveSheet.Paste
End Sub
Sub PréparationRetour()
'
' PréparationRetour Macro
'
'
nom_fichier = InputBox("Nom du fichier :", "Saisir le nom du fichier à traiter")
If nom_fichier = "" Then Exit Sub
If Right(nom_fichier, 4) <> ".xls" Then nom_fichier = nom_fichier & ".xls"
Workbooks(nom_fichier).Activate
'Workbooks("Zone 1.xls").Activate
For NumLigne = Derligne To 2 Step -1
If Range("W" & NumLigne) = "" Then
If Range("X" & NumLigne) = "" Then
Rows(NumLigne).Delete Shift:=xlUp
End If
End If
Next NumLigne
Columns("AE:AH").Select
Selection.Delete Shift:=xlToLeft
Columns("AB:AB").Select
Selection.Cut
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Windows("Retour44.xls").Activate
Workbooks(nom_fichier).Activate
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:AD500").Select
Selection.Copy
Windows("Retour44.xls").Activate
Range("A2").Select
ActiveSheet.Paste
End Sub
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
8 juil. 2009 à 14:22
8 juil. 2009 à 14:22
C'est Derligne qui est à 0 donc il ne passe pas dans la boucle For.
En fait Derligne est une variable qui représente la dernière ligne mais il faut l'initialiser avant la boucle.
Si le nombre de ligne est connu il faut mettre la valeur avant le for (Derligne= 100 par exemple)
Sinon, il faut calculer la dernière ligne avec une instruction du type
Derligne = Range("A65536").End(xlUp).Row
Ici c'est la colonne A qui est testée. Cette instruction initialise Derligne avec le dernier numéro de ligne dans laquelle la cellule A n'est pas vide. Il faut donc l'adapter en trouvant la colonne qui est pertinente dans ton cas.
Je n'ai pas regardé le reste du code.
Teste avec Derligne initialisé et dis moi si le reste fonctionne comme tu le souhaites.
A+
En fait Derligne est une variable qui représente la dernière ligne mais il faut l'initialiser avant la boucle.
Si le nombre de ligne est connu il faut mettre la valeur avant le for (Derligne= 100 par exemple)
Sinon, il faut calculer la dernière ligne avec une instruction du type
Derligne = Range("A65536").End(xlUp).Row
Ici c'est la colonne A qui est testée. Cette instruction initialise Derligne avec le dernier numéro de ligne dans laquelle la cellule A n'est pas vide. Il faut donc l'adapter en trouvant la colonne qui est pertinente dans ton cas.
Je n'ai pas regardé le reste du code.
Teste avec Derligne initialisé et dis moi si le reste fonctionne comme tu le souhaites.
A+
Fou_Du_Guidon
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
8 juil. 2009 à 15:17
8 juil. 2009 à 15:17
Ok ok c'est bon sa fonctionne en faite je me suis compliquer un peu beaucoup la vie mais j'ai réglé c'est bon.
merci pour ta précieuse aide.
merci pour ta précieuse aide.