VBA excel condition supprimer lignes

Résolu
Fou_Du_Guidon Messages postés 347 Statut Membre -  
Fou_Du_Guidon Messages postés 347 Statut Membre -
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.

--
Si vous avez besoin de quelque chose, appelez-moi. Je vous dirai comment vous en passer.
-Coluche-
Configuration: Une bonne bébétte bien docile ;-)

9 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
  2. Fou_Du_Guidon Messages postés 347 Statut Membre 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.
    0
  3. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
  4. Fou_Du_Guidon Messages postés 347 Statut Membre 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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
  7. Fou_Du_Guidon Messages postés 347 Statut Membre 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 :-/
    0
  8. Fou_Du_Guidon Messages postés 347 Statut Membre 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
    0
  9. pilas31 Messages postés 1878 Statut Contributeur 648
     
    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
  10. Fou_Du_Guidon Messages postés 347 Statut Membre 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.
    0