Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

condition dans une macro

4 réponses
Avatar
Benoît
Bonsoir,

je cherche la formule me permettant lorsque je déclenche une macro de
supprimer toutes les lignes dont le contenu dans la colonne X est différent
de Y.

merci pour votre aide

4 réponses

Avatar
Daniel.C
Bonjour.
Essaie (avec prudence) :

Sub Test()
Dim Plage As Range
With ActiveSheet
Set Plage = Range([X1], [Y65000].End(xlUp))
Plage.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("T1:T2")
Set Plage = Plage.Offset(1).Resize(Plage.Rows.Count - 1)
Set Plage = Plage.SpecialCells(xlCellTypeVisible)
Plage.EntireRow.Delete
End With
End Sub

Cordialement.
Daniel

Bonsoir,

je cherche la formule me permettant lorsque je déclenche une macro de
supprimer toutes les lignes dont le contenu dans la colonne X est différent
de Y.

merci pour votre aide
Avatar
Benoît
Bonjour

j'ai plutot utilsé cette formule

For Each c In Range("X2:X600")

If c <> Y Then Rows(c.Row).Delete
Next

mais la macro met énormément de temps à s'effectuer

de plus je suis obligé de la faire tourner plusieurs fois de suite pour
avoir un résultat correct.

avez vous d'autres propositions ?

merci

"Benoît" a écrit dans le message de groupe de
discussion :
Bonsoir,

je cherche la formule me permettant lorsque je déclenche une macro de
supprimer toutes les lignes dont le contenu dans la colonne X est
différent de Y.

merci pour votre aide
Avatar
Daniel.C
Oui la mienne, avec cette précision que en T1, la cellule est vide et
en T2, il faut mettre la formule :
=ET(X2<>Y2;X2<>"")
X1 et Y1 étant censés contenir des entêtes :

Sub Test()
Dim Plage As Range
With ActiveSheet
Set Plage = Range([X1], [Y65000].End(xlUp))
Plage.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Range("T1:T2")
Set Plage = Plage.Offset(1).Resize(Plage.Rows.Count - 1)
Set Plage = Plage.SpecialCells(xlCellTypeVisible)
Plage.EntireRow.Delete
End With
End Sub

Daniel

Bonjour

j'ai plutot utilsé cette formule

For Each c In Range("X2:X600")

If c <> Y Then Rows(c.Row).Delete
Next

mais la macro met énormément de temps à s'effectuer

de plus je suis obligé de la faire tourner plusieurs fois de suite pour avoir
un résultat correct.

avez vous d'autres propositions ?

merci

"Benoît" a écrit dans le message de groupe de
discussion :
Bonsoir,

je cherche la formule me permettant lorsque je déclenche une macro de
supprimer toutes les lignes dont le contenu dans la colonne X est différent
de Y.

merci pour votre aide
Avatar
FdeCourt
Salut,

Comme tu supprimes des lignes, tu dois partir du bas et remonter. A
chaque fois que tu supprimes une lignes, tu ne fait pas la comparaison
avec la qui était originellement la suivante, puisqu'elle à pris la
place de la ligne supprimé, et ne sera pas à nouveau étudié.
Imaginons que tu supprime la ligne B
Alors la ligne qui était C devient B
B ayant déjà été instruit, Excel passera directement à la ligne C , qui
était avant la suppression la ligne D
Ainsi la ligne qui était originellement C ne sera pas étudiée, d'ou
l'obligation de partir du bas et de remonter.

Cordialement,

F.