"Ré-initialiser" fonction KeyDown

Résolu/Fermé
GrandJean - 2 déc. 2013 à 09:43
 GrandJean - 16 janv. 2014 à 11:22
Bonjour,

Je souhaite utiliser la fonction KeyDown pour que l'utilisateur se serve soit de la souris, soit tape sur le pavé numérique pour répondre aux questions posées.

J'utilise la fonction KeyDown qui marche bien. Sauf que, si l'utilisateur se sert de la souris, cela "désactive" keydown. Je voudrais savoir comment "ré-initialiser" cette fonction sans recharger le formulaire.
J'ai essayé différentes solutions, sans succès. J'ai aussi cherché une réponse sur les forums, sans succès (KeyPreview revient le plus souvent, mais n'est pas disponible sous VBA)

Peut-être y a t'il, aussi, une autre solution que keydown ?

Voici un fichier test : http://cjoint.com/?0LcjHTQr2XV

Si quelqu'un a une idée, je suis preneur. D'avance, merci

Jean



9 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 2/12/2013 à 13:55
Bonjour,
1°)..ces lignes de code ne sont pas nécessaires, ça se fait automatiquement quand on clic.

Private Sub OptionButton1_Click()

'Me.Flag_EN.Visible = False
'Me.Flag_FR.Visible = True
End Sub

Private Sub OptionButton2_Click()

'Me.Flag_EN.Visible = True
'Me.Flag_FR.Visible = False

End Sub
et les remplacer par...
Private Sub OptionButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm_KeyDown KeyCode, Shift
End Sub

Private Sub OptionButton2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm_KeyDown KeyCode, Shift
End Sub
2°) Ce n'est pas le KeyDown qui ne fonctionne pas mais la condition..
Si ont tape "a" If Chr(KeyCode) = "a" Then ' ta condition donne "A"
Pour remédier à cela, mettre la ligne de code ci-dessous tout en haut du module.
Option Compare Text
Ca ne fera plus de différence entre majuscule et minuscule.
A+

Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
0
Merci d'avoir pris le temps de regarder ma question.
Ta réponse me laisse cependant perplexe car j'ai testé tes lignes de codes et...
- 1) j'ai remplacé les lignes de code par celles que tu proposes et il ne se passe rien. Il faut quand même bien écrire l'action qu'on veut faire. Et là, c'est un exemple simple que j'ai fait, pour essayer de trouver une solution mais l'application finale, tu t'en doutes, est plus complexe.

-2) j'ai mis "option compare text" et cela ne change rien.
Aussi curieux que cela puisse paraître, sur mon PC, le chr(keycode) de la touche numérique 1 donne a minuscule. J'avais fait mes premiers essais avec les lettres A/B/C et j'avais le même problème de "désactivation". J'ai choisi le pavé numérique, parce que cela me semble plus simple pour l'utilisateur.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
2 déc. 2013 à 19:03
Oui, ta demande est plus compliquée que je ne pensais, j'examine ça et je revient, probablement demain.
A+
0
D'un côté, je suis désolé que ce soit plus compliqué que prévu, de l'autre, cela me rassure...
Que cela ne te fasse quand même pas faire des cauchemars...

Bonne soirée
Jean
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
3 déc. 2013 à 15:23
Re,
Un exemple
Je pense que c'est ce que tu veux.
A+
0
Bonsoir,

Merci beaucoup pour ton fichier. J'ai testé, j'ai même fait quelques ajouts pour voir si je comprenais comment cela fonctionnait. Tout roule.
En fait, il faut attribuer un code à chaque élément présent sur le formulaire, ce qui permet à la fonction keydown d'être toujours active. C'est une approche intéressante.

Encore merci de ton aide et de ton temps
Bonne soirée,
Jean
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
4 déc. 2013 à 15:16
Re,
J'ai fais le premier exemple en employant les événements de chaque contrôle mais ce système pourrait devenir lourd si tu a beaucoup de contrôles sur ton UF.
Celui-ci ne comprend que quelque lignes de code plus un module de classe.
Le nombre de contrôles sur l'UF pourrait être beaucoup plus élevé sans devoir ajouter une seule ligne de code sauf, bien entendu, le traitement des actions de ces contrôles.
Note: j'ai remplacer les 3 checkBox par des options, ça répond mieux à ce que tu en fait.
Exemple version 2
A+
0
Bonsoir,

Je viens de regarder rapidement ton nouvel exemple. Vraiment, merci beaucoup. Je vais étudier cela en détail. Justement, je me posais la question il y a quelques jours des modules de classe. J'ai fait quelques recherches sur le net, sans plus. Avec un exemple concret, cela sera plus facile.
Dans l'application que j'ai prévu (un quizz), il y aura peu de contrôles par UF, donc ta première solution pouvait convenir, mais on ne sait jamais. Cela ouvre pas mal de perspectives.
Encore merci.
Bonne soirée,
Jean
0
Bonjour et bonne année !

Même si j'avais clos cette discussion, je préfère revenir directement vers toi pour ajouter une variante sur un sujet que tu sembles bien maitriser.
J'ai adopté ta seconde solution qui est plus propre et plus légère dans un formulaire.
Cette solution est appliquée pour un quizz dans laquelle j'ai un chronomètre. Je suis reparti d'un jeu que j'avais créé dans lequel on clique sur la réponse choisie. Là, j'arrive à arrêter le chrono au clic.
Avec la solution touche numérique, je perds la main dès que le chrono est lancé et la fonction DoEvents semble inopérante.
J'ai introduit le chrono dans le fichier que tu m'avais envoyé :
http://cjoint.com/?0AqljJd2yA7
Si tu as une idée sur le sujet, je suis preneur.
D'avance, merci
Jean
0