Boucle For et Gosub

Signaler
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007
-
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007
-
salut g le code suivant
For i = 1 To 3
If WsExist(UserForm1.Controls("txtnaff" & i).Value) = True Then
ActiveWorkbook.Sheets(UserForm1.Controls("txtnaff" & i).Value).Select: GoSub coloration
Exit Sub
Else
ActiveWorkbook.Sheets.Add.Name = UserForm1.Controls("txtnaff" & i).Value: GoSub coloration
Exit Sub
End If
Next i

il ne m'execute que l'une ou l'autre partie du code après then alors que la condition peut etre true ou false selon i. mon Gosub est il mal placé?
Niikko

4 réponses

Messages postés
402
Date d'inscription
jeudi 25 novembre 2004
Statut
Membre
Dernière intervention
7 juin 2009
5
Non, ton problème vient du Exit Sub.

J'ai remis un peu tout ça en forme :

Public Sub MonTest()
For i = 1 To 3
'Teste si ton machin existe
If WsExist(UserForm1.Controls("txtnaff" & i).Value) = True Then
'Si il existe, tu sélectionnes ta feuille
ActiveWorkbook.Sheets(UserForm1.Controls("txtnaff" & i).Value).Select
'Tu effectues ta routine de coloration
GoSub Coloration
'Tu sors de la procédure MonTest
Exit Sub
Else
'Si il n'existe pas, tu ajoutes une feuille
ActiveWorkbook.Sheets.Add.Name = UserForm1.Controls("txtnaff" & i).Value
'Tu effectues ta routine de coloration
GoSub Coloration
'Tu sors de la procédure MonTest
Exit Sub
End If
Next i
Coloration:
MsgBox "Coloration"
Return
End Sub

Conclusion : dès le premier passage dans ta boucle (i=1), quel que soit le résultat du test tu sors de la procédure. Les passages suivants (i=2 et i=3) ne se font donc pas. Il faut sortir de la proc après la boucle.

Public Sub MonTest()
For i = 1 To 3
'Teste si ton machin existe
If WsExist(UserForm1.Controls("txtnaff" & i).Value) = True Then
'Si il existe, tu sélectionnes ta feuille
ActiveWorkbook.Sheets(UserForm1.Controls("txtnaff" & i).Value).Select
'Tu effectues ta routine de coloration
GoSub Coloration
Else
'Si il n'existe pas, tu ajoutes une feuille
ActiveWorkbook.Sheets.Add.Name = UserForm1.Controls("txtnaff" & i).Value
'Tu effectues ta routine de coloration
GoSub Coloration
End If
Next i

'Tu sors de la procédure MonTest à la fin de la boucle
Exit Sub

Coloration:
MsgBox "Coloration"
Return

End Sub

PS : En général, je préfère créer une procédure Coloration, plutôt que d'utiliser un GoSub. Je trouve le code plus facile à lire surtout quand tu commences à mettre des
GoSub C1
...
GoSub C2
...

C1:
...
Return
C2:
...
Return
Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
bonjour

je pense plutot qu'il n'execute qu'une foista boucle, car Le Gosub fait sortir ton programme de la boucle

essaie en mettant le gosub en derniere ligne...
Messages postés
1352
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
19 novembre 2008
2
Est-ce qu'on utilise Gosub de nos jours ??



Bon, avec gosub le procedure coloration doit avoir "Return" à la fin
pour revenir à la case de départ sinon au lieu de "txtnaff" &
i ==> "txtnaff" & trim(str(i))
PS: Si votre problème est résolu, prière de bien vouloir clôturer votre message par une réponse acceptée !
Messages postés
50
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
4 septembre 2007

je ne suis qu'un débutant je fais donc avec les moyens du bord
merci à mrdep1978...effectivement il me fait le traitement dans les conditions false et true avec le exit sub bien placé..... sauf que maintenant il plante dans la boucle for si je laisse un des "txtnaff" vide
Niikko