entoanhuu
Messages postés7Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention12 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.
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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...
entoanhuu
Messages postés7Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention12 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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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.
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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