Problème lors de la suppression de lignes VBA

[Fermé]
Signaler
-
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
-
Bonjour,


je suis en train de travailler sous VBA et j'ai un soucis.
Je dois supprimer les lignes qui ne commencent pas par un point.
J'ai fais cela :

For i = 1 To 250
If Not Cells(i, 1) Like ".*" Then
Cells(i, 1).Delete
End If
Next i


Le seul soucis, c'est qu'il reste encore des lignes qui ne sont pas correctes.

En fait, je crois que c'est du au fait qu'il remonte les lignes à chaque fois. Je m'explique.

Il analyse la ligne 1 : imaginons qu'elle soit mauvaise, il la supprime. Donc tout remonte d'une ligne.
Il analyse ensuite la ligne 2. Mais ce qui était auparavant dans la ligne 2 est dorénavant dans la ligne 1. Donc il n'a pas analysé cela.
Je sais pas si c'est compréhensible.

Comment faire?

Merci.

2 réponses

Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 174
Bonjour,

Il faut décrémenté i de 1 si la ligne est supprimée. Il faut également sortir de la boucle dès qu'une cellule en A est vide, sous peine de faire une boucle infinie:

For i = 1 To 250
If Cells(i,1).Value = "" Then Exit For
If Not Cells(i, 1) Like ".*" Then
Cells(i, 1).Delete
i = i - 1
End If
Next i 



;o)
Messages postés
24185
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 septembre 2021
6 904
Bonsoir,

Ou bien faire ta boucle en partant du bas :
For i = 250 To 1 step -1

D'autre part tu parles de supprimer la ligne, pour ça tu devrais modifier ainsi :
Cells(i, 1).entirerow.Delete

eric
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 174
Salut Eric,

Exact il manque Entirerow et en bouclant à rebours ça le fait bien aussi.

Rows(i).Delete fonctionne aussi.

;o)