VBA question à propos d'un For each

neeser

XLDnaute Nouveau
Bonjour tout le monde,
Je tente de supprimer les lignes dont la cellule de la première colonne n'est pas de couleur blanche (colorindex=-4142)
Voici ce que j'ai écris

For Each c In Range("A1:A100")
If c.Interior.ColorIndex <> -4142 Then
c.EntireRow.Delete
End If
Next


Pour une raison que j'ignore, ça fonctionne moitié, quand j'exécute la macro, ça me supprime quelques lignes dont la premiere cellule est d'une autre couleur, mais pas tous... il faut que je l'éxécute à plusieurs reprises avant que toutes les lignes concernées soient effacées. Je ne comprends pas ce que je fais de mal. Merci à l'avance de vos judicieux conseils!
 

BrunoM45

XLDnaute Barbatruc
Bonjour neeser,
Si tu étais passer en mode débogage sur ton VBA, avec la feuille active, tu aurais pu voir ce qui se passait ;)

C'est une erreur de débutant :p il faut supprimer tes lignes en ordre inverse (de la dernière à la première)
Tu ne dois pas utiliser "each"

A+
 

neeser

XLDnaute Nouveau
Merci de l'info, étant en effet un débutant, que puis-je utiliser plutôt que each, et comment je fais pour lui indquer de procéder de façon inverse?, c'est pas mal la seule boucle que je connais...
Merci à l'avance!
 

Chris401

XLDnaute Accro
Bonjour

Essaye :
VB:
Sub SupprimeLigne()
Dim i As Integer
Application.ScreenUpdating = False
    For i = 100 To 1 Step -1
       If Not Cells(i, 1).Interior.ColorIndex = -4142 Then Rows(i).Delete
    Next i
End Sub
 

neeser

XLDnaute Nouveau
Ah ben maintenant je comprends pourquoi je voyais souvent des opérations semblables sous cette forme! Merci beaucoup Chris401, ça fonctionne parfaitement!
 

Discussions similaires


Haut Bas