[VBA] Forcer format textbox

Résolu
Skeo -  
Polux31 Messages postés 7219 Statut Membre -
Bonjours CCM!!!

Ma question est la suivante: comment forcer le format d'un textbox pour que l'utilisateur ne puisse saisir que des chiffre compris entre
1 et 53?

Merci d'avance de votre aide!

1 réponse

  1. zebulon2503 Messages postés 1229 Date d'inscription   Statut Membre Dernière intervention   110
     
    Salut

    Tu peux faire un test après la saisie :
    If valeur >53 or valeur<1 then 
       msgbox("mauvaise saisie") 
       Action à faire 
    end if
    

    Les cons peuvent avoir l'air intelligent à première vue... Heureusement pour eux que la vitesse de la lumière est supérieure à celle du son.
    1
    1. Skeo
       
      Tout d'abord merci de ta réponse.

      En fait ça me générait une erreur quand je ne saisissais pas une valeur numérique (ce que j'étais sensé faire) mais j'ai résolu le problème car la valeur tapé dans la textbox était récupérée dans une variable de type Long mais je l'ai assé en Variant de manière à ce que ça ne plante plus... Et additionné à ton idée l'utilisateur est prévenu qu'il doit saisir une valeur numérique.

      Merci!
      0
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      Bonjour

      Oula ... il vaut mieux typer les variables correctement. Variant n'est pas un bon palliatif à ton problème. Tu surcharges la mémoire inutilement et tu ralentis le programme.

      La bonne méthode est de tester le contenu de la textbox:

      If Not IsNuméric(TextBox1.Text) Then
            MsgBox "Vous devez saisir une valeur numérique.",VbExclamation,"Message Système"
            TextBox1.Text = ""
            Exit Sub
      End if
      
      If Val(TextBox1.Text) < 1 Or Val(TextBox1.Text) > 53 Then
            MsgBox "Valeur saisie en dehors de la plage.",VbExclamation,"Message Système"
            Exit Sub
      End If


      ;o)
      0
    3. Msgbox &quot;blablabla&quot;
       
      Merci!!!

      J'avais également trouvé ceci:

      On Erreor resume next
      If Not IsNumeric(Right(Textbox1, 1)) Then
      Msgbox "blablabla"
      TextBox1 = Left(Textbox1, Len(TextBox1) - 1)
      End If

      Mais ça marquait deux fois le message d'erreur...

      Mais ton code est mieux car il répond mieux à mes besoin en forçant une valeur numérique et en définnissant une plage de saisi.
      0
    4. Skeo
       
      En fait polux ton code renvoi une erreur dès qu'on rentre une valeur quelle qu'elle soit...
      L'erreur est "Sub ou fonction non définie".
      0
    5. Polux31 Messages postés 7219 Statut Membre 1 204
       
      On Error Resume Next permet, en cas d'erreur, de ne pas planter l'exécution de l'application.
      Utilisé tel quel ne sert à rien et est même très dangereux, puisqu'il masque un dysfonctionnement.

      On Error Resume Next intercepte une erreur et demande à l'application de continuer.
      Il faut gérer cette erreur, de façon "propre". On Error retourne le numéro de l'erreur s'il y en a une ou zéro s'il n'y en a pas:

      Par exemple :

      On Error Resume Next 
      If Not IsNumeric(Right(Textbox1, 1)) Then 
          Msgbox "blablabla" 
      TextBox1 = Left(Textbox1, Len(TextBox1) - 1) 
      End If  
      
      'La cas le plus généralement employé 
      If Err.Number <> 0 Then 
           MsgBox Err.Number & ": " & Err.Description 
           Exit Sub 
      End If


      Ou bien, si on connait le numéro de l'erreur :

      If Err.Number <> 0 Then 
          If Err.Number = 13 Then 
               MsgBox "La valeur attendue doit être de type entier", vbCritical, "Message Systeme" 
               Exit Sub 
          Else 
               MsgBox Err.Number & ": " & Err.Description 
               Exit Sub 
          End IF 
      End If


      ;o)
      0