KeyDown_Event - comment retourner une combinaison de touches [RESOLU] - VB/VBA/VBS - Programmation
Marsh Posté le 19-11-2010 à 09:37:46
Dans les propriétés d'une zone de texte, t'as une propriété "Effet touche Entrée"
de rien
Marsh Posté le 19-11-2010 à 10:35:05
Ah oui en effet... Je ne l'avais pas vu, merci à toi.
Bonne journée.
Marsh Posté le 05-11-2010 à 15:45:06
Bonjour,
Premièrement je tiens à vous faire savoir que j'ai longuement recherché une solution à mon problème avant de venir vous demander conseil.
Je travail sur MS Access 2007.
Voici mon problème :
Je travail sur l'élaboration d'un formulaire tout ce qu'il y a de plus basique.
Mon problème est vraiment d'ordre fonctionnel.
Sur ce formulaire j'ai placé une Texte_Box.
Celle-ci à pour source un champ "Mémo" de ma base de donnée.
Et ce que je souhaiterais,
c'est que l'utilisateur puisse taper son texte en incluant des retours à la ligne sans devoir passer par un CTRL+ENTER
En d'autres mots, je voudrais attribuer à la touche ENTER la fonction CTRL+ENTER.
Je me suis donc intéressé à l'évènement KeyDown de la Texte_Box concernée.
Private Sub Texte_Box_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox (Shift & " " & KeyCode)
End Sub
Je n'en suis pas à ma première base de donnée sous access mais je ne suis pas non plus un crack
Voici les quelques pistes que j'ai essayé :
Dans un premier temps avec la MsgBox() j'ai pu m'apercevoir que
KeyCode représente la valeur de la touche saisie
et que Shift représente le "Modifieur" enfoncé lorsqu'on appui sur la touche
Quand CTRL est enfoncé, Shift = 2
J'ai donc essayé ce code :
Private Sub Texte_Box_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Shift = 2
End If
MsgBox (Shift & " " & KeyCode)
End Sub
Sur le principe ça avait l'air aussi simple que ça... Mais finalement non
Pourtant avec ce code la MsgBox() me renvoie les même valeurs lorsque j'appuie sur ENTRER et lorsque je fais CTRL+ENTER sans le code.
J'ai aussi essayer un code un peu plus... sale...
Private Sub Texte_Box_KeyDown(KeyCode As Integer, Shift As Integer)
Dim chaine As String
If KeyCode = 13 Then
chaine = Me.Texte.Value
chaine = chaine & vbCrLf
Me.Texte.Value = chaine
End If
MsgBox (Shift & " " & KeyCode)
End Sub
J'obtiens bien un retour à la ligne après mon texte... Néanmoins tout le texte est sélectionné et je ne peux donc pas continuer à écrire.
J'ai abandonné cette mauvaise idée car cela fait un traitement très lourd pour pas grand chose et ce n'est pas vraiment esthétique comme code...
Sur Google, j'ai vu que beaucoup parlais d'un "fameux" SendKeys().
Fameux entre guillemets car les avis divergent énormément sur la fiabilité de cette fonction.
Quoi qu'il en soit, j'ai cru comprendre qu'elle n'était plus disponible sous Access 2007 donc pas de problème...
Sur les mêmes conversation j'ai entendu parler d'une fonction API SendInput().
Elle remplirait apparemment les même fonctions...
Mais je n'ai trouver aucun exemple concret de son utilisation. Et je n'ai jamais eu l'occasion d'utiliser des fonctions API Windows auparavant...
Je suis donc coincé.
Message édité par BSS_Scof le 19-11-2010 à 10:36:36