Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

arrêter toutes les macros

7 réponses
Avatar
Roland Miller
Bonjour,

Depuis une macro je lance des macros =C3=A0 tour de r=C3=B4le.

Si dans une de ces macros je cible une situation sp=C3=A9cifique =E2=80=A6 =
je souhaiter arr=C3=AAter toutes les macros.

Lorsque je lance alors Exit sub =C3=A7a arr=C3=AAte la macro en cours mais =
=C3=A7a me retourne =C3=A0 la macro qui a lanc=C3=A9 l'autre macro.

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

Merci =C3=A0 l'avance.

7 réponses

Avatar
MichD
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
Avatar
Roland Miller
Un grand merci. Ça fonctionne parfaitement.
Avatar
MichD
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
Avatar
Geo
Bonjour
Un
End
n'aurait pas fait l'affaire ?
Avatar
MichD
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
Avatar
MichD
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
Avatar
Geo
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.