VBA excel condition supprimer lignes [Résolu/Fermé]

Signaler
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
-
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
-
Bien le bonjour,
Je ne sais pas traduire ce code pouvez vous m'aider?
Si cellule Y2 = vide ET cellule Z2 = vide
suprimer ligne
Si cellule Y3 = vide ET cellule Y3 = vide
suprimer ligne
....
...
Donc voila, je vous serais reconnaissant
merci.

9 réponses

Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
587
Bonjour,

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+
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
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.
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
587
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 :

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
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
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
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
587
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 :

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
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
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 :-/
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
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
Messages postés
1823
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
587
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+
Messages postés
320
Date d'inscription
mardi 26 mai 2009
Statut
Membre
Dernière intervention
9 juillet 2010
38
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.