Réponse acceptée !
Salut Gorion87,
Cette exemple de macro permet la suppression de ligne entière.
Donc si tu as des données par exemple sur la ligne A3, B3, C3 etc et que le *Data* se trouve en A3
la ligne entière sera supprimé.
Sub Macro1()
Dim trouver As Boolean
'initialisation d'un variable pour nous indiquer quand *Data* est trouvé
trouver = False
' ta boucle for avec quelques ajouts... :o)
For X = 2 To Range("A65536").End(xlUp).Row
If Range("A" & X) = "*Data*" Then
'*data* a été trouvé donc ont passe la variable à vrai
trouver = True
'supprimer la valeur *Data*
Rows(X).Delete
'supprimer la cellule avant celle contenant *Data*
' sans modifier la valeur de X qui est la position originale ou se trouvait *Data*
Rows(X - 1).Delete
End If
' Si la variable trouver est à vrai
If trouver = True Then
'boucler 6 fois pour les 6 lignes suivant la ligne contenant *Data*
For I = 1 To 6
'Pour supprimer les 5 premières lignes
If I <> 6 Then
Rows(X).Delete
Else
'si la boucle est rendu à 6 supprimer la valeur de la 6e lignes avant l'exécution 'de la macro...
Rows(X - 1).Delete
End If
Next I
End If
'une fois complété, remettre la variable trouver à faux afin de terminer la
'première boucle ou permettre de trouver une autre ligne contenant *Data*
trouver = False
Next X
End Sub
Comme vous pouvez le constater, je boucles 6 fois pour supprimer les 6 lignes. Les 5 premières lignes supprime toujours la même ligne et la 6e boucle tombe dans un else qui supprime la ligne avant la 5e...
À première vu, cela peut sembler illogique, mais en réalité c'est tout à fait cohérent. Le tout fonctionne, car Excel lorsque vous supprimer une ligne fait remonter d' une ligne les lignes suivante.
Donc si vous avez *Data* écrit à la ligne A3 et *Data2* à la ligne A4
et que vous désirez supprimer les deux lignes. Vous supprimerez 2 fois la ligne A3.
Une fois pour *Data* et une seconde fois pour *Data2*. Puisque suite à la suppression de *Data* , *Data2* sera remonté d'une ligne automatiquement pour être inscrit en ligne A3 au lieu de A4.
Pour la suppression de la 6e ligne, je recule d'une ligne, car je sais que le fais de supprimer *Data* et la valeur de la ligne précédents, fait que mes valeurs des 6 prochaines lignes remonteront eux aussi d'une ligne.
Comme je ne peux modifier la position de ma variable dans mon premier For , car je ne serais plus positionné sur la ligne *Data* original, mais sur une ligne trop loin ou une ligne trop tard, je garde la même position et utilise l'automatisme de Excel à mon avantage.
Je peu ainsi sans bougé de ligne supprimer les 5 valeurs dans les 5 premières lignes à supprimer et comme chaque fois que je supprime une valeur celle en dessous d'elle remonte d'une ligne. Le même phénomène que A3 devenu A4 se produit.
Si nous ajoutons la suppression de la lignes au dessus de la valeur *data* ainsi que la ligne contenant *data* trouver par la boucle au début de la macro, nous arrivons avec une différence d'une ligne entre la position du premier For et celle au se trouve la valeur correspondant à la 6e ligne en dessous de *data* avant l'exécution de la macro. Il faut donc reculer d'une ligne pour supprimer la bonne donnée.
En espérant que mes explications vous seront utiles.
Bon code !
emarck