Macro supprime ligne selon la valeur d'une cellule

Résolu/Fermé
Harry Baux Messages postés 17 Date d'inscription samedi 14 décembre 2013 Statut Membre Dernière intervention 30 décembre 2013 - 14 déc. 2013 à 21:52
Harry Baux Messages postés 17 Date d'inscription samedi 14 décembre 2013 Statut Membre Dernière intervention 30 décembre 2013 - 30 déc. 2013 à 21:41
Bonjour à tous,
J'ai cette macro VBA qui me permet de supprimer des ligne si une cellule contient une certaine valeur.

Sub supression_Codes_Oper()

Dim DerLig As Long, ligne As Long
Const Code = 11 'constante (code = intitulé colonne) (11 = numéro de colonne)
Application.ScreenUpdating = False
With Worksheets("test") 'avec le classeur "test"
DerLig = .Range("c" & Rows.Count).End(xlUp).Row
For ligne = DerLig To 2 Step -1
If UCase(.Cells(ligne, Code)) = "86" _
Or UCase(.Cells(ligne, Code)) = "32" _
Then .Rows(ligne).Delete
Next ligne
End With
Application.ScreenUpdating = True
End Sub

Cependant, lorsque j'essaie de modifier le = par <> afin que la macro ne me supprime plus la ligne qui contient la valeur, mais supprime les lignes qui ne contiennent pas cette valeur elle me supprime toutes les lignes du tableau

exemple

Or UCase(.Cells(ligne, Code)) <> "32" 'si la valeur de la cellule ne contient pas 32
Then .Rows(ligne).Delete ' alors supprime la ligne

Egalement si j'utilise les signe > et < la macro ne fonctionne pas

exemple

Or UCase(.Cells(ligne, Code)) > "32" 'si la valeur de la cellule est supèrieur à 32
Then .Rows(ligne).Delete ' alors supprime la ligne


J'ai remplacé le = par like et cela fonctionne
Par contre is not like ne fonctionne pas.

Quelqu'un aurait une explication ?
Je ne comprends pas.

(il y a bien d'autre macros qui font cela mais je souhaiterai comprendre la logique de celle ci)
Merci

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
14 déc. 2013 à 22:26
Bonjour,

si j'utilise les signe > et < la macro ne fonctionne pas

If .Cells(ligne, Code) > 32 
devrait mieux fonctionner car si tu mets "32", la macro compare en texte et tu n'as pas besoin de ucase avec des nombres.

If UCase(.Cells(ligne, Code)) <> "86" _
Or UCase(.Cells(ligne, Code)) <> "32" _
Then .Rows(ligne).Delete

Si tu l'as écrit ainsi, toutes tes lignes sont obligatoirement supprimées car elles ne peuvent pas être égales à 32 et 86 simultanément donc elles sont toutes différentes soit de 32 soit de 86.
0