Macro supprime ligne selon la valeur d'une cellule

Résolu
Harry Baux Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
Harry Baux Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Contributeur Dernière intervention   4 724
 
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