Suspendre l'exécution d'une macro

Bonjour à tous,

J'ai un fichier qui contient une macro générale qui efface les données et dans un onglet, il y a une macro privée. En faisant l'exécution pas à pas de la macro générale, je me suis aperçue que la macro privée s'exécutait à chaque commande d'effacement. Je cherche une commande pour suspendre l'exécution de la macro privée, le temps que la générale fasse son travail et qu'ensuite la privée redevienne active.

Pouvez-vous m'aider (quelle question, bien sur que vous pouvez!)

Un gros merci

Bonne journée

Yugguy

Salut yugguy,

avec un fichier, ce serait même encore plus facile!

A première vue, il pourrait s'agir d'une interception d'événement (Worksheet_Change, par exemple) malencontreuse qui s'exécute à chaque effacement...

A+

Bonjour,

en général ça se règle avec un flag à tester.

En tête d'un module standard et hors procédure :

Public noExec As Boolean

Au début de la sub à contrôler :

If noExec then Exit sub

A l'endroit où tu veux l'inhiber :

noExec = True

Remettre à false quand tu as fini.

eric

Bonjour yugguy , (curulis57, eriiic)

Ha eriiic, le fameux "flag" de nos débuts qui fonctionne toujours, en français "drapeau" ou même "sémaphore"

Un autre solution toujours sur le principe du drapeau (flag) mais sans utiliser de variable "intermédiaire" publique ou privée

Modifier la procédure "privée" avec un paramètre optionnel booléen toujours vrai mais pouvant passer à faux

Sub ProcedurePrivee(Optional avecExec Boolean = True)
    If Not avecExec Then
        Exit Sub
    Else
        ' traitement privé
    End If
End Sub

Ou plus dans la philosophie de la pensée structurée de Nikalus Wirth

Sub ProcedurePrivee(Optional avecExec Boolean = True)
    If avecExec Then
        ' traitement privé
    End If
End Sub

Et dans la procédure appelante

PrcedurePrivee False ' pour ne pas l'exécuter

ou

ProcedurePrivee ' pour l'exécuter de manière automatique

ou

ProcedurePrive True ' qui donne le même résultat puisque le paramètre avecExec est égal à True par défaut

Bonjour andrea,

Je pressent l'idée générale qui peut intéressante dans certains cas mais ... il y a un (même 2) mais.

Pourquoi appeler avec ProcedurePrivee False une macro qui ne sera jamais exécutée ?

Autant ne pas l'appeler ou bien c'est pour en strapper une partie dans certains cas.

Mais surtout ce n'est pas applicable aux macros évènementielles ce qui risque fort d'être le cas ici.

eric

(re)

Effectivement eriic, tu as raison ma solution est inapplicable dans le cas des événementielles

Mais ma "ProcedurePrivee" est toujours exécutée sauf si le paramètre optionnel est passé à FAUX puisque théoriquement il est toujours VRAI

Bonjour,

justement, c'est là où je ne comprend pas la logique.

Pourquoi l'appeler avec false alors que tu ne veux pas l'exécuter ??? Autant ne rien écrire.

Ou bien tu remplaces False par une variable fixée ailleurs et dans ce cas on la retrouve alors que tu voulais l'éliminer.

eric

Bonjour à tous en ce samedi matin !

Il me semble que vous mettez tout en oeuvre pour perdre yugguy !

Son cas ne nécessite apparemment rien d'autre que l'interruption des évènements durant l'exécution de sa macro... A lui de dire s'il a d'autres procédures qui peuvent interférer...

Il peut être intéressant de gérer l'exécution ou non des proc. d'évènements avec des variables booléennes... Je dois même dire qu'à une époque je procédais systématiquement ainsi... mais cela ne présente vraiment d'intérêt que si la situation le justifie : procédures d'évènements à effets multiples, lesquels ont des conditions différentes d'exécution, il serait alors malvenu de bloquer les évènements en bloc, on vérifie avant chaque action à exécuter si elle est autorisée à ce moment...

J'ai un classeur construit de cette façon (pas perso, mais je le maintiens depuis plusieurs années) où la procédure principale est une procédure SelectionChange : selon l'endroit du fichier où se positionne l'utilisateur, un Userform apparaît lui offrant les actions possibles... et les endroits où il peut intervenir librement, aucun Userform.

Bonne journée à tous.

Oui, sans doute suffisant dans son cas.

L'avantage d'utiliser une variable est de laisser toujours les événements actifs, même en cas de plantage.

Je préfère l'utiliser dès que le nombre de lignes de code dans les événements devient conséquent.

eric

Rechercher des sujets similaires à "suspendre execution macro"