Suppression de lignes sous deux conditions cumulatives

Résolu
Tara4002 Messages postés 4 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je cherche une macro qui me permettrait de supprimer les lignes qui respecteraient deux conditions cumulées:
- que la celulle de la colonne F comprenne la valeur "espèces"
- que la cellule de la colonne C soit égale à la cellule de la colonne C de la ligne inférieure
J'ai essayé de mixer certaines macros proposées sur les forums mais le résultat est catastrophique....
Merci beaucoup par avance

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Sub sup()
    
    'Je cherche une macro qui me permettrait de supprimer les lignes qui respecteraient deux conditions cumulées:
    '- que la celulle de la colonne F comprenne la valeur "espèces"
    '- que la cellule de la colonne C soit égale à la cellule de la colonne C de la ligne inférieure
    'J 'ai essayé de mixer certaines macros proposées sur les forums mais le résultat est catastrophique....
    'Merci beaucoup par avance
    
    Dim LasRow As Long
    lastrow = Derniere_Ligne(ActiveSheet.Name)
    Dim valCduDessous As String
    valCduDessous = ""
    
    'On parcoure les lignes en partant du bas..
    For i = lastrow To 1 Step -1
        valF = Cells(i, 6).Value
        valC = Cells(i, 3).Value
        Debug.Print " Ligne : " & i & " valeur colonne F= " & valF & " valeur colonne C= " & valC & " valeur colonne C du dessous= " & valCduDessous
    
    If valF = "espèces" And valC = valCduDessous Then
       Debug.Print "A supprimer..."
       ' Ici mettre le code de suppression de la ligne
        Rows(i).Delete
     End If
     valCduDessous = Cells(i, 3).Value
    Next
    
    End Sub
    
    Function Derniere_Ligne(Nom_Feuille As String) As Long
     Sheets(Nom_Feuille).Activate
     Derniere_Ligne = Cells.Find("*", Range("A1"), , , xlByRows, xlPrevious).Row + 1 'pour les lignes
    End Function
    
    
    

    0
  2. Tara4002 Messages postés 4 Statut Membre
     
    Quelle réactivité et efficacité et en plus ça fonctionne!
    Vous êtes génial(e)!
    Merci mille fois
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      réactivité et efficacité ... ce sont mes deuxième et troisième prénom ;-)
      Bonne soirée.
      0
    2. Tara4002 Messages postés 4 Statut Membre
       
      Bonjour,
      Je ne sais pour quelle raison dans un de mes fichier les lignes sont inversées, je m'explique :
      Au lieu de comparer la cellule inférieure de la colonne C, je dois comparer à la cellule supérieure.
      Je me suis dit "pas compliqué je modifie la macro" en ce sens, mais pfffff.... Je n'ai malheureusement qu'un prénom ;-)
      Merci pour votre aide
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Tara4002 Messages postés 4 Statut Membre
         
        Il devrait suffire de changer le sens de la boucle ...
        supprime le step-1
        Inverse les variables dans le for..
        for i=1 to lastrow...
        0
    3. Tara4002 Messages postés 4 Statut Membre
       
      merci beaucoup je vais tenter ça... Si pas de nouvelle c'est que ça a fonctionné!
      Excellente journée!
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Tara4002 Messages postés 4 Statut Membre
         
        Arf.. oupss.. désolé...
        j'ai répondu un peu trop vite..
        j'avais oublié que tu faisais une suppression... et dans ce cas là.. il vaut mieux faire la boucle en partant du bas...

        donc, essayes plutot ce code là :
        Sub sup2()
        Dim LasRow As Long
        lastrow = Derniere_Ligne(ActiveSheet.Name)
        Dim valCduDessus As String
        valCduDessus = ""
        
        'On parcoure les lignes en partant du bas..
        For i = lastrow To 2 Step -1
            valCduDessus = Cells(i - 1, 3).Value
            valF = Cells(i, 6).Value
            valC = Cells(i, 3).Value
            Debug.Print " Ligne : " & i & " valeur colonne F= " & valF & " valeur colonne C= " & valC & " valeur colonne C du dessus= " & valCduDessus
        
        If valF = "espèces" And valC = valCduDessus Then
           Debug.Print ">>> A supprimer..."
           Rows(i).Delete
         End If
         
        Next
        
        End Sub
        
        0