Suppression de lignes sous deux conditions cumulatives [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
mercredi 26 novembre 2014
Statut
Membre
Dernière intervention
27 novembre 2014
-
Messages postés
31217
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 janvier 2021
-
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

Messages postés
31217
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 janvier 2021
3 217
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



Messages postés
4
Date d'inscription
mercredi 26 novembre 2014
Statut
Membre
Dernière intervention
27 novembre 2014

Quelle réactivité et efficacité et en plus ça fonctionne!
Vous êtes génial(e)!
Merci mille fois
Messages postés
31217
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 janvier 2021
3 217
réactivité et efficacité ... ce sont mes deuxième et troisième prénom ;-)
Bonne soirée.
Messages postés
4
Date d'inscription
mercredi 26 novembre 2014
Statut
Membre
Dernière intervention
27 novembre 2014

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
Messages postés
31217
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 janvier 2021
3 217 >
Messages postés
4
Date d'inscription
mercredi 26 novembre 2014
Statut
Membre
Dernière intervention
27 novembre 2014

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...
Messages postés
4
Date d'inscription
mercredi 26 novembre 2014
Statut
Membre
Dernière intervention
27 novembre 2014

merci beaucoup je vais tenter ça... Si pas de nouvelle c'est que ça a fonctionné!
Excellente journée!
Messages postés
31217
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 janvier 2021
3 217 >
Messages postés
4
Date d'inscription
mercredi 26 novembre 2014
Statut
Membre
Dernière intervention
27 novembre 2014

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