Lancer une fonction VBA sur raccourci clavier

entoanhuu Messages postés 7 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 12 juin 2009 - 26 sept. 2008 à 14:34
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 3 oct. 2008 à 23:34
Bonjour.
J'aurais voulu savoir s'il est possible sous VBA access de lancer des fonctions grâce à des raccourcis clavier?
Si oui, comment faire?

En l'occurence, j'aimerais pouvoir rafraichir un formulaire (Me.refresh) en appuyant sur F5.

Merci de votre aide.

6 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
26 sept. 2008 à 19:12
Bonjour entoanhuu

Dans les propriétés du formulaire, associe la procédure événementielle suivante à l'évènement "sur touche appuyée" :

Private Sub Form_KeyDown(KeyCode as Integer, Shift as integer)
if KeyCode 116 and shift 0 then Me.Refresh
end sub

@+
0
entoanhuu Messages postés 7 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 12 juin 2009
27 sept. 2008 à 00:48
Merci de la rapidité de ta réponse. J'ai collé ce bout de code dans le module vb de mon form (en l'associant à l'évènement sur touche appuyée"). Cela compile bien.

Mais rien ne se passe lorsque j'appuie sur F5. Pourtant mon curseur est bien sur mon formulaire.

Y a-t-il une option à activer dans Access?
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
2 oct. 2008 à 20:33
Tout d'abord, toutes mes excuses de ne pas avoir répondu plus tôt, j'étais indisponible.

En principe, il n'y a pas d'option à activer dans Access.

Pour débugger ce pb, je vous suggère la démarche suivante :

- dans la feuille de propriété du formulaire, placez le curseur à la ligne "sur touche appuyée"
- sélectionnez "[Procédure événementielle]" et cliquez sur le bouton "..."
- dans le corps de la procédure, saisissez "msgbox keycode"

Testez la touche F5. En principe, le code nnn de la touche doit s'afficher (en principe, nnn 116). Remplacez alors "msgbox keycode" par "if keycode nnn then Me.Refresh".

J'espère que mes explications ne sont pas trop confuses...

Cordialement
0
entoanhuu Messages postés 7 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 12 juin 2009
2 oct. 2008 à 23:32
Merci de me répondre. Tes explications sont très claires. Je code en vb depuis quelques mois déjà. Mais je n'avais jamais utilisé cet évènement.

J'ai mis la msgbox keycode dans le code de la procédure évènementielle de l'évènement "sur touche appuyé" du formulaire.
Mais quand je test en appuyant sur n'importe quelle touche de mon clavier, aucun message n'apparait...
A croire que l'évènement n'a pas été détecté...

Donc ça ne marche toujours pas malheureusement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
3 oct. 2008 à 01:51
Merci de me rassurer sur la clarté de mes explications. Je ne suis membre de ce forum que depuis quelques jours, et certaines questions ou réponses m'ont surpris par leur confusion. C'est donc tout naturellement que me posais la question, "Et moi, est-ce je sais me faire comprendre ???". Me voilà rassuré.

Voici ce que je vous propose : créer une macro Macro1 ( action : ExécuterCode, paramètre test() ) et d'affecter cette macro à l'événement "sur touche appuyée", ou à tout autre événement clavier. Si l'événement est détécté, il se passera quelque chose...

Si vous voulez affecter la macro Macro1 en VBA plutôt que par la feuille de propriété, mettez l'instruction Form.onKeyDown = "Macro1" dans la procédure événementielle Form_Open de l'événement "sur ouverture".

Si après cela, ça ne fonctionne toujours pas, je pense qu'il faudra utiliser les API RegisterHotKey et UnRegisterHotKey. Je ne les ai jamais utilisées, mais à première vue, elles semblent apporter une solution à ce problème.

cdlt
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
3 oct. 2008 à 23:34
Bonjour

Voici le code qui utilise les fonctions de l'API de Windows pour rafraîchir le formulaire sur l'appui de la touche F5. Je n'ai pas pu le tester sous Access, mais il fonctionne bien sous Excel.

Option Explicit
Declare Function RegisterHotKey Lib "user32" _
    (ByVal hWnd As Long, ByVal id As Long, _
    ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" _
    (ByVal hWnd As Long, ByVal id As Long) As Long
Public Declare Function PeekMessage Lib "user32" _
    Alias "PeekMessageA" (lpMsg As Msg, _
    ByVal hWnd As Long, ByVal wMsgFilterMin As Long, _
    ByVal wMsgFilterMax As Long, _
    ByVal wRemoveMsg As Long) As Long
Public Declare Function WaitMessage Lib "user32" () As Long
Public Type POINTAPI
    x As Long
    y As Long
End Type
Public Type Msg
    hWnd As Long
    Message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
End Type
Private Const WM_HOTKEY = &H312
Private Const PM_REMOVE = &H1
Dim termine As Boolean



Sub proc_au_chargement()
 Dim ret As Long
 ret = RegisterHotKey (hwndAccessApp, &HBFFF&, &H0, vbKeyF5)
 termine = False
 proc_en_cours_d_execution ' reception des messages
End Sub



Sub proc_en_cours_d_execution()
 Dim Message As Msg
 Do Until termine
    If PeekMessage(Message, hwndAccessApp, WM_HOTKEY, _
        WM_HOTKEY, PM_REMOVE) Then Me.Refresh
    DoEvents
 Loop
End Sub



Sub proc_au_dechargement()
 Call UnregisterHotKey(hwndAccessApp, &HBFFF&)
 termine = True
End Sub




Cordialement
0
Rejoignez-nous