Ouverture d’un classeur mais désactivation des macros (Microsoft Excel)
Bob traite des informations dans un classeur à l’aide d’une macro. Il aimerait que la macro ouvre un deuxième classeur contenant une macro de fermeture automatique, mais il ne souhaite pas qu’il s’exécute lorsque le deuxième classeur est fermé.
Il recherche un moyen d’ouvrir le deuxième classeur, sous le contrôle de la macro dans le premier classeur, sans activer les macros dans le deuxième classeur.
Il n’existe aucun moyen de désactiver les macros dans le deuxième classeur lors de son ouverture sous contrôle macro. (Si vous l’ouvrez manuellement, vous pouvez évidemment maintenir la touche Maj enfoncée pendant que le classeur s’ouvre, mais cela n’aide pas votre macro – elle n’a pas de doigts pour maintenir cette touche!)
Il existe cependant quelques solutions de contournement. La première consiste à modifier votre code qui ferme le deuxième classeur, de cette manière:
Application.EnableEvents = False Workbooks("SecondBook.xls").Close Application.EnableEvents = True
En définissant la propriété EnableEvents sur False, l’événement qui va se produire (fermeture du classeur) ne déclenchera pas la macro AutoClose.
Vous pouvez (et devez) ensuite définir la propriété EnableEvents sur True afin que les événements puissent se poursuivre ultérieurement.
Une autre solution de contournement consiste à définir une sorte d ‘«indicateur» dans la macro AutoClose du deuxième classeur. Cet indicateur peut tester pour voir si le premier classeur est ouvert et, dans l’affirmative, ne pas exécuter le code principal dans la macro AutoClose.
Pour ce faire, dans le deuxième classeur en haut des pages du module, ajoutez le code suivant:
Dim AutoCloseDisabled as Boolean Sub DisableAutoClose() AutoCloseDisabled=True End Sub
Notez que l’instruction de déclaration pour la variable AutoCloseDisabled est en dehors de toute procédure, ce qui signifie qu’elle aura une portée globale et sera accessible dans toutes les procédures.
Ensuite, modifiez la macro AutoClose afin que son corps soit inclus dans une instruction If, comme indiqué ici:
Sub AutoClose() 'variable declarations here If Not AutoCloseDisabled then 'body of AutoClose here End if End Sub
L’idée est que lorsque le deuxième classeur est ouvert normalement, la variable AutoCloseDisabled sera automatiquement définie sur False. (Les variables booléennes par défaut à False lorsqu’elles sont déclarées.) Étant donné que la procédure DisableAutoClose n’est jamais exécutée dans le classeur, l’instruction If de la macro AutoClose permet au corps réel de la macro d’être exécuté.
Si vous ouvrez le deuxième classeur à partir de votre premier classeur, le code de votre premier classeur peut appeler la macro DisableAutoClose dans le deuxième classeur, définissant ainsi l’indicateur AutoCloseDisabled sur True. Cela signifie que lorsque le deuxième classeur est fermé, l’instruction If ignorera le corps de la macro AutoClose.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (10232) s’applique à Microsoft Excel 2007 et 2010. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:
link: / excel-Opening_a_Workbook_but_Disabling_Macros [Ouverture d’un classeur mais désactivation des macros]
.