VBA Excel - Pb d'actualisation boucle for
Résolu/Fermé
saian-sugus
Messages postés
34
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
20 avril 2010
-
19 août 2008 à 15:29
saian-sugus Messages postés 34 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 20 avril 2010 - 20 août 2008 à 10:23
saian-sugus Messages postés 34 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 20 avril 2010 - 20 août 2008 à 10:23
A voir également:
- VBA Excel - Pb d'actualisation boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si et excel - Guide
3 réponses
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 259
19 août 2008 à 19:18
19 août 2008 à 19:18
Bonjour,
Si tu effaces la ligne 2 c'est la ligne 3 qui devient 2...
Dans ce cas il faut toujours partir du bas :
For d = nb_lignes to 2 step -1
et plus de pb...
eric
PS: désolé macgawel je ne t'avais pas lu jusqu'au bout la 1ère fois...
Si tu effaces la ligne 2 c'est la ligne 3 qui devient 2...
Dans ce cas il faut toujours partir du bas :
For d = nb_lignes to 2 step -1
et plus de pb...
eric
PS: désolé macgawel je ne t'avais pas lu jusqu'au bout la 1ère fois...
macgawel
Messages postés
664
Date d'inscription
mercredi 7 mai 2008
Statut
Membre
Dernière intervention
1 novembre 2008
89
19 août 2008 à 15:47
19 août 2008 à 15:47
Bonjour.
C'est normal : VBA - comme la plupart des langages de programmation (en fait, tous ceux que je connais) "calcule" la boucle avant de la parcourir.
En gros :
1. Il regarde la boucle FOR, et voit qu'il doit donner les valeurs 2 à nb_lignes=170 à d.
2. Ensuite, même si tu diminues la valeur de nb_lignes, il est trop tard...
Une solution :
Utiliser une boucle WHILE, et incrémenter la valeur de d "manuellement" (attention, je ne maîtrise pas le VBA, il y a peut-être des erreurs).
Mais en général, pour éviter ce genre de problème on part du "haut" :
De cette manière, quand tu supprimes une ligne, il passe à la précédente et ça ne devrait plus poser de problème :
Tu supprimes la ligne 150, puis tu passes à la ligne 149 qui n'a pas changé.
J'espère avoir été clair...
C'est normal : VBA - comme la plupart des langages de programmation (en fait, tous ceux que je connais) "calcule" la boucle avant de la parcourir.
En gros :
1. Il regarde la boucle FOR, et voit qu'il doit donner les valeurs 2 à nb_lignes=170 à d.
2. Ensuite, même si tu diminues la valeur de nb_lignes, il est trop tard...
Une solution :
Utiliser une boucle WHILE, et incrémenter la valeur de d "manuellement" (attention, je ne maîtrise pas le VBA, il y a peut-être des erreurs).
d = 2 WHILE d <= nb_lignes IF Cells(d, 6) = "Educateur/trice social-e" Then Range("A" & d).Select Selection.EntireRow.Delete d = d - 1 nb_lignes = nb_lignes - 1 End IF ... d = d+1 End WHILE
Mais en général, pour éviter ce genre de problème on part du "haut" :
FOR d = nb_lignes to 2 step -1 'Voir la syntaxe exacte pour aller en descendant... IF Cells(d, 6) = "Educateur/trice social-e" Then Range("A" & d).Select Selection.EntireRow.Delete End IF ... end FOR
De cette manière, quand tu supprimes une ligne, il passe à la précédente et ça ne devrait plus poser de problème :
Tu supprimes la ligne 150, puis tu passes à la ligne 149 qui n'a pas changé.
J'espère avoir été clair...
yahya_44
Messages postés
2
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 août 2008
20 août 2008 à 09:09
20 août 2008 à 09:09
salut
j v savoir
comment j peut sortit de compilation avec un botton
merci
j v savoir
comment j peut sortit de compilation avec un botton
merci
20 août 2008 à 10:23
en effet je n'avais pas du tout pensé à cette solution, parfait :)
Je vais mettre cela à jour, bonne journée !