Problème lors de la suppression de lignes VBA

2pax.cruz -  
Polux31 Messages postés 7219 Statut Membre -
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

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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)
    0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
    1. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Salut Eric,

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

      Rows(i).Delete fonctionne aussi.

      ;o)
      0