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

Macros et VBA Excel Discussion :

Comment intercepter les touches "Shift", "Ctrl" ou "Alt" dans un Sub? [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier

    Profil pro
    Retraité (Travailleur autonome)
    Inscrit en
    Octobre 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité (Travailleur autonome)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 82
    Points : 75
    Points
    75
    Billets dans le blog
    1
    Par défaut Comment intercepter les touches "Shift", "Ctrl" ou "Alt" dans un Sub?
    J'ai trouvé ce bout de code sur Internet mais j'obtiens un message d'erreur à l'exécution.

    Dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #If Win64 Then
      Public Declare PtrSafe Function GetAsyncKeystate Lib "user32" _
      (ByVal vKey As Long) As Integer
     
    #Else
      Public Declare Function GetAsyncKeystate Lib "user32" _
      (ByVal vKey As Long) As Integer
    #End If
    Puis, dans un module de classe:
    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
    Private Sub SpnClt_SpinDown()
    Dim LaValeur As Single
    Dim Pas As Single
     
    LaValeur = Format(Épurer(TablListÉcrit(Index).TxtCtl.Value, Décimale), "#0.00") 'Fonction maison
     
    If GetAsyncKeystate(&H10) Then      'Shift
        Pas = -0.1
    ElseIf GetAsyncKeystate(&H11) Then  'Ctrl
        Pas = -1
    ElseIf GetAsyncKeystate(&H12) Then  'Alt
        Pas = -10
    Else
        Pas = -0.01
    End If
     
    If LaValeur > 0 Then LaValeur = LaValeur - Pas
    If LaValeur < 0.01 Then LaValeur = 0
    TablListÉcrit(Index).TxtCtl.Value = Format(LaValeur, "#0.00")
     
    End Sub
    Le message d'erreur:
    Nom : Erreur GetAsyncKeystate.jpg
Affichages : 238
Taille : 7,8 Ko

    Que se passe-t-il? Merci de votre aide.

  2. #2
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    J'avoue ne pas connaitre cette APi, mais ce n'est pas le sujet, je vous propose donc une autre approche avec l'API GetKeyState :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

    Qui s'utilise comme dans cet exemple pour tester la touche Fin ("vbKeyEnd", ou "vbKeyShift" pour "Majuscule", voir la liste des touches dans l'aide VBA Excel.) :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    If GetKeyState(vbKeyEnd) < 0 Then ...

    Pensez à faire précéder la boucle de test des touches avec DoEvents.

    Cordialement.

  3. #3
    Membre régulier

    Profil pro
    Retraité (Travailleur autonome)
    Inscrit en
    Octobre 2008
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : Canada

    Informations professionnelles :
    Activité : Retraité (Travailleur autonome)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 82
    Points : 75
    Points
    75
    Billets dans le blog
    1
    Par défaut Intercepter les touche "Ctrl", "Shift" et "Alt"
    Merci. Ça fonctionne très bien.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/12/2010, 17h02
  2. Les doubles quotes dans les fprintf
    Par Changedman dans le forum C
    Réponses: 30
    Dernier message: 22/02/2007, 12h07
  3. [TMemo] Comment insérer les touches pressées ?
    Par Alexandre` dans le forum Composants VCL
    Réponses: 8
    Dernier message: 28/03/2005, 16h36

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