OVH Cloud OVH Cloud

if then next

3 réponses
Avatar
nospam
Bonjour,

Voici la macro ci-dessous. Le but est de recopier des feuilles d'un classeur
(nom_fichier) à l'autre (nom_fichier_copie).
Je voudrais ignorer dans cette démarche une seule feuille (nommée
"pastoucher"). Je ne veux donc pas quitter totalement la boucle mais ignorer
la suite des instructions dans cette boucle.
J'ai donc ajouté la ligne "If nom_feuille_courante = "pastoucher" Then Next
i" mais il me jette en me disant erreur macro : "next sans for".
Comment faire ?


For i = 1 To nbfeuille
Windows(nom_fichier).Activate
nom_feuille_courante = Sheets(i).Name
If nom_feuille_courante = "pastoucher" Then Next i
Windows(nom_fichier_copie).Activate
Sheets.Add
ActiveSheet.Name = nom_feuille_courante
................
................
next i

merci d'avance

Olivier

3 réponses

Avatar
Stéphane [MS]
Bonjour,

La structure à adopter serait plutôt du style :

For i = 1 To nbfeuille

If nom_feuille_courante = "pastoucher" Then
' traitement si le test est vérifié

End if
Next

Cdlt
Stéphane

a écrit dans le message de news:
bpr3bg$ha0$
Bonjour,

Voici la macro ci-dessous. Le but est de recopier des feuilles d'un
classeur

(nom_fichier) à l'autre (nom_fichier_copie).
Je voudrais ignorer dans cette démarche une seule feuille (nommée
"pastoucher"). Je ne veux donc pas quitter totalement la boucle mais
ignorer

la suite des instructions dans cette boucle.
J'ai donc ajouté la ligne "If nom_feuille_courante = "pastoucher" Then
Next

i" mais il me jette en me disant erreur macro : "next sans for".
Comment faire ?


For i = 1 To nbfeuille
Windows(nom_fichier).Activate
nom_feuille_courante = Sheets(i).Name
If nom_feuille_courante = "pastoucher" Then Next i
Windows(nom_fichier_copie).Activate
Sheets.Add
ActiveSheet.Name = nom_feuille_courante
................
................
next i

merci d'avance

Olivier


Avatar
popi
Salut Olivier,

Olivier a écrit dans le message de news:
bpr3bg$ha0$
Bonjour,

Voici la macro ci-dessous. Le but est de recopier des feuilles d'un
classeur

(nom_fichier) à l'autre (nom_fichier_copie).
Je voudrais ignorer dans cette démarche une seule feuille (nommée
"pastoucher"). Je ne veux donc pas quitter totalement la boucle mais
ignorer

la suite des instructions dans cette boucle.
J'ai donc ajouté la ligne "If nom_feuille_courante = "pastoucher" Then
Next

i" mais il me jette en me disant erreur macro : "next sans for".
Comment faire ?


Pour compléter Stéphane, pour garder le fil de ta macro tu pourrais sauter à
une ligne portant une étiquette juste avant le next i du genre :
...
If nom_feuille_courante = "pastoucher" Then GoTo feuille_a_garder
...
...
feuille_a_garder: ' ici l'étiquette avec les 2 points obligatoires
Next i

Celà dit tu peux aussi simplifier comme çà :

Workbooks(nom_fichier).Activate
For Each s In Worksheets
If s.Name <> "pastoucher" Then s.Copy
After:=Workbooks(nom_fichier_copie).Sheets(1)
Next

@+ popi

Avatar
Vincent.
Salut !
Ton problème vient du fait que tu as oublié le End If
avant le Next.
Du coup, quand le compilateur arrive sur le If, il va le
plus loin possible dans le code pour trouver le End If. Là-
dessus, il tombe sur un Next qui n'a pas de for (dans le
cadre du If). Du coup, il te le dit : Next sans For...
Et c'est assez peu visible de voir que ce n'est pas dans
la boucle qu'il y a un problème mais dans le test !
Voilà, j'espère avoir été assez clair !
A+

V.

-----Message d'origine-----
Bonjour,

Voici la macro ci-dessous. Le but est de recopier des
feuilles d'un classeur

(nom_fichier) à l'autre (nom_fichier_copie).
Je voudrais ignorer dans cette démarche une seule feuille
(nommée

"pastoucher"). Je ne veux donc pas quitter totalement la
boucle mais ignorer

la suite des instructions dans cette boucle.
J'ai donc ajouté la ligne "If nom_feuille_courante
= "pastoucher" Then Next

i" mais il me jette en me disant erreur macro : "next
sans for".

Comment faire ?


For i = 1 To nbfeuille
Windows(nom_fichier).Activate
nom_feuille_courante = Sheets(i).Name
If nom_feuille_courante = "pastoucher" Then Next i
Windows(nom_fichier_copie).Activate
Sheets.Add
ActiveSheet.Name = nom_feuille_courante
................
................
next i

merci d'avance

Olivier
.