Il est de bon ton de se souhaiter la bonne année. Mais vous, et vous seul, pourrez faire en sorte que cette année soit bonne, meilleure que celle qui vient de s'écouler. Apprenez à ne compter que sur vous, car personne n'est plus qualifié que vous-même pour bâtir, réparer ou améliorer votre propre vie. Personne ne fera les choses à votre place. D'ailleurs, tout ce que les autres peuvent faire, c'est souhaiter que vous le fassiez. Et ne croyez pas que tout ceux qui vous entourent vous apporteront des solutions : certains font juste partie de vos problèmes. Transformez vos résolutions en actes, et dans douze mois, retournez-vous et souriez-vous fièrement : C'était long. C'était difficile. Mais ça y est : 2017 était une bonne année, merci Moi.

Les raccourcis-clavier

Lorsqu'une macro est terminée, il s'agit de l'utiliser. Il est bien de pouvoir y accéder simplement, par exemple en utilisant un raccourci clavier.

Il y a deux manière d'assigner un raccourci clavier à une macro :

  1. Dans le menu Outils/Macros/Macros/Options
  2. Avec Application.OnKey

Le plus simple : Outils/Macros

Allez dans Outils/Macros/Macros, et cliquez sur la macro sur laquelle vous désirez affecter un raccourci d'accès rapide, et cliquez sur le bouton Options

Assignez la lettre s, et cliquez sur OK, puis fermez la boîte de dialogue. Désormais, lorsque vous appuierez sur CTRL s, la macro Bidule sera exécutée, en lieu et place de Fichier/Enregistrer, qui était assigné à CTRL s.

Vous avez donc pris la priorité sur Excel. Ca peut être intéressant par exemple pour non seulement enregistrer le classeur classiquement, mais en plus pour en enregistrer une copie ailleurs. Voici un exemple imparfait mais qui donne une idée : Si vous créez une macro Double Sauvegarde :

Sub DoubleSauvegarde()
  ActiveWorkbook.Save
  ActiveWorkbook.SaveAs "D:\Backups\Copie.xls"
End Sub

Et que vous l'assignez au raccourci clavier CTRL s, le classeur sera enregistreé, plus une copie dans D:\Backups. Bien entendu, si l'utilisateur utilise le menu Fichier/Enregistrer, ou clique sur l'icone Disquette, la macro ne s'exécutera pas. Pour ça il faudrait utiliser l'événement de classeur BeforeSave, mais ça, c'est un autre chapitre...

Limitation de ces raccourcis-clavier

Lorsque vous utilisez cette technique, vous êtes limités à utiliser obligatoirement la touche CTRL, avec, si vous le désirez, la touche SHIFT pour avoir les lettres en majuscules (CTRL SHIFT S par exemple, qui est différent de CTRL s), associée(s) à n'importe quel caractère de votre clavier (Chiffre ou lettre, ou %, &, /, é, etc.)

Application.OnKey

On pourrait vouloir qu'une macro se déclenche lorsqu'on appuie sur une simple touche (a, m, %; ...) ou utiliser la touche ALT. Ou même utiliser une combinaison de touches assez compliquée comme CTRL SHIFT ALT K par exemple. C'est possible grâce à la méthone Application.OnKey

Mise en oeuvre

Copiez ces deux macros dans un module VBA Excel (Ou Word, ou n'importe quel programme Office):

Sub Truc()
  Application.OnKey "q", "test"
End Sub

Sub Test()
  MsgBox "ca marche"
End Sub

Exécutez simplement Truc.
Voilà ! Maintenant, lorsque vous êtes dans votre feuille Excel (si vous êtes dans Excel), le simple fait d'appuyer sur q n'écrit pas la lettre q, mais exécute Truc().

Attention :

Pour vous débarasser de ce raccourci, exécutez simplement ceci :

Sub Truc()
  Application.OnKey "q"
End Sub

Vous pouvez également désactiver des raccourcis clavier prédéfinis. Par exemple, si vous voulez interdire de sélectionner toute la feuille avec CTRL a, essayez ceci :

Application.OnKey "^a", ""

Vous ne pouvez pas assigner une séquence de touches comme par exemple abc. Le code suivant génère une erreur :

Application.OnKey "abc", "test"

Par contre, vous pouvez assigner une combinaison, comme ALT q par exemple :

Application.OnKey "%q", "test"

Pour obtenir toutes les possibilités de OnKey, cliquez simplement su OnKey dans votre VBA, et appuyez sur F1.

Voici quelques exemples :

CTRL ENTER :
Application.OnKey "^~", "test"

F12 :
Application.OnKey "{F12}", "test"

CTRL ALT SHIFT F12 :
Application.OnKey "%^+{F12}", "test"

---