sortir de plusieurs macros

ZZR09

XLDnaute Occasionnel
Bonjour le Forum :)

Voici mon problème du jour :
j'ai plusieurs macros imbriquées. La principale (créer_feuill) lance d'autres macros (Userforms secondaires) selon les choix de l'utilisateur.

L'utilisateur a, entre autres, la possibilité de sortir des userforms secondaires grace au bonton 'Annuler' qui a la propriété 'Cancel'.

Mon problème est le suivant :
Je voudrais que lorsque l'utilisateur choisi d'annuler, cela le fasse sortir des macros; y compris la principale.

En fait, dans mon cas, l'utilisateur sort de la macro secondaire mais la principale (créer_feuill) continue.

Quelqu'un a t-il une autre solution que de mettre des sortes de balises dans ma macro principale (ce serait plutôt long étant donné le nombre de macros secondaires)
:whistle:

Merci
 

ZZR09

XLDnaute Occasionnel
Merci Jeannot45

Je n'ai pas réussi ni avec End ni avec Stop.
J'ai essayé (avec Créer_feuille=nom de la macro principale):

Créer_Feuill end sub

J'ai été voir dans l'aide pour End et Stop mais je n'ai rien trouvé.

D'autres idées?
 

Gibson94

Nous a quitté
Repose en paix
Bonjour ZZR09, Jeannot45, le forum,

Tu devrais mettre à l'endroit où tu dois sortir de ta sub, un simple 'Goto Fin', et tu écrit 'Fin:' juste avand 'End Sub'.

Ainsi tu feras un saut jusqu'à la fin de ta routine.
 

ZZR09

XLDnaute Occasionnel
Re Gibson94

Merci de ta réponse.

Cela me permet de sorti de la routine en cours; j'utilise Exit Sub; c'est le même principe.

Mais, ces codes ne me permettent pas de sortir complètement des macros, et plus précisément de ma macro principale : 'Créer_Feuille'.

Je suis toujours ouvert à d'autre propositions!

A+
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Tu peux créer un booleen

Public Test as booleen

Sub MacroPrincipal()

.....

Test=false
Macrosecondaire
If test =true then exit sub

.........

end sub

Sub macrosecondaire()

.....

If annuler then '<=== Là c'est ta procédure d'annulation
Test=true
exit sub
end if

......

End sub
 

ZZR09

XLDnaute Occasionnel
Merci pascal76 et ceux qui se sont penché sur ce pbm :p

je testerai cette solution ce soir,
c'est en fait ce que j'appelais 'mettre des balises' dans mon premier message.
C'est long puisqu'à la sortie de chaque macro secondaire je dois tester la valeur 'test'

Mais si au lieu de réfléchir je l'avais fait, ce serait déjà fini!

C'est comme ça quand on apprend : on perd beaucoup de temps à ne pas savoir se que l'on peut ou ne peut pas faire ;)

A+
ZZR09
 

PascalXLD

XLDnaute Barbatruc
Modérateur
RE

Juste pour préciser ce n'est pas à la sortie de toutes tes macros secondaires que tu testes ta variable boolenne

C'est sur ta macro secondaire jsute après le retour de tes macros secondaires que tu testes

Sur tes macros secondaires tu as juste à mettre à true ta valeur booleen

cela donne ceci pour 3 macros secondaires

Public Test as booleen

Sub MacroPrincipal()

.....

Test=false
Macro2
If Test=true then exit sub
.........
Macro3
If Test=true then exit sub
.........
Macro4
If Test=true then exit sub
.........
end sub

Sub macro2()
.....
If annuler then '<=== Là c'est ta procédure d'annulation
Test=true
exit sub
end if
......
End sub

Sub macro3()
.....
If annuler then '<=== Là c'est ta procédure d'annulation
Test=true
exit sub
end if
......
End sub

Sub macro4()
.....
If annuler then '<=== Là c'est ta procédure d'annulation
Test=true
exit sub
end if
......
End sub
 

Gibson94

Nous a quitté
Repose en paix
Salut ZZR09, Jeannot, Pascal, le forum

Juste un mot pour le 'then Goto Fin'.

Si toutefois tu ne souhaites pas sortir de la procédure, mais simplement de toutes les boucles, cette fonction te permet de faire une ou plusieurs actions avant de quitter ta procédure...Protect. Range ou autres... et rien ne t'empèche d'inclure un 'exit sub' avant l'étiquette 'Fin:' ou dans certaines boucles qui nécessitent un exit immédiat...direct...sans la promenade sur les bords de mer.

Bye
 

ZZR09

XLDnaute Occasionnel
Bonjour Pascal76, Gibson94, le Forum
Merci pour vos précisions ;)
J'utilise la procédure de Pascal76 et intègre au passage un

vError=' ... le type de l'erreur ou le moment où l'utilisateur a choisi de quitter la macro ...'
goto Error

C'est moins 'violent'
Voilà, ça fonctionne pour un; il faut maintenant que je fasse tous les autres.

A+
et merci encore :lol:
 

Discussions similaires

Réponses
1
Affichages
333

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 337
Messages
2 087 391
Membres
103 536
dernier inscrit
komivi