Valeur maximale d'un textbox

Résolu/Fermé
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 - Modifié le 28 août 2018 à 17:12
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 - 28 août 2018 à 17:17
Bonjour,

Je cherche à bloquer la valeur maximale du textbox3 de mon userform à 100.

Si jamais l'utilisateur tape une valeur supérieure alors MsgBox l'avertissant et effacer le contenu du textbox.

J'ai également une règle concernant la casse autorisée, celle-ci fonctionne très bien.

Mon problème est que lorsque j'efface le contenu de mon textbox, le MsgBox apparaît. Lorsqu'une valeur supérieure à 100 est saisie, le textbox ne se vide pas. Et lorsque je commence à saisir dans le textbox le MsgBox apparaît..

Je vous joint le fichier, et voici le code que j'utilise.

Merci d'avance du coup de main
Private Sub Textbox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

TextBox3.MaxLength = 3
Select Case KeyAscii
    Case 44, 46 ' que l'on frappe une virgule ou un point
      If InStr(TextBox3.Text, ",") Then 'si déjà une virgule présent
         KeyAscii = 0 'on ne permet pas deux virgules
      Else ' sinon
        KeyAscii = 44 'on force la une virgule
      End If
    Case 48 To 57
      'on laisse passer car ce sont des chiffres
    Case Else
      KeyAscii = 0 'on ne laisse pas passer
 End Select
 
    If TextBox3.Value > 100 Then
        MsgBox "Valeur maximale = 100"
        TextBox3.Value = ""
        Exit Sub
    End If
End Sub

Le fichier: https://www.cjoint.com/c/HHCn2OKz3EI

1 réponse

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
Modifié le 28 août 2018 à 17:27
Bonjour,

Tu peux essayer
Private Sub Textbox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

TextBox3.MaxLength = 3
Select Case KeyAscii
 Case 44, 46 ' que l'on frappe une virgule ou un point
 If InStr(TextBox3.Text, ",") Then 'si déjà une virgule présent
 KeyAscii = 0 'on ne permet pas deux virgules
 Else ' sinon
 KeyAscii = 44 'on force la une virgule
 End If
 Case 48 To 57
 'on laisse passer car ce sont des chiffres
     If CDbl(TextBox3.Value & (KeyAscii - 48)) > 100 Then
        MsgBox "Valeur maximale = 100"
        KeyAscii = 0 'on ne permet pas de valeur supérieure à 100
    End If
 Case Else
 KeyAscii = 0 'on ne laisse pas passer
 End Select
End Sub


Je ne suis pas sûr que MaxLength=3 soit judicieux avec des nombres décimaux
A+
1
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 1
Modifié le 28 août 2018 à 17:18
Ca marche du feu de Dieu! Merci infiniment, je m'arrachais les cheveux..
J'ai juste changer le numéro de la textbox de cette ligne:
If InStr(TextBox1.Text, ",") Then
en
If InStr(TextBox3.Text, ",") Then

Parfait!
Effectivement maintenant je peux retirer MaxLength=3
Merci encore!
0