IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Pb avec OnKeyDown et une fonction, comment transférer KeyCode ? [Toutes versions]


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2022
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2022
    Messages : 146
    Par défaut Pb avec OnKeyDown et une fonction, comment transférer KeyCode ?
    Bonjour tout le monde,

    J'ai un formulaire avec de nombreuses (variable) textboxes auxquelles je voudrais affecter pendant le chargement du formulaire une fonction sur l'évènement OnKeyDown.

    Dans un 1er temps (Load du formulaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ctl As Control
     
    For Each ctl In Me.Controls
     
    ctl.OnKeyDown = "=maFonction(............?)"
     
    Next ctl
    Dans un 2e temps, dans le vba du formulaire ou un module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Public Function maFonction(KeyCode ? as ?)
     
       Dim ctl as control
       Set ctl = Screen.ActiveControl
     
        Select Case KeyCode
     
            Case 65        
                'action1
     
            Case 66        
                'action2
     
        End Select
     
    End Function
    Mon pb est que je n'arrive pas à 'récupérer' la valeur KeyCode produite à l' appui d'une touche( après avoir mis le curseur dans le textbox concerné, bien sûr ).

    Qu'est-ce que j'oublie ? ou ne sais pas encore ?

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    3 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 065
    Par défaut
    Bonjour, j'ai utilisé l'exemple donné dans Microsoft Learn, et ça me parait OK :
    donc avec un champ nommé KeyHandler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub KeyHandler_KeyDown(KeyCode As Integer, Shift As Integer)
     Dim intShiftDown As Integer, intAltDown As Integer, intCtrlDown As Integer
     
        ' Use bit masks to determine which key was pressed.
        intShiftDown = (Shift And acShiftMask) > 0
        intAltDown = (Shift And acAltMask) > 0
        intCtrlDown = (Shift And acCtrlMask) > 0
        ' Display message telling user which key was pressed.
        If intShiftDown Then MsgBox "You pressed the Shift key."
        If intAltDown Then MsgBox "You pressed the Alt key."
        If intCtrlDown Then MsgBox "You pressed the Ctrl key."
     
        Debug.Print "You pressed the " & KeyCode & " key"  ' ajout MN
     
    End Sub
    "Always look at the bright side of life." Monty Python.

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2022
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2022
    Messages : 146
    Par défaut
    oui, si on attribue/exploite l ' évènement KeyDown à un textbox bien précis, aucun problème
    Mais comment le généraliser à un ensemble variable de textboxes à l'ouverture du formulaire ?

    mon critère de départ dans le formulaire est "si le nom du contrôle commence par E"
    et à ce moment-là j'essaie d'appliquer la fonction (maFonction) à l'évènement (OnKeyDown)

    Je l'ai déjà fait avec l' évènement OnDblClick sans problème parce qu'il n'y a pas de variable associée (comme KeyCode pour OnKeyDown)

    Autrement dit : Après avoir cliqué dans un textbox nommé 'Eqquechose', comment puis-je savoir quelle touche a été appuyée dans la fonction maFonction ? est-ce seulement possible ?
    Où se trouve la valeur KeyCode au moment du déclenchement de l'évènement KeyDown et comment le transmettre à maFonction ?

    J'ai essayé des trucs du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ctl.OnKeyDown = "=maFonction(Keycode as Integer)"
    ctl.OnKeyDown = "=maFonction(" & keyCode & ")"
    il n'y a que si je force la valeur entre parenthèse que je passe à la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ctl.OnKeyDown = "=maFonction(12)"
    mais ça n'a aucun intérêt

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 472
    Par défaut
    Voir si quelque chose de ce genre ne pourrait pas être exploité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Form_KeyPress(KeyAscii As Integer)
        Debug.Print Me.ActiveControl.Name, Chr(KeyAscii)
    End Sub
     
    Private Sub Form_Open(Cancel As Integer)
        Me.KeyPreview = True
    End Sub
    Cordialement.

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mars 2022
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Mars 2022
    Messages : 146
    Par défaut
    Ben oui ! prendre simplement le pb dans l'autre sens !

    Tout autoriser et limiter ensuite aux contrôles intéressés ! Merci EricDgn !

    ça donne par exemple (vite fait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Form_Open(Cancel As Integer)
        Me.KeyPreview = True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub Form_KeyPress(KeyAscii As Integer)
     
     
        If Left(Me.ActiveControl.Name, 1) <> "E" Then Exit Sub
     
        Select Case KeyAscii
     
            Case 65 'A
     
                Me.ActiveControl.BackColor = RGB(243, 168, 45)
     
            Case 67 'C
     
                Me.ActiveControl.BackColor = RGB(50, 50, 45)
     
        End Select
     
    End Sub
    Merci aussi à Micniv

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Post avec lancement d'une fonction JS
    Par Seth77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/07/2006, 14h31
  2. [8i][PL/SQL] erreur avec lpad dans une fonction
    Par sali dans le forum Oracle
    Réponses: 3
    Dernier message: 16/03/2006, 06h22
  3. [PL SQL] Problème avec 'case' dans une fonction
    Par divail dans le forum Oracle
    Réponses: 14
    Dernier message: 13/03/2006, 15h50
  4. Réponses: 2
    Dernier message: 01/11/2005, 18h47
  5. Debugger avec VC++ 5 une DLL. Comment faire ?
    Par Pierre8r dans le forum MFC
    Réponses: 2
    Dernier message: 11/02/2005, 09h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo