Boucle VBA pour le moins étrange...

ExcelManDuDimanche -  
 le père -
Bonjour,

J'ai réalisé une macro qui me permet de supprimer 1 ligne si jamais certaines cellules ne contiennent pas une chaîne de caractère donnée.

Je rencontre néanmoins un pb : je demande à cette macro de réaliser l'opération sur toutes les lignes jusqu'à ce qu'elle rencontre une case vide. Malgré tout, la macro semble oublier de supprimer des lignes alors qu'elles répondent bien aux critères que j'ai indiqués!!

Lorsque je ré exécute le code une seconde fois la macro supprime bien des lignes qu'elle aurait du supprimer lors du premier passage. Voici le code utilisé :

Do
If ActiveCell.Offset(0, 3).Value = "JE" Then
If Not ActiveCell.Offset(0, 1).Value Like "*reventilation*" Then
If Not ActiveCell.Offset(0, 1).Value Like "*Stock*" Then
ActiveCell.EntireRow.Delete
End If
End If
End If
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Offset(1, 0).Value <> ""

A quoi est dû le fait que les lignes répondant à mes critères ne sont pas supprimées au premier passage? Et surtout, comment faire en sorte que ça marche??!!

D'avance merci,

Pierre

1 réponse

le père
 
Bonjour

Quand tu fais un DELETE d'une ligne, elle est supprimée et la suite du tableau est remonté.
Donc la ligne suivante prend la place de la ligne courante
Donc si tu fais ActiveCell.Offset(1, 0).Select après, tu as sauté une ligne
La solution, c'est de ne passer à la ligne suivante que si tu n'as rien effacé.

Autre problème : tu t'arrêtes une ligne avant la fin. Regarde la fin de ta boucles : tu passes à la ligne suivante. Elle devient donc la ligne courante, que tu n'as pas encore traitée. Mais tu testes la ligne encore suivante dans ton Loop, donc la dernière n'est jamais traitée
0