Empecher l'utilisateur d'écrire des caractères alphabétiques
Résolu
glennog
Messages postés
337
Statut
Membre
-
glennog Messages postés 337 Statut Membre -
glennog Messages postés 337 Statut Membre -
Bonjour,
Pour les besoins de mon application , je souhaiterais savoir comment faire une controle sur la saisie , afin qu'a chaque fois que l'utilisateur saisisse des caractères qui ne sont pas numériques , que ceux ci , ne soient pas notés dans mon textbox , en utilisant le code ascii
Voilà , ce que j'avais écris , mais , mon programme bugg , pourriez vous m'indiquer comment je dois m'y prendre , ??? en utilisant le code ascii des caractères ??
Pour les besoins de mon application , je souhaiterais savoir comment faire une controle sur la saisie , afin qu'a chaque fois que l'utilisateur saisisse des caractères qui ne sont pas numériques , que ceux ci , ne soient pas notés dans mon textbox , en utilisant le code ascii
Private Sub TXT_Saisie_Change()
If Asc(Me.TXT_Saisie.text) < 48 Or Asc(Me.TXT_Saisie.text) > 58 Then
MsgBox ("erreur")
Me.TXT_Saisie.text = ""
End If
End Sub
Voilà , ce que j'avais écris , mais , mon programme bugg , pourriez vous m'indiquer comment je dois m'y prendre , ??? en utilisant le code ascii des caractères ??
6 réponses
-
Bonjour,
excusez l'incruste
Pourquoi utiliser les codes ascii alors qu'on dispose de la fonction ISNUMERIC
la macro admet des nombre réels (p.e : 123,45) et efface le caractère incorrectPrivate Sub TextBox1_Change() On Error Resume Next If Not IsNumeric(Right(TextBox1, 1)) And Right(TextBox1, 1) <> "," Then MsgBox "Caractère invalide" TextBox1 = Left(TextBox1, Len(TextBox1) - 1) End If End Sub l
Michel -
Bonjour,
J'ai mis un test sur quelques touches, mais il faudra en ajouter et si touche supprime ou backspace il faudra modifier l'affichage de la textbox
Private Sub TXT_Saisie_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 20 Or (KeyCode >= 16 And KeyCode <= 18) Or KeyCode = 45 Or KeyCode = 91 Then Exit Sub If KeyCode < 48 Or KeyCode > 58 Then MsgBox ("erreur") If Len(Me.TXT_Saisie.Text) > 1 Then Me.TXT_Saisie.Text = Left(Me.TXT_Saisie.Text, Len(Me.TXT_Saisie.Text) - 1) Else Me.TXT_Saisie.Text = "" End If End If End Sub
Bonne suite -
Bonjour michel et bonne annee,
Petit lezard si le premier caractere est une lettre!!!-
-
Re,
Excel 2003 et 2007:
Textbox sur feuille de calcul ou dans UF: si je saisie une lettre-->msgbox-->click ok---->raz textebox--->msgbox(2eme)--->click ok--->erreur execution 5: sur ligne TextBox1 = Left(TextBox1, Len(TextBox1) - 1) du fait que len..=0
excel 2007
https://www.cjoint.com/c/CAjraNO5ySB
Caisse queue cela donne chez toit?????? -
Effectivement! Ze lézard!
j'en suis làPrivate Sub TextBox1_Change() On Error Resume Next If Not IsNumeric(Right(TextBox1, 1)) And Right(TextBox1, 1) <> "," And TextBox1 <> "" Then MsgBox "Caractère invalide" TextBox1 = Left(TextBox1, Len(TextBox1) - 1) End If End Sub
testé sur l'usf; normalement pas de différence entre 2007 et 2003 -
-
-
-
Bonjour à tous,
et tous mes voeux à ceux que je n'ai pas vu.
J'peux jouer aussi ?
Je note un autre manque : possibilité de saisir 2 fois le séparateur décimal.
Autre proposition qui en plus s'adapte au séparateur décimal défini sur la machine :Private Sub TextBox1_Change() Dim n As Double On Error GoTo suite n = CDbl("0" & TextBox1) Exit Sub suite: MsgBox "Caractère invalide" TextBox1 = Left(TextBox1, Len(TextBox1) - 1) End Sub
Bon, bien sûr, il ne faut pas s'amuser à cliquer au milieu de la chaine pour y mettre un z ou y coller une chaine, là c'est plus cher...
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.-
-
-
-
C'est normal que ça fasse une erreur puisque c'est le but.
Seulement en cas d'erreur on doit aller en suite: avec le On Error GoTo suite qui précède.
Bizarre que le branchement ne se fasse pas chez toi.
Rajouter on error goto 0 après le suite:
Je l'avais oublié mais ça ne semble pas poser de pb chez moi, j'en avais déduit que le traitement d'erreur se réinitialisait après le end sub mais...Private Sub TextBox1_Change() Dim n As Double On Error GoTo suite n = CDbl("0" & TextBox1) On Error Goto 0 Exit Sub suite: On Error Goto 0 MsgBox "Caractère invalide" TextBox1 = Left(TextBox1, Len(TextBox1) - 1) End Sub
eric
edit: https://www.cjoint.com/c/CAlpixmzhyT -
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
qui devrait être redirigée par le on error...
A part fermer excel et le relancer pour le ramener à la raison je ne vois pas.
Tant que j'y suis une version qui résiste à tout (enfin pour l'instant et chez moi ;-) ), y compris à un collé sauvage en plein milieu :Private Sub TextBox1_Change() Static TextBox1Sav As String Dim n As Double On Error GoTo suite n = CDbl("0" & TextBox1) On Error GoTo 0 TextBox1Sav = TextBox1 Exit Sub suite: On Error GoTo 0 MsgBox "Caractère invalide" TextBox1 = TextBox1Sav End Sub
Tout ceci n'a pas l'air d'intéresser beaucoup glennog
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait. -
Merci les gars , vous m'avez mis sur la voie , j'ai finalement vu ce que je devais faire , au fait , voilà l'option que j'ai choisi:
- comme , je devais seulement prendre en compte les caractères seulement si l"utilisateur saisissait un caractère dont le code ascii devait être compris entre 48 et 58 , mais aussi que je devais prendre le fait que l'utilisateur puisse ( supprimer ou encore mettre une virgule
alors du coup , si je faisais une condition selon laquelle si je faisais ceciif keyascii <48 or if keyascii > 58 then keyascii = 0 beep msgbox(" veuiller saisir des nombres , end ifje n'allais pas être en mésure de gerer les touches "supprimer " et " vrigule" , alors , du coup , j'ai fait :
if keyascii =48 or keyascii =49 or keyascii = 50 or keyascii = 51 or keyascii = 52 or keyascii = 53 or keyascii = 54 or keyascii = 55 or keyascii = 56 or keyascii = 57 or keyascii = 58 or keyascii = 44 or keyascii = 44 then else beep keyascii = 0 msgbox(" veuillez saisir un nombre") end ifdu coup , je pouvais gérer tous les cas (que je voulais)
excusez du retard que j'ai mis pour vous répondre , au fait j'ai eu des soucis avec ma connexion et là , me suis connecté avec le wifi de mon école