arrêter toutes les macros

Le
Roland Miller
Bonjour,

Depuis une macro je lance des macros à tour de rôle.

Si dans une de ces macros je cible une situation spécifique … =
je souhaiter arrêter toutes les macros.

Lorsque je lance alors Exit sub ça arrête la macro en cours mais =
ça me retourne à la macro qui a lancé l'autre macro.

Dois-je alors aussi avoir du code pour arrêter la macros "source" ou e=
xiste t'il un bout de code qui arrête tout?

Merci à l'avance.
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
MichD
Le #26540357
Bonjour,
Dans le haut d'un module standard, tu déclares une variable comme Public
L'emploi du mot Public permet à cette variable d'être valide dans
n'importe quel module du projetVBA.
Exemple : Public Arrêt As Boolean
Dans une des procédures en exécution, lorsque les conditions sont
réunies et que tu désires arrêter la procédure, tu écris ceci :
Arrêt = True
Exit sub
Dans la procédure générale qui appelle les procédures secondaires, tu
testes la valeur de la variable "arrêt" après chaque appel des
procédures secondaires. Si la variable = true, tu mets fin à la
procédure principale sans oublier de remettre la variable à False.
If arrêt = True then
Arrêt = false
Exit sub
end if
MichD
Roland Miller
Le #26540371
Un grand merci. Ça fonctionne parfaitement.
MichD
Le #26540377
Le 17/03/20 à 18:51, Roland Miller a écrit :
Un grand merci. Ça fonctionne parfaitement.


Il y a au moins une autre manière de faire. Au lieu de déclarer une
variable comme Public dans le haut du module, tu ajoutes un paramètre à
la procédure. Voici un petit exemple :
Sub test() 'La procédure principale
Dim MyVar As Boolean
'La procédure test1 à un paramètre. Si dans la procédure Test1, tu veux
mettre fin à l'exécution, tu passes le paramètre MyVar à true suivi de
Exit sub.
Call Test1(MyVar)
'Tu peux faire ce test pour chacune des procédures.
If MyVar = True Then Exit Sub
Call Test2(MyVar)
End Sub
'-------------------------------------
Sub Test1(MyVar As Boolean)
MyVar = True
Exit Sub
MsgBox "toto"
End Sub
'-------------------------------------
Sub Test2(MyVar As Boolean)
MyVar = True
Exit Sub
MsgBox "toto"
End Sub
'-------------------------------------
MichD
Geo
Le #26540379
Bonjour
Un
End
n'aurait pas fait l'affaire ?
MichD
Le #26540387
Le 18/03/20 à 02:51, Geo a écrit :
Bonjour
Un
End
n'aurait pas fait l'affaire ?

Bonjour Geo,
La HIC avec cette commande c'est qu'elle réinitialise toutes les
variables du projetVBA, c'est-à-dire que toutes les variables de type
numérique sont égales à 0 et celles contenant du texte = ""
À plus d'un égard, cela est un comportement gênant! Cela ne signifie pas
qu'à l'occasion on ne puisse pas avoir recours à cette commande...
MichD
MichD
Le #26540397
Le 18/03/20 à 06:19, MichD a écrit :
Le 18/03/20 à 02:51, Geo a écrit :
Bonjour
Un
End
n'aurait pas fait l'affaire ?

Bonjour Geo,
La HIC avec cette commande c'est qu'elle réinitialise toutes les
variables du projetVBA, c'est-à-dire que toutes les variables de type
numérique sont égales à 0 et celles contenant du texte = ""
À plus d'un égard, cela est un comportement gênant! Cela ne signifie pas
qu'à l'occasion on ne puisse pas avoir recours à cette commande...
MichD

Pour être plus précis, la commande "End" réinitialise aussi les
variables Objet tels Range, Workbook, worksheet, etc. Elle vide aussi
les tableaux (Array) qui ont été définis.
Remarque, c'est peut-être une solution sur un fichier ayant une
composante VBA très limitée.
MichD
Geo
Le #26540402
Pour être plus précis, la commande "End" réinitialise aussi les variables
Objet tels Range, Workbook, worksheet, etc. Elle vide aussi les tableaux
(Array) qui ont été définis.

Ok
Dans la demande de Roland, il ne semble pas que ce soit un
inconvénient.
Si on doit continuer dans la première macro, c'est effectivement un
problème.
Ta solution est plus souple.
Poster une réponse
Anonyme