[VBA] Userform et changement de macro

Fermé
IFE - 15 déc. 2009 à 20:47
 IFE - 18 déc. 2009 à 21:04
Salutation à tous,

Je viens à vous car j'ai un soucis pour une programmation VBA.
Je créer une petite histoire automatique, où les choix de l'utilisateur aurai une incidence sur le déroulement de l'histoire (type Un livre dont VOUS êtes le héros).
Pour ce faire, j'utilise des fonctions Goto pour aller au paragraphe correspondant suivant les choix. Cependant, pour un meilleur esthétisme, je souhaite utiliser un Userform où il suffirai de cliquer sur un bouton pour faire son choix. Seul problématique: comment revenir à ma macro principale une fois le bouton cliqué?

Pour illustrer mon problème, un exemple:

sub histoire ()
ligne de code de début d'histoire
introduction
Goto 1
1:
ligne de code
Goto 3
2:
ligne de code
Userform1.Show
3:
ligne de code
Goto 2
4:
ligne de code
5:
ligne de code

Comme vous pouvez le voir, au paragraphe 2, j'appelle ma Userform. Donc quel code je doit utiliser, au niveau de la Userform (et de ses boutons pour être plus précis) pour retourner à cette macro ci-dessus. En admettant, par exemple, si je clique sur le bouton 1, je vais en 5, si je clique sur le bouton 2, je vais en 4.

J'espère avoir été assez clair.
Merci de votre aide à tous
A voir également:

2 réponses

Bonsoir,

Quand tu affiches une Userform, l'exécution de la macro qui affiche cette userform est suspendue jusqu'à sa fermeture. Donc en cliquant sur le bouton1, il faut initialiser une variable publique qui va renseigner le programme sur la suite à donner, et fermer la userform. Le code pourrait être celui-ci:

CommandButton1_Click()
ActionSuivante = 1
Me.Hide
End Sub

Et le programme principal interprete ActionSuivante
2:
ligne de code
Userform1.Show
If ActionSuivante = 1 Then Goto 5
If ActionSuivante = 2 Then Goto 4

La variable Action suivante se déclare dans un Module
Public ActionSuivante as Integer

Si je peux te donner un autre conseil, évite d'abuser des Goto. Les programmes spaghetti sont très difficiles à lire donc à déboguer le cas échéant. Quand il y a beaucoup de conditions, utilses plutot l'instruction Select Case ... End Select à l'interieur d'une boucle Do ... While. Autant prendre les bonnes habitudes tout de suite.

A+.
0
Merci de ta réponse Calibos

J'ai testé ta proposition, mais malheureusement il ne m'emmène pas au 'paragraphe' souhaitez lors de l'exécution.
De plus en mettant ActionSuivante as Integer, il me mets une erreur de compilation. Je vais peut-être fait l'impasse dessus ;)

Sinon pour ton conseil, tu n'es pas le seul à me l'avoir donné ^^. Comme j'ai pas mon livre de VBA avec moi, j'ai du improviser un truc. Mais rien n'empêche les améliorations. D'où la Userform, qui sera bien plus joli qu'un simple InputBox ^^
Ta proposition sera la suivante sur la liste :p, dès que je me serai familiariser avec cette fonction.

Merci à toi en tout cas, ça me donne un début de travail
0