Bonjour,
Je viens partager ici une solution simple et sûrement améliorable pour qu'une macro écrite pour un classeur et associée à un raccourci (type Ctrl +a) ne puisse pas être lancée si le classeur n'est pas actif.
Problème :
1- sur un classeur (disons classeur1.xlsb), je fais une Sub insert() qui insère une ligne au-dessus de la ligne 10 et la colore en vert. Je lui associe Ctrl + i.
2- en plus de classeur1.xlsb, j'ouvre classeur2.xlsb, qui n'a rien à voir avec le 1er. Je tappe alors Ctrl + i pour mettre un texte en italique et... c'est la Sub insert() qui se lance et je me retrouve avec une ligne verte !
J'ai cherché assez longtemps une solution pour réduire la portée d'une Sub à un seul classeur, mais je n'ai pas trouvé. La syntaxe "Option Private Module" au début du module ne permet pas d'affecter un raccourci clavier. Cela peut avoir du sens car un raccourci est par nature pour tous les classeurs. Mais pour mon besoin, non !
Solution :
Dans la Sub insert(), mettre l'instruction
Puis créer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Call ClasseurActifCheck
Si le fichier actif n'est pas celui où est enregistré la macro, on n'exécute pas la macro.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub ClasseurActifCheck() If ActiveWorkbook.Name <> ThisWorkbook.Name Then Call MsgBox("Vous avez tapé un raccourci clavier qui correspond à une Sub du fichier '" & ThisWorkbook.Name & "'." _ & Chr(10) & "Ce classeur n'étant pas celui qui était actif lors du lancement de la Sub, celle-ci n'est pas exécutée", _ vbInformation, "Sub ClasseurActifCheck()") End End If End Sub
En espérant vous faire gagner un peu de temps de recherche si vous avez le même besoin que moi.
Partager