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 -
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 ??

6 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour michel et bonne annee,

    Petit lezard si le premier caractere est une lettre!!!
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Ok, plus de lezard

      Bye
      0
    5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,
      Si deux separateurs decimal ou une lettre erreur 13!!!!!!!!

      Que ce passe-t-il??
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

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

      eric
      0
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Saisie une lettre ou deux points (separateurs)--->n = CDbl("0" & TextBox1)
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Toujours erreur 13!!!
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
  7. glennog Messages postés 337 Statut Membre 4
     
    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