Comment remonter dans une procédure si condition=Vrai ???

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour le Forum,

Je me torture l'esprit pour trouver la réponse mais je n'y parviens pas la.

Voici un extrait de ma Macro :

Code:
Sub MACRO_EN_MODE_PAS_A_PAS()

UserForm1.Show 'Affiche l'UserForm1

If UserForm1("OptionButton" & 1).Value = True Then
    Call DONNÉES 'On appelle les différentes sous-procédures les unes après les autres
    Call FORMULAIRE
    Call CALIBRATION
    Call COURBE
End If

Unload UserForm1

End Sub

Mon problème est le suivant :

Une fois que je suis entrain de dérouler la procédure nommée "DONNÉES", si tout se déroule correctement alors je sors de la procédure "DONNÉES" pour revenir dans la procédure générale pour finalement enchainer dans une nouvelle procédure nommée "FORMULAIRE".
Jusque la tout vas bien, tout s'enchaine comme il faut.

Maintenant lorsque je suis dans la procédure nommée "DONNÉES", j'aimerais si j'en ai besoin, quitter cette procédure et revenir juste avant la ligne affichant "UserForm1.Show 'Affiche l'UserForm1".

En gros si je fait annuler une fois dans "DONNÉES" et bien sa me ré affiche mon UserForm et sa ne fait pas seulement quitter la procédure Sub de "DONNÉES" pour continuer sur la procédure "FORMULAIRE".

Il faut donc pourvoir remonter des niveaux...

Merci à ceux qui pourront m'éclairer.

Cordialement,

André
 

Misange

XLDnaute Barbatruc
Re : Comment remonter dans une procédure si condition=Vrai ???

Bonjour

Dans la macro données, fait un test et si le résultat du test est vrai
unload l'userform puis au besoin recharge le.

Cela dit, il est en général plus simple de procéder de la façon suivante .
par exemple les utilsateurs rentrent une valeur dans un textbox. Si la valeur ne correspond pas à ce qui est attendu, on fait resaisir. On fait ça de façon à valider chaque contrôle du formulaire et dans un bouton valider, on traite les données préalablement validées.
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Comment remonter dans une procédure si condition=Vrai ???

En fait l'UserForm possède 3 optionsBoutton. L'utilisateur est obligé d'en choisir un. Quand il à validé le formulaire, alors le programme suis son court et entre dans la procédure "DONNÉES". Cette procédure permet de charger un fichier depuis son disque dur. Le soucis c'est que si l'utilisateur décide ne pas charger de fichier, donc s'il fait cancel ou croix rouge alors j'aimerais le faire revenir à l'userFom du début sois au pire sortir de la sub "DONNÉES" ET sortir de la sub "MACRO PAS A PAS".


Ce n'est pas un problème de contrôle de formulaire car le formulaire est déjà contrôlé.

En gros la question est comment faire quitter la sub "DONNEES" ET la Sub "MACRO PAS A PAS" sans entrer dans la sub "FORMULAIRE".

Je ne sais pas si je suis clair. Je reste dans le coin pour plus de compléments.

André
 

chris

XLDnaute Barbatruc
Re : Comment remonter dans une procédure si condition=Vrai ???

Bonjour

Dans ce cas il faut définir une variable binaire, Public, du style GOON.
Au départ GOON est true, mais s'il y a une rupture GOON doit être valorisée à False.
Dans le procédure principal faire précéder les CALL d'un IF pour tester la variable
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Comment remonter dans une procédure si condition=Vrai ???

Alors déclarer une variable publique je sais faire. De type binaire beaucoup moins !

Code:
Public GOON as byte ???

Bref, ensuite je l'initialise :

Code:
GOON = True

Et enfin entre ma procédure "DONNÉES" et "FORMULAIRE" j’intercale un test supplémentaire de contrôle.

Code:
Call DONNÉES
If GOON = False then
Je met quoi comme action ???
Par exemple, UserForm1.Show ???
Ou alors Exit sub peut être ???
End if
Call FORMULAIRE


Il me faudrait un peu plus d'info pour coder dans de bonnes conditions. Je ne pense pas être si loin de la vérité avec mes propositions mais quand même j'ai des doutes^^.

Merci à vous déjà pour ces précieuses infos.

André
 

chris

XLDnaute Barbatruc
Re : Comment remonter dans une procédure si condition=Vrai ???

RE

Code:
Public GOON As Boolean
pour la déclaration

Code:
If GOON=false then exit sub
pour le test : dans le cas ou elle est true la procédure continue normalement

Donc juste cette ligne entre l'appel à DONNEES et le CALL suivant
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Comment remonter dans une procédure si condition=Vrai ???

Re,

J'ai pu tester tout sa et sa fonctionne bien.

J'ai tout de même une remarque...

Dans le test :

Code:
If GOON =False Then Exit Sub

Est-il possible de lui faire faire ce test la :

Code:
If GOON =False Then Restart Sub


Evidément j'invente la commande Restart la. Mais je voudrais savoir si elle existe justement ? Car si je fait Exit sub alors l'utilisateur doit manuellement relancer la macro. Et moi j'aurais préférer qu'elle se relance toute seule. Donc un genre de "Restart sub" serait parfait je pense.

Enfin sa n'existe peut être pas lol. En tout cas cette solution de variable publique fonctionne pour le moment.

Donc déjà Merci pour sa.
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Comment remonter dans une procédure si condition=Vrai ???

Je viens d'essayer :

Code:
If GOON =False Then Run"MACRO_PAS_A_PAS"

MAis je n'ai pas le sentiment que sa relance la macro depuis le début. Du coup sa me fait planter la suite. En revanche si je met "Exit sub" puis relancement manuel sa fonctionne. Donc Run"XXX" n'est pas équivalent à "Exit sub plus action manuel" ???
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Comment remonter dans une procédure si condition=Vrai ???

Finalement je m'en suis sorti avec une étiquette "Start:" que j'ai placé juste après "Sub MACRO_PAS_A_PAS()".

Et sa fonctionne.

Du coup si mon test "If GOON=False Then Goto Start".

Et voila. Plus besoin de réinitialiser manuellement la macro.

Merci a vous tous. Problème définitivement résolu.

Cordialement,

André
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 859
Membres
103 978
dernier inscrit
bderradji