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 :

Gestion du clavier [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre régulier Avatar de idiot
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2004
    Messages : 98
    Points : 77
    Points
    77
    Par défaut Gestion du clavier
    bonjour,
    j'ai réalisé un code qui permet de récupérer ce qui est ce qui taper au clavier. Je passe par l'évènement touche appuyé. Mais comme je suis un novice mon code est limité. Je ne sais pas gérer quand la touche shift a été utilisé ou majuscule ou encore le pavé numérique etc..
    Est ce que l'un de vous a fait un code qui récupère ce qui est taper au clavier et qui tient compte des touches spéciales shift majuscule pavé numérique etc.
    Mon objectif: A chaque caractère taper au clavier cela alimente une requette qui se met a jour a chaque caractère taper.

    Merci d'avance.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour


    sur l'événement KeyUp ou KeyDown et la réponse sera à toi...

    Argy

  3. #3
    Membre régulier Avatar de idiot
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2004
    Messages : 98
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par argyronet Voir le message
    Bonjour


    sur l'événement KeyUp ou KeyDown et la réponse sera à toi...

    Argy
    Pour mon niveau F1 dans ce cas ne me suffit pas.

    Si j'appuie sur 4 dans le pavé numérique cela donne un KeyCode =100 et shift =0

    Et chr(KeyCode) cela donne un « d » et pas un 4

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Ces événements sont régis par l'énumération VBA.KeyCodeConstants
    Par exemple 4 du pavé numérique vaut 100
    soit vbKeyNumpad4

    Puis-je voir le code de ta MAJ de requête...?
    Ayant déjà fait n fois ce genre de script, je pense qu'un pti coup de main serait le bienvenu...

    P.S. Il ne faut pas confondre KeyCode et KeyAscii.

    Argy

  5. #5
    Membre régulier Avatar de idiot
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2004
    Messages : 98
    Points : 77
    Points
    77
    Par défaut
    "je pense qu'un pti coup de main serait le bienvenu..." je suis d'accord avec toi argy
    Je te préviens, je suis un novice et ce qui suis ma demandé beaucoup de travail.
    voici mon code:


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Private Sub preselect_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim monsql, selection, resultat, ordre, intermediaire As Variant
    monsql = "SELECT DISTINCTROW livres.[numero livre], livres.titre, livres.date, livres.[numero edition], livres.[numero auteur], livres.prix, livres.[date impression], livres.numclass, livres.pages, livres.numclass2, livres.photo, livres.appre_doctine, livres.appre_litteraire FROM livres  "
    selection = "WHERE (((livres.titre) Like "
     
     
    If KeyCode <> 8 And KeyCode <> 13 And KeyCode <> 40 And KeyCode <> 39 Then
            If carac_accent(KeyCode) = 1 Then
                carac = carac & valeur_carac_accentue(KeyCode)
     
            End If
     
            If (carac = "") And ((KeyCode = 32) Or (KeyCode = 16)) Then
                carac = ""
                preselect = Null
            Else:
     
                If carac_accent(KeyCode) = 0 Then
                            carac = carac & Chr(KeyCode)
                End If
                intermediaire = carac
            End If
     Else
      If carac = "" Then
        Else
            If KeyCode = 8 Then
                carac = Mid(carac, 1, (Len(carac) - 1))
                Else
                    If KeyCode = 13 Then
     
                    End If
            End If
      End If
    End If
    selection = selection & """" & carac & "*""))"
    ordre = " ORDER BY livres.titre;"
    resultat = monsql & selection & ordre
    liste_livre.RowSource = resultat
    Et ma petite fonction:

    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
    Public Function valeur_carac_accentue(coDekey As Integer) As String
    'renvoi le caractère acentue a partir du code renvoy par le clavier
    valeur_carac_accentue = ""
    Select Case coDekey
                Case 48 
                    valeur_carac_accentue = "à"
                Case 50 
                    valeur_carac_accentue = "é"
                Case 55 
                    valeur_carac_accentue = "è"
                Case 192 
                    valeur_carac_accentue = "ù"
                Case 52 'apostrophe
                    valeur_carac_accentue = "'"
            End Select
    End Function

    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
    19
    20
    21
    22
    23
    Public Function carac_accent(coDekey As Integer) As Integer
     
    carac_accent = 0
    Select Case coDekey
        Case 48 
            carac_accent = 1
     
        Case 50 
            carac_accent = 1
     
        Case 55 
            carac_accent = 1
     
        Case 192 
            carac_accent = 1
            'carac = "ù"
     
        Case 52 'apostrophe
            carac_accent = 1
            'carac = "'"
    End Select
     
    End Function

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Hummm...
    C'est capilotracté

    Bref, inutile de t'étaler sur quels caractères sont tapés, il te suffit d'autoriser ceux qui sont sûrs de "matcher",
    en l'occurence A-Z, 0-9, a-z, é...i...à....ô...û etc.
    Les autres, zioup, à la poubelle (KeyAscii=0)

    Bon, voilà un exemple pseudo complet sur lequel tu devrais t'orienter :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Option Compare Database
     
    Option Explicit
    'Requête par défaut (ôter le ;)
    Private Const BASE_QUERY As String = "SELECT [Code client], Fonction, Société, Ville, [Code postal], Pays FROM Clients "
    'Variable de module : garde sa valeur en permanence ici.
    Private m_strOccurrence As String
     
    Private Sub cmdReset_Click()
    'Remise à zéro
        m_strOccurrence = vbNullString
        Me.lstCustomers.RowSource = BASE_QUERY
        Me.txtFilter.SetFocus
        Me.txtFilter.Value = vbNullString
        Me.lblRecordCount.Caption = DCount("*", "Clients") & " clients trouvés"
    End Sub
     
    Private Sub Form_Load()
    'Initialisation des contrôles et de la liste avec la requête par défaut
        Me.fraFields.SetFocus
        Me.fraFields = 4
        Me.cmdReset.Enabled = False
        Me.txtFilter.Enabled = False
        Me.txtFilter.Value = vbNullString
        lstCustomers.RowSource = BASE_QUERY
        Me.lblRecordCount.Caption = DCount("*", "Clients") & " clients trouvés"
    End Sub
     
    Private Sub fraFields_AfterUpdate()
    'Si ce n'est pas 'Tout' alors...
        Me.cmdReset.Enabled = fraFields <> 4
        Me.txtFilter.Enabled = fraFields <> 4
        Me.txtFilter.Value = IIf(fraFields <> 4, txtFilter.Value, vbNullString)
        If fraFields <> 4 Then Me.txtFilter.SetFocus
        m_strOccurrence = vbNullString
    End Sub
     
    Private Sub txtFilter_KeyPress(KeyAscii As Integer)
    'Gestion des critères avec MAJ dynamique de la liste...
    Dim strSQLWhere As String
    Dim strFieldname As String
    Dim lngRecordCount As Long
     
        Select Case KeyAscii
            'Seuls ces caractère sont autorisés
            Case 8, 32, 48 To 57, 65 To 90, 95, 97 To 122, 156, 192 To 221, 224 To 246, 249 To 253
            Case Else
                Beep
                KeyAscii = 0
                Exit Sub
        End Select
        Select Case fraFields
            Case 1: strFieldname = "[Fonction]"
            Case 2: strFieldname = "[Ville]"
            Case 3: strFieldname = "[Pays]"
            'Case ....
        End Select
     
        'Concaténation des cacactères
        m_strOccurrence = m_strOccurrence & Chr(KeyAscii)
        'Construction de la clause WHERE
        strSQLWhere = strFieldname & " LIKE " & Chr(34) & m_strOccurrence & "*" & Chr(34)
        'Vérification
        lngRecordCount = DCount(strFieldname, "Clients", strSQLWhere)
        'MAJ de la liste ou message selon le cas
        If lngRecordCount Then
            Me.lstCustomers.RowSource = BASE_QUERY & "WHERE " & strSQLWhere
            Me.lblRecordCount.Caption = lngRecordCount & " client(s) trouvé(s)"
        Else
            MsgBox "Aucun enregistrement trouvé pour cette occurence !", vbExclamation
            cmdReset_Click
        End If
    End Sub
    et le formulaire... ci-dessous

    Argy
    Images attachées Images attachées  

  7. #7
    Membre régulier Avatar de idiot
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juin 2004
    Messages : 98
    Points : 77
    Points
    77
    Par défaut
    Merci! ARGY

    super!

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

Discussions similaires

  1. [C#] Gestion évenements clavier
    Par Tips dans le forum Windows Forms
    Réponses: 9
    Dernier message: 19/04/2006, 21h29
  2. [MFC][VC++.NET]gestion évènement clavier
    Par Rafoo dans le forum MFC
    Réponses: 2
    Dernier message: 14/12/2005, 10h29
  3. Gestion du clavier
    Par Ekinoks dans le forum OpenGL
    Réponses: 12
    Dernier message: 22/08/2005, 15h36
  4. gestion du Clavier
    Par benthebest dans le forum MFC
    Réponses: 13
    Dernier message: 07/05/2005, 23h39
  5. [MX]Optimisation de la gestion du clavier
    Par yacinechaouche dans le forum Flash
    Réponses: 8
    Dernier message: 18/04/2004, 03h13

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