Récuperer code Ascii d'une entées clavier

Signaler
Messages postés
4
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
26 avril 2005
-
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
-
Salut à tous,

Je souhaiterais savoir comment on récupere le code ascii que l'utilisateur saisi
au clavier.
Par exemple pour la procédure

Private Sub TextBoxCodePostal_KeyPress(KeyAscii As Integer)

Que dois je faire pour récupérer la valeur à donner à KeyAscii ??

Merci d'avance,

Cletou

8 réponses

Messages postés
152
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
5 mars 2007

Exemple :

Si l'utilisateur doit taper sur la touche Return, pour valider la saisie, ton code devient :

Private Sub TextBoxCodePostal_KeyPress(KeyAscii As Integer)

if keyascii = vbKeyreturn then
+++++
else
+++++
end if
end sub

Cherche les constantes dans l'aide tape KeyPress, il te dira toutes les constantes

Starec
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
20
Starec < vbKeyReturn n'est pas un code Ascii !! C'est un code de touche !!!! IL est utilisable conjointement avec le paramètre KeyCode des evt KeyDown et KeyUp !!!
Les code ascii sont simple à obtenir : Asc("A") pour un A majuscule par exemple. Pour le retour chariot, c'est vbCR, etc ...

Christophe R
Messages postés
4
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
26 avril 2005

Merci christophe,

je me suis peut être mal exprimé je cherche simplement
à récupérer le code Ascii de la touche saisie par
l'utilisateur afin de vérifier, dans le cas présent pour un
code postal, s'il s'agit bien d'un chiffre :

If KeyAscii < 48 Or KeyAscii > 57 Then
error ......
End if

merci,

cletou
Messages postés
152
Date d'inscription
mercredi 30 mars 2005
Statut
Membre
Dernière intervention
5 mars 2007

Exact, j'ai mal saisi, si tu veux contrôler ce qui est saisi tu peux obliger l'utilisateur à ne saisir que des chiffres (voir l'emple ci dessous qui se trouve dans le forum et les sources avec plein d'autre tape "Validation Saisie", et de plus je crois qu'en mettant la propriété de ta textbox Maxlenght à 5, tu ne peux saisir plus de 5 chiffres comme un code postal

Private Sub Text1_KeyPress(KeyAscii As Integer)
If Not Chr(KeyAscii) Like "[0123456789]" Then KeyAscii = 0
End Sub

Starec
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
20
Le test direct sur le Keyascii est tout aussi judicieux, même plus ...
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii <48 Or KeyAscii > 57 then
KeyAscii = 0
' Mettre éventuellement un msg d'erreur si tu le veux içi.
Endif
End Sub

Tu peux aussi remplacer ta textbox par une MaskedEditBox et jouer sur sa propriété Mask

Christophe R
Messages postés
194
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
11 juin 2009

Pour ma part je te suggère dans le cas ou tu veux tester si c'est des numéros d'utiliser la fonction Isnuméric(expression) qui Retourne une valeur booléenne indiquant si une expression peut être évaluée sous la forme d'un nombre.
mais dans ce cas meme les réels sont considérés Numériques ce qui est normal mais pour le code postale.
mais ça te serviras peut etre un jour.
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
12
Je ne vais sans doute rien ajouter de positif à la discussion mais je me permet quand même de donner mon avis.

J'aime bien la soluce de Starec :
If Not Chr(KeyAscii) Like "[0123456789]" Then KeyAscii = 0
sauf que je l'aurais écrite :
If Not Chr$(KeyAscii) Like "[0123456789]" Then KeyAscii = 0

car on oublie trop souvent l'opérateur Like qui est souvent plus rapide que de jouer avec des mid$, left$ et right$ lors de recherches dans des enregistrements et fichiers.

Mais, en terme de performance, dans ce cas précis, je préfère celle de
crenaud76 :
If KeyAscii <48 Or KeyAscii > 57 then KeyAscii = 0

car cela évite une première conversion en caractère ascii ( chr$(KeyAscii) ) puis une recherche dans une chaîne "[0123456789]".

Je sais bien qu'avec les sytèmes actuels la différence est minime voire proche de nulle (puisque dans ce cas, la différence du temps d'exécution est absorbée par le temps de saisie) mais je pense qu'il est bon de connaître les 2 méthodes et les utiliser à bon escient.

Loup Gris
Messages postés
4172
Date d'inscription
mercredi 30 juillet 2003
Statut
Membre
Dernière intervention
9 juin 2006
20
Canis Lupus < Même analyse que toi du pb, donc même déduction et donc proposition de ce code, plutot que de la solution avec le Like, comme toi.
On est sur la même longueur d'onde toi et moi !! Pour un Félin et un "Canis Lupus", c'est un comble !!!

Christophe R