Qu'est ce qui ne fonctionne pas dans ma boucle

rimbaut Messages postés 61 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 1 juin 2014 - 22 août 2008 à 12:44
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 - 22 août 2008 à 13:54
Re Bonjour,
Je m'essaye sur les boucles en vba et je comprends que je vous sollicite beaucoup. Cependant, j'achoppe depuis un moment sur ce code qui apparemment ne traite que la première ligne.

Quelqu'un peut il me dire ce qui ne va pas. Voici le code :

Sub SupprimerLigne()
Worksheets("Stockretraite").Activate

Dim y As Integer
Dim Ligne As Range

y = 11


For Each Ligne In Range("a11:k4211")
If Cells(y, 3).Value = 0 Then
Rows(y).Select
Selection.Delete Shift:=xlUp
End If


Next

End Sub

3 réponses

pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
22 août 2008 à 13:32
primo
tu ne teste que la cellule Cells(y, 3) c'est à dire la cellule Cells(11, 3)
secundo avec
Rows(y).Select

Selection.Delete Shift:=xlUp 

tu effaces la ligne 11
donc la ligne 12 devient la ligne 11
dans ce cas il faut faire la boucle en partant de la fin et remonter

de plus
Rows(y).Select


Selection.Delete Shift:=xlUp 

peut avantageusement s'écrire
Rows(y).Delete Shift:=xlUp 

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
rimbaut Messages postés 61 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 1 juin 2014
22 août 2008 à 13:38
Merci pour ta réponse pile_poil,
Si je comprends bien je dis mettre un compteur pour incrémenter mon test. Mais celui ci je le mets après le end if ou avant le if ?
Ensuite, je ne sais pas comment l'on fait la boucle en partant de la fin. Peux tu me l'expliquer si cela ne te d"range pas.
Encore merci pour ton aide. Je débute en vba et j'essaye d'écrire du code simple
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
22 août 2008 à 13:54
pour trouver la derniere ligne du tableau contenant une donnée
faut partir d'en bas et remonter :
Range("A65536").End(xlUp).Row  '65536 étant le nombre maximum de lignes d'un tableau excel jusqu'la version 2007

donc ton code devient
dim y as integer
for y = Range("A65536").End(xlUp).Row to 1 step -1
     If Cells(y, 3).Value = 0 Then
Rows(y).Delete Shift:=xlUp 
next y

attention quand meme à Cells(y, 3).Value = 0
 le teste vérifie que la cellule contient la valeur numérique 0
si ta cellule est au format string il faut alors tester par exemple "0"
si elle est au format string et vide tu peux alors tester ""
ou encore utiliser vbNullString

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0
Rejoignez-nous