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 :

[VBA-E] Déclenchement de procédures par pression sur une touche dans un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [VBA-E] Déclenchement de procédures par pression sur une touche dans un UserForm
    Bonjour à tous,

    Ma Situation :
    Je dipose de plusieurs UserForm remplis de différents boutons de commandes déclenchants différentes procédures.

    Mon souhait :
    Je voudrais déclencher les procédures associées à ses boutons en appuyant simplement sur une touche (un raccourcis clavier sans combinaison).

    Mes recherches :
    Je me suis tourné vers les évenements KeyPress, KeyDown ou encore Onkey et je pense que ces trois solutions se valent et peuvent répondre à mon besoin mais voila.....
    Pour que ces évenements soit interceptés, il faut que le focus soit sur le UserForm (et pas sur un controle disposé dans celle-ci).
    Or des que le UserForm contient un ou plusieurs contrôles, à son ouverture, le focus et donné directement au controle ayant la valeur 0 dans sa propriété TabIndex. De ce fait les raccouris claviers ne sont plus interceptés.
    Je Pourrais mettre à False la propriété TabStop mais je perdrais tous les avantages de la navigation classique par le clavier.

    Ma question :
    Sachant que chaque UserForm disposera des mêmes raccourcis mais déclenchants des actions différentes et que ces raccourcis devront être accessibles quelque soit la position du focus dans le UserForm activé, Comment puis-je coder de tels raccourcis ?

    Une piste :
    J'ai lu un bout de réponse sur le forum, concernant l'utilisation d'un Hook, mais je ne connais pas cette technique et cela me chagrine de me dire que quelque chose d'aussi courant dans les applications, ne soit pas possible sous VBA (je pense en effet que l'astuce existe sous VBA mais que j'ai un manque de connaissance notable dans ce langage)

    Dans tous les cas, toute sugestion sera appréciée à sa juste valeur et je vous remmercie par avance du temps que vous pourrez prendre pour m'aider.

    @+

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    J'ai une solution assez lourde sous VBA 97 qui passe effectivement par l'analyse des touches frappées, mais tu ne pourras pas taper de texte sans risque de lancer une action.
    Tu dis si ça t'intéresse, je ferai une recherche sur le forum et si je ne retrouve pas, je t'enverrai un fichier de test par mp.
    A+

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tiens, amuse-toi déjà avec ça : http://www.developpez.net/forums/sho...&highlight=F10
    J'ai un fichier de test qui fait la synthèse, tu dis toujours si ça t'intéresse.

    Edit
    Là, une réponse partielle
    http://www.developpez.net/forums/sho...&highlight=F12

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Coucou ouskel'n'or,

    Merci de répondre si vite.

    Je n'ais pas encore regardé les liens que tu me proposes ( ) car j'ai fini par céder et j'ai commencé à organiser le code autour de KeyPress :
    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
     
    'Interception des évenements clavier sur un bouton (raccourcis directs)
    Private Sub CommandButtonImpr_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
        Select Case KeyAscii
            Case 49 'Touche 1
                Me.CommandButtonPanne.SetFocus
                Application.SendKeys " "
            Case 50 'Touche 2
                Me.CommandButtonInter.SetFocus
                Application.SendKeys " "
            Case 51 'Touche 3
                Me.CommandButtonRech.SetFocus
                Application.SendKeys " "
            Case 52 'Touche 4
                Me.CommandButtonModif.SetFocus
                Application.SendKeys " "
            Case 53 'Touche 5
                Me.CommandButtonImpr.SetFocus
                Application.SendKeys " "
        End Select
    End Sub
    Ce qui me permet enfait de selectioner et appuyer sur le bouton que je souhaite selon la touche enfoncée et de conserver les raccourcis claviers classique ainsi que la "propreté des touches" (car les évenements ne peuvent se déclencher que lorsque Le UserForm concerné est affiché, d'ailleurs en mode Modal, sous reserve biensur de bien réflechir à quels contrôle on dispose dessus).

    Inutile de préciser que ce même code est donc copié dans chaque évenement KeyPress des contrôles succeptibles de recevoir le focus durant l'utilisation de l'application.

    C'est tres System D mais ca marche... Toutes mes conditions sont remplies.

    Je vais tout de même me pencher sur tes pistes (sisi je le ferais ).

    En tous cas merci d'avoir volé à mon secour

    Edit :
    Je viens même de me rendre compte que je peux tout simplement attacher les procédures directement aux différents Case du Select Case KeyAscii, évitant de simuler la validation du bouton par envoi de touche, ce qui me parrait assez impropre.

    Sinon pour le post dont tu m'a fait pars, je l'avais biensur lu en fouinant et c'est une solution tres efficasse mais mon appli est plutot simple et "tres rangée" et les raccourcis clavier se situent sur le pavé numérique (limitant fortement la casse lors de la saisie des formulaires). Et pour ce qui est des champs numérique, je m'arrange toujours pour qu'il ny ait qu'à valider (un seul bouton dont le raccoucis est ENTER cf : "tres rangée" ). Je n'ai donc pas énormément de choses à gérer au clavier apras les raccourcis 1,2,3,4,5 pour les differents boutons à valider (tres peut de saisie Alphanumérique).

    Bien sur je vais m'en sortir car l'appli n'est pas énorme et la performance n'est pas un critere tres important pour mes employeurs, mais si ca avait été le cas, je pense que ta solution à un interet certain (d'ailleurs si l'appli évolue je me tournerais surement vers ca).

    Merci encore de ton aide.
    @+

Discussions similaires

  1. [XL-2007] gerer la pression d'une touche dans un textbox
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/01/2012, 15h20
  2. Action sur une touche dans un sous-formulaire
    Par nomade333 dans le forum IHM
    Réponses: 2
    Dernier message: 24/12/2007, 14h36
  3. Réponses: 10
    Dernier message: 07/06/2007, 10h48
  4. Réponses: 3
    Dernier message: 04/04/2007, 16h22
  5. Simuler un e pression sur une touche du clavier
    Par Furius dans le forum VBScript
    Réponses: 13
    Dernier message: 11/12/2005, 17h53

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