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
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.
A voir également:

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
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+
0
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
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.
0
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
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
0
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
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
0

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
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
0
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
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 :-/
0
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
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
0
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
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+
0
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
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.
0