Empecher l'utilisateur d'écrire des caractères alphabétiques

Résolu/Fermé
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 - 9 janv. 2013 à 11:04
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 - 14 janv. 2013 à 11:42
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

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 ??
A voir également:

6 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 9/01/2013 à 14:44
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 incorrect


Private 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
1
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 janv. 2013 à 11:36
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 janv. 2013 à 15:05
Bonjour michel et bonne annee,

Petit lezard si le premier caractere est une lettre!!!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 janv. 2013 à 15:59
Bonjour f89
je viens d'essayer, j'ai pas trouvé de lézard m^me un petit ;o)

j'ai dû manquer quelque chose ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié par f894009 le 9/01/2013 à 17:04
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??????
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 janv. 2013 à 17:45
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 janv. 2013 à 17:49
Re,

Ok, plus de lezard

Bye
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 janv. 2013 à 17:55
Merci d'avoir débusqué le lézard!
ce qu'il y a de curieux est que j'avais déjà utilisé cette procédure sans avoir de retour des utilisateurs....

@+
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 10/01/2013 à 17:56
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.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
11 janv. 2013 à 10:35
Bonjour,
Si deux separateurs decimal ou une lettre erreur 13!!!!!!!!

Que ce passe-t-il??
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
11 janv. 2013 à 11:30
Bonjour,

Pas chez moi. En faisant quelles manip et sur quelle ligne ?

eric
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
11 janv. 2013 à 14:47
Re,
Saisie une lettre ou deux points (separateurs)--->n = CDbl("0" & TextBox1)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 11/01/2013 à 15:08
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
11 janv. 2013 à 15:14
Re,
Toujours erreur 13!!!
0

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

Posez votre question
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 11/01/2013 à 15:24
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.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
11 janv. 2013 à 15:37
Re,
Toujour erreur 13, sur 2003 et 2007!!!!

Tout ceci n'a pas l'air d'intéresser beaucoup glennog se rappelle plus qu'il a fait la demande???
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 11/01/2013 à 15:50
J'ai été voir ses messages, ça a l'air d'être un spécialiste. Il en a rien à f... une fois qu'il a la réponse. Ou alors il ne connait pas encore bien CCM...

Sinon aucune idée pourquoi le traitement d'erreur ne fonctionne pas chez toi. Dis-lui, il a dû oublier lui aussi ;-)

eric
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
11 janv. 2013 à 18:05
Re,
J'ai trouve, fait essai sur un autre PC --> Ok, donc vient d'excel sur mon PC. Je vais voir ce qui est faisable. Au moins un aspect positif dans cette discussion.
0
glennog Messages postés 293 Date d'inscription jeudi 3 janvier 2013 Statut Membre Dernière intervention 19 novembre 2013 4
14 janv. 2013 à 11:42
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 ceci
if keyascii <48 or if keyascii > 58 then
keyascii = 0
beep
msgbox(" veuiller saisir des nombres , 
end if 
je 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 if


du 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
0