XL 2016 Autoriser saisie dans textbox

KTM

XLDnaute Impliqué
Bonjour cher Forum
Jai un textbox dans lequel je voudrais limiter la saisie aux chiffres entiers allant de 0 a 100
Merci et bonne journee
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour KTM

Basiquement, tu peux faire ainsi :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim plage As Single

If TextBox1 = "" Then Exit Sub

plage = TextBox1

If plage < 1 Or plage > 100 Then
    Cancel = True
    MsgBox "Données non valide ! La valeur doit être comprise entre 1 et 100"
    TextBox1 = ""
End If
End Sub
Bonne journée à toutes & à tous
@+ Eric c
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

Une autre possibilité
VB:
Private Sub TextBox1_Change()
Dim vMax
vMax = 100
If TextBox1 = vbNullString Then Exit Sub
If Not IsNumeric(TextBox1) Then
  MsgBox "Ne saisir que des chiffres! Merci", vbCritical
  TextBox1 = vbNullString
  ElseIf Val(TextBox1) > vMax Then
  MsgBox "Valeur incorrecte!", vbCritical
  TextBox1 = 100
End If
End Sub
 

job75

XLDnaute Barbatruc
Bonjour KTM, Eric C, JM,
VB:
Private Sub TextBox1_Change()
TextBox1 = Left(TextBox1, 3)
If Not IsNumeric(Mid(TextBox1, 1, 1)) Then TextBox1 = Mid(TextBox1, 2)
If Not IsNumeric(Mid(TextBox1, 2, 1)) Then TextBox1 = Left(TextBox1, 1) & Mid(TextBox1, 3)
If Not IsNumeric(Mid(TextBox1, 3, 1)) Then TextBox1 = Left(TextBox1, 2)
If Val(Left(TextBox1, 3)) > 100 Then TextBox1 = Left(TextBox1, 2)
End Sub
Tout le monde sait que les messages sont casse-pieds !!!
 

job75

XLDnaute Barbatruc
Evidemment ceci est mieux :
VB:
Private Sub TextBox1_Change()
TextBox1 = Left(TextBox1, 3)
If Not IsNumeric(Mid(TextBox1, 1, 1)) Then TextBox1 = Mid(TextBox1, 2)
If Not IsNumeric(Mid(TextBox1, 2, 1)) Then TextBox1 = Left(TextBox1, 1) & Mid(TextBox1, 3)
If Not IsNumeric(Mid(TextBox1, 3, 1)) Or Val(TextBox1) > 100 Then TextBox1 = Left(TextBox1, 2)
End Sub
 

Eric C

XLDnaute Barbatruc
Re,

Sans message casse-pieds :
VB:
Private Sub TextBox1_Change()

Private Sub TextBox1_Change()

If TextBox1 > 100 Then
    Cancel = True
        TextBox1 = "Uniquement valeur" & vbCrLf & "numérique < à 100"
 With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
   End With
   End If

End Sub

End Sub
Oubli : mettre les propriétés : Multiline àTrue et MaxLenght à 3
@+ Eric c
 
Dernière édition:

KTM

XLDnaute Impliqué
Evidemment ceci est mieux :
VB:
Private Sub TextBox1_Change()
TextBox1 = Left(TextBox1, 3)
If Not IsNumeric(Mid(TextBox1, 1, 1)) Then TextBox1 = Mid(TextBox1, 2)
If Not IsNumeric(Mid(TextBox1, 2, 1)) Then TextBox1 = Left(TextBox1, 1) & Mid(TextBox1, 3)
If Not IsNumeric(Mid(TextBox1, 3, 1)) Or Val(TextBox1) > 100 Then TextBox1 = Left(TextBox1, 2)
End Sub
DEAR Job75
Merci enormement
 

Eric C

XLDnaute Barbatruc
Bonjour le fil

@ KTM, même si le code proposé ne te convient pas, prends au moins la peine de saluer la personne qui a pris de son temps pour tenter de te répondre et ce avec ses connaissances, quelles qu'elles soient. Il me semble que cela est la base même de la politesse, enfin me semble t'il ???
Ce forum est un forum d'entraide composé de passionnés d'EXCEL. Nous ne sommes pas tous des ténors du Vba mais avons le mérite pour grand nombre d'entre nous d'être polis et de tenter de rendre service aux personnes en difficultés.
Sur ce, bon dimanche à toutes & à tous
@+ Eric c
 

patricktoulon

XLDnaute Barbatruc
bonjour a tous
@Eric C j'aime bien l'idée du message directement dans le textbox avec le sellength (len) prêt pour une new saisie

ce sont de petits détails que j'aime beaucoup dans la prog vba excel

il est question de numérique; un test sur ce point serait bien venue aussi
perso je suis plutôt adepte des événements keypress et keydown en interceptant les keyascii et keycode
mais dans un contexte de simplicité d'un simple contrôle et (contrainte a une valeur) ton idée est nikel
pas de msgbox: POUAHH!!! les msgboxs :)

très bonne idée ;)
 

patricktoulon

XLDnaute Barbatruc
re
pas d'inter le dimanche ?
a ben ça rien est moins sur;) c'est un peu le problème quand on développe un lien amical avec des clients réguliers
ils se permette de t'appeler pour n'importeNAOuAck
cela dit je me plaint pas c'est comme ca que je travaille :)

pour ton idée
VB:
Private Sub TextBox1_Change()
    With TextBox1
        .Value = Replace(.Value, ".", ",")    ' on accepte les décimales
        If .Value > 100 Or Not IsNumeric(.Value) Then
            Cancel = True
            .Value = IIf(.Value <> "", "Uniquement valeur  numérique < à 100", "")
            .SetFocus
            .SelStart = 0
            .SelLength = Len(.Value)
        End If
    End With
End Sub
 
Dernière édition:

Discussions similaires

Réponses
15
Affichages
423

Statistiques des forums

Discussions
311 708
Messages
2 081 750
Membres
101 812
dernier inscrit
trufu