OVH Cloud OVH Cloud

Userform - Utilisation uniquement touches clavier

4 réponses
Avatar
JacquesH
Bonjour à toutes et tous,

J'ai crée (avec l'aide du forum) une petite application qui me permet
de réaliser à peu près ce que je souhaite :

- J'ai une liste de numéros dans la colonne A.
- J'appelle un Userform avec une TextBox et deux boutons (OK et
Annuler). Le focus est sur la textbox. J'y saisis un nombre. Je clique
sur OK et je me retrouve dans la colonne B à côté du nombre saisi. Le
Userform a disparu, je saisis mes informations et je rappelle le
Userform pour saisir un nouveau nombre...
- J'ai géré la sortie par la croix ou le bouton "Annuler".
- J'ai également géré le fait que le nombre saisi ne soit pas dans la
liste.
- J'ai commencé à améliorer mon système en appelant le Userform avec
la touche F1 :

Private Sub Workbook_Activate()
Application.OnKey "{F1}", "Saisie"
End Sub

Jusque-là tout fonctionne parfaitement. Je souhaite maintenant
améliorer le système car, dans les conditions d'utilisation, il serait
préférable de ne pas avoir à utiliser la souris. J'aimerais donc
affecter une autre touche (par exemple F2 et F3)aux boutons OK et Annuler.

Cela ne me semble pas aussi simple car j'ai fait de nombreux essais
sans trouver la solution. Cela ne semble pas être un problème de
désactivation de la touche + affectation d'une macro, mais plutôt un
problème de Macro.
Faut-il "enlever le focus" de la TextBox ? Si oui, comment ?

Quelqu'un peut-il me donner une idée ou une piste ?

Cordialement

Jacques

4 réponses

Avatar
Pierre Fauconnier
Bonjour

Deux solutions

1. Affecter les propriétés DEFAULT et CANCEL des boutons. Mettre la
propriété DEFAULT de OK à TRUE et la propriété CANCEL de ANNULER à TRUE.

Ainsi, une pression sur ENTER équivaudra à OK et une pression sur CANCEL
équivaudra à ANNULER (Respect de l'ergonomie Windows...).

Si tu veux absolument utiliser F2 et F3, fais-le avec le code suivant (à
adapter aux noms de tes boutons)

Private Sub cmdAnnuler_Click()
MsgBox "Pression du bouton ANNULER"
End Sub

Private Sub cmdOk_Click()
MsgBox "Pression du bouton OK"
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
Select Case KeyCode
Case vbKeyF2
cmdOk_Click
Case vbKeyF3
cmdAnnuler_Click
End Select
End Sub

Attention à "Application.onkey "F1"... En utilisant F1 pour ouvrir ton
userform, tu prives les utilisateurs de l'aide Excel...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"JacquesH" a écrit dans le message de
news:
Bonjour à toutes et tous,

J'ai crée (avec l'aide du forum) une petite application qui me permet de
réaliser à peu près ce que je souhaite :

- J'ai une liste de numéros dans la colonne A.
- J'appelle un Userform avec une TextBox et deux boutons (OK et
Annuler). Le focus est sur la textbox. J'y saisis un nombre. Je clique
sur OK et je me retrouve dans la colonne B à côté du nombre saisi. Le
Userform a disparu, je saisis mes informations et je rappelle le
Userform pour saisir un nouveau nombre...
- J'ai géré la sortie par la croix ou le bouton "Annuler".
- J'ai également géré le fait que le nombre saisi ne soit pas dans la
liste.
- J'ai commencé à améliorer mon système en appelant le Userform avec
la touche F1 :

Private Sub Workbook_Activate()
Application.OnKey "{F1}", "Saisie"
End Sub

Jusque-là tout fonctionne parfaitement. Je souhaite maintenant
améliorer le système car, dans les conditions d'utilisation, il serait
préférable de ne pas avoir à utiliser la souris. J'aimerais donc affecter
une autre touche (par exemple F2 et F3)aux boutons OK et Annuler.

Cela ne me semble pas aussi simple car j'ai fait de nombreux essais sans
trouver la solution. Cela ne semble pas être un problème de désactivation
de la touche + affectation d'une macro, mais plutôt un problème de Macro.
Faut-il "enlever le focus" de la TextBox ? Si oui, comment ?

Quelqu'un peut-il me donner une idée ou une piste ?

Cordialement

Jacques




Avatar
JacquesH
Bonjour et merci pour ta réponse,

Je me suis intéressé à ta première solution qui me paraît effectivement
plus conforme à la logique.

En mettant la propriété DEFAULT de OK à True, tout va bien.

En revanche, je n'ai pas réussi avec la propriété CANCEL de ANNULER à
TRUE. Il ne se passe rien avec la touche "CANCEL".


Jacques

Bonjour

Deux solutions

1. Affecter les propriétés DEFAULT et CANCEL des boutons. Mettre la
propriété DEFAULT de OK à TRUE et la propriété CANCEL de ANNULER à TRUE.

Ainsi, une pression sur ENTER équivaudra à OK et une pression sur CANCEL
équivaudra à ANNULER (Respect de l'ergonomie Windows...).

Si tu veux absolument utiliser F2 et F3, fais-le avec le code suivant (à
adapter aux noms de tes boutons)

Private Sub cmdAnnuler_Click()
MsgBox "Pression du bouton ANNULER"
End Sub

Private Sub cmdOk_Click()
MsgBox "Pression du bouton OK"
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
Select Case KeyCode
Case vbKeyF2
cmdOk_Click
Case vbKeyF3
cmdAnnuler_Click
End Select
End Sub

Attention à "Application.onkey "F1"... En utilisant F1 pour ouvrir ton
userform, tu prives les utilisateurs de l'aide Excel...

Ok?




Avatar
Pierre Fauconnier
Il faut noter que la propriété CANCEL à TRUE correspond à l'évènement CLICK
du bouton auquel tu affectes cette propriété. Il faut donc qu'il y ait un
code associé à l'évènement CLICK du bouton concerné. En clair, cela veut
dire que CANCEL = TRUE ne correspond pas au clic sur la croix de fermeture,
mais à l'évènement CLICK du bouton. En pressant ESC ou ECHAP, on déclenche
l'évènement CLICK du bouton qui a la propriété CANCEL = TRUE...

Ok?


--
Pierre Fauconnier ()
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"JacquesH" a écrit dans le message de
news:
Bonjour et merci pour ta réponse,

Je me suis intéressé à ta première solution qui me paraît effectivement
plus conforme à la logique.

En mettant la propriété DEFAULT de OK à True, tout va bien.

En revanche, je n'ai pas réussi avec la propriété CANCEL de ANNULER à
TRUE. Il ne se passe rien avec la touche "CANCEL".


Jacques

Bonjour

Deux solutions

1. Affecter les propriétés DEFAULT et CANCEL des boutons. Mettre la
propriété DEFAULT de OK à TRUE et la propriété CANCEL de ANNULER à TRUE.

Ainsi, une pression sur ENTER équivaudra à OK et une pression sur CANCEL
équivaudra à ANNULER (Respect de l'ergonomie Windows...).

Si tu veux absolument utiliser F2 et F3, fais-le avec le code suivant (à
adapter aux noms de tes boutons)

Private Sub cmdAnnuler_Click()
MsgBox "Pression du bouton ANNULER"
End Sub

Private Sub cmdOk_Click()
MsgBox "Pression du bouton OK"
End Sub

Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal
Shift As Integer)
Select Case KeyCode
Case vbKeyF2
cmdOk_Click
Case vbKeyF3
cmdAnnuler_Click
End Select
End Sub

Attention à "Application.onkey "F1"... En utilisant F1 pour ouvrir ton
userform, tu prives les utilisateurs de l'aide Excel...

Ok?





Avatar
JacquesH
OK, je n'avais pas testé "ECHAP".

Merci pour ton aide.

Jacques

Il faut noter que la propriété CANCEL à TRUE correspond à l'évènement CLICK
du bouton auquel tu affectes cette propriété. Il faut donc qu'il y ait un
code associé à l'évènement CLICK du bouton concerné. En clair, cela veut
dire que CANCEL = TRUE ne correspond pas au clic sur la croix de fermeture,
mais à l'évènement CLICK du bouton. En pressant ESC ou ECHAP, on déclenche
l'évènement CLICK du bouton qui a la propriété CANCEL = TRUE...

Ok?