Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2011, 15h29   #1
Membre à l'essai
 
Inscription : avril 2011
Messages : 67
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 67
Points : 21
Points : 21
Par défaut probleme de for next

Bonjour,

dans le code ci dessous, il ne prend qu'une ligne sur 2. Pourquoi?

Code :
1
2
3
4
5
6
7
8
9
10
For i = 1 To Range("A65536").End(xlUp).Row
 
If Range("A" & i).Value = 3 Then
 
Range("A" & i).EntireRow.Copy Sheets("feuil2").Cells(Rows.Count, 1).End(xlUp)(2)
Range("A" & i).EntireRow.Delete
 
End If
 
Next i
gigalia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h33   #2
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 596
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 596
Points : 1 748
Points : 1 748
Bonjour,

Il existe de nombreux exemples pour ce problème récurrent.

Lorsque l'on fait un delete il faut parcourir les lignes du bas vers le haut

Code :
1
2
3
For i =Range("A65536").End(xlUp).Row to 1 step -1 
'...
Next i
__________________
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/09/2011, 15h33   #3
Membre éprouvé
 
Homme Franck PRESSE
Inscription : août 2010
Messages : 202
Détails du profil
Informations personnelles :
Nom : Homme Franck PRESSE
Âge : 38
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : août 2010
Messages : 202
Points : 444
Points : 444
Bonjour,
Il ne prends qu'une ligne sur 2 car à chaque itération de ta boucle tu supprimes une ligne :
Code :
Range("A" & i).EntireRow.Delete
Code :
1
2
3
For i = 1 To 10
Range("A" & i).EntireRow.Delete
Next
Lors de la suppression de la ligne 1 (i=1), la ligne 2 devient la ligne 1, la ligne 3 devient la ligne 2.
La boucle continue, i = 2 traite la ligne 2 (qui était en fait la ligne 3 au départ)...

Pour contourner ce souci, la boucle doit commencer à la fin et boucler avec Step -1 :
Code :
1
2
3
For i = 10 To 1 Step - 1
Range("A" & i).EntireRow.Delete
Next
__________________
Cordialement,
Franck P.


Ps : n'oubliez pas de placer vos posts comme "résolus" () si tel est le cas...
pijaku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h34   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
Bonjour,

Si tu supprimes des lignes, excel décalera les lignes vers le haut.
Il faut donc a chaque suppression reculer de 1 la variable i

Code :
1
2
3
4
5
6
7
8
9
10
For i = 1 To Range("A65536").End(xlUp).Row
 
If Range("A" & i).Value = 3 Then
 
Range("A" & i).EntireRow.Copy Sheets("feuil2").Cells(Rows.Count, 1).End(xlUp)(2)
Range("A" & i).EntireRow.Delete
i=i-1
End If
 
Next i
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/09/2011, 15h40   #5
Membre à l'essai
 
Inscription : avril 2011
Messages : 67
Détails du profil
Informations forums :
Inscription : avril 2011
Messages : 67
Points : 21
Points : 21
Bonjour,

Oui c'est clair maintenant. De plus j'avais déja eu le cas que je suis bête.

Merci à tous.
gigalia est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h19.


 
 
 
 
Partenaires

Hébergement Web