Avec ce que j'ai trouvé sur le forum et pu comprendre, j'ai fait ceci:
Code:
Function KeyOK(Code)
KeyOK = IIf(InStr("-1234567890", Chr(Code)), Code, 0): If KeyOK = 0 Then Beep
End Function
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = KeyOK(KeyAscii)
TextBox1.MaxLength = 4
End Sub
Je voudrais qu'on ne puisse insérer que 4 chiffres dans la textbox (nombre positif ou négatif),
les positifs sont saisis sans aucun signe. j'ai limité la saisie à 4 caractères plus qu'il y a le signe moins pour les nombres négatifs je n'ai que 3 chiffres.
Le signe "-" me pose aussi problème, on peut l'insérer une seconde fois (plutôt 4 fois, si on tape 4x-).
Il faudrait que le signe "-" ne soit accepté qu'en début de chaine.
Quand au nombre de chiffres, il sera de 4 maximum que ce soit pour les nombres positifs que pour les négatifs.
ex: 1996 ou -1996
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
salut
à tester
Code:
Private Sub T1_KeyPress(ByVal K As MSForms.ReturnInteger)
If Left(T1, 1) = "-" Then
If T1 Like ("*,*") Then
If Len(T1) > 5 Then K = 0
Else
If Len(T1) > 4 Then K = 0
End If
Else
If T1 Like ("*,*") Then
If Len(T1) > 4 Then K = 0
Else
If Len(T1) > 3 Then K = 0
End If
End If
If Len(T1) > 1 And K = 45 Then K = 0
If K < 44 Or K > 57 Or K = 47 Then K = 0
If K = 46 Or K = 44 Then K = Asc(Application.International(3))
If (K = 44 And T1 Like ("*,*")) Or (K = 46 And T1 Like ("*.*")) Or (K = 45 And T1 Like ("*-*")) Then K = 0
End Sub
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Bonjour à tous,
Un autre essai mais en utilisant l'évènement change.
VB:
Private Sub CommandButton1_Click()
Dim N As Long
On Error GoTo Invalide
N = CInt(TextBox1)
'pour exactemnent 4 chiffres, activer la prochaine instruction
'If Abs(N) < 1000 Then GoTo Invalide
MsgBox N
Exit Sub
Invalide:
TextBox1.SetFocus
Beep
End Sub
Private Sub TextBox1_Change()
Dim x As String
x = TextBox1
If Len(x) = 0 Then Exit Sub
On Error GoTo Rectif
If Not IsError(CLng(x & 0)) Then If Len(x) <> 1 Then If Abs(x) < 10000 Then TextBox1 = x Else GoTo Rectif
Exit Sub
Rectif:
TextBox1 = Left(TextBox1, Len(TextBox1) - 1): Beep
End Sub
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Bonjour à tous,
peut être une autre approche ainsi :
Code:
Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("-0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
If Len(TextBox1) = 0 And KeyAscii = 48 Then KeyAscii = 0
If Abs(Val(TextBox1 & Chr(KeyAscii))) > 9999 Then KeyAscii = 0
End Sub
Limiter Textbox à 4 chiffres pour positifs que négatifs
Bonjour à tous,
Messieurs, je vous dis bravo. Je viens de tester vos 3 solutions et elles fonctionnent bien.
Je ne m'attendais pas à avoir autant de choix. Je ne sais pas encore quel sera le code que j'utiliserai.
Je vous avoue que je n'ai pas tout compris, je vais m'aider de l'aide pour essayer de comprendre vos codes.
1000 MERCIS à vous.
Bonne journée.
Cordialement,
ps: le code de Pierrot93 fonctionne si et seulement si on insère des nombres après le signe "-", sinon on peut insérer plusieurs fois le caractère "-".
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs
Re,
en fin de compte , je pense que je vais utiliser le code de mapomme. Celui de Si... traite aussi les nombres décimaux. je n'utilise que des entiers.
Code:
Private Sub TextBox1_Change()
Dim x As String
x = TextBox1
If Len(x) = 0 Then Exit Sub
On Error GoTo Rectif
If Not IsError(CLng(x & 0)) Then If Len(x) <> 1 Then If Abs(x) < 10000 Then TextBox1 = x Else GoTo Rectif
Exit Sub
Rectif:
TextBox1 = Left(TextBox1, Len(TextBox1) - 1): Beep
End Sub
Je vois bien qu'il y a un Beep mais qui ne fonctionne pas. En fait, je voudrai ajouter un beep pour avertir l'utilisateur en cas de dépassement ou en cas de caractères non autorisés (lettres ou signes).
J'utiliserai le bouton commandButton pour transférer le contenu de la textBox sur une feuille excel (ni beep, ni message).
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Re,
avec des "beep"
Code:
Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("-0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
If Len(TextBox1) = 0 And KeyAscii = 48 Then KeyAscii = 0: Beep
If Abs(Val(TextBox1 & Chr(KeyAscii))) > 9999 Then KeyAscii = 0: Beep
End Sub
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
salut
Pierrot93, pas de Beep avec mon 2010 .
Plus simple avec des entiers
Code:
Private Sub T1_KeyPress(ByVal K As MSForms.ReturnInteger)
If K < 45 Or K > 57 Or K = 46 Or K = 47 Then K = 0 'pas chiffre ou -
If (K = 45 And T1 Like ("*-*")) Then K = 0 'refus du second -
If T1 <> "" And K = 45 Then K = 0 'pas de - aprés la première saisie
If Left(T1, 1) = "-" And Len(T1) > 5 Then K = 0 'si -, 4 chiffres
If Left(T1, 1) <> "-" And Len(T1) > 3 Then K = 0 'si +, 4 chiffres
End Sub
mais plutôt que de gérer des erreurs, je préfère les éviter
Code:
Private Sub T1_KeyPress(ByVal K As MSForms.ReturnInteger)
If K < 45 Or K > 57 Or K = 46 Or K = 47 Then K = 0 'pas chiffre ou -
If (K = 45 And T1 Like ("*-*")) Then K = 0 'refus du second -
If T1 <> "" And K = 45 Then K = 0 'pas de - aprés la première saisie
If Left(T1, 1) = "-" And Len(T1) > 5 Then K = 0 'si -, 4 chiffres
If Left(T1, 1) <> "-" And Len(T1) > 3 Then K = 0 'si +, 4 chiffres
If K > 0 Then T1 = T1.Value 'pour afficher ou pas le bouton
End Sub
Private Sub T1_Change()
Cb.Visible = (Left(T1, 1) = "-" And Len(T1) > 1) Or (Left(T1, 1) <> "-" And T1 <> "")
End Sub
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Bonjour Pierrot93,
Je te remercie beaucoup de m'avoir répondu mais comme je l'ai signalé au post #5
ps: le code de Pierrot93 fonctionne si et seulement si on insère des nombres après le signe "-", sinon on peut insérer plusieurs fois le caractère "-".
J'ai fait un test comme ceci: j'ai tapé 2 fois le signe "-" (--) et là je peux insérer une infinité de chiffres (la limitation à 4 chiffres n'est plus respectée).
Je voudrai qu'il n'y ait un signe moins qu'en début de chaine et le nombre de chiffres soit limité à 4 et ce que le nombre soit positif ou négatif (je ne travaille qu'avec des entiers).
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Bonjour,
Pour le plaisir de me joindre à mes petits camarades.
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 48 To 57 'chiffre 0 à 9
'Remplace 5 par 4 si on ne veut que 3 chiffres après le signe - pour les négatifs
KeyAscii = KeyAscii * -(Len(TextBox1) < 5 + (Left(TextBox1, 1) <> "-"))
Case 45 'signe -
KeyAscii = KeyAscii * -(Left(TextBox1, 1) <> "-")
Case Else
KeyAscii = 0
End Select
End Sub
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Re à tous,
pour compléter le code proposé :
Code:
Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("-0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
If Len(TextBox1) = 0 And KeyAscii = 48 Then KeyAscii = 0: Beep
If Len(TextBox1) > 0 And KeyAscii = 45 Then KeyAscii = 0: Beep
If Abs(Val(TextBox1 & Chr(KeyAscii))) > 9999 Then KeyAscii = 0: Beep
End Sub
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)
Re,
on pourrait le simplifier ainsi d'ailleurs :
Code:
Option Explicit
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("-0123456789", Chr(KeyAscii)) = 0 Or (Len(TextBox1) = 0 And KeyAscii = 48) _
Or (Len(TextBox1) > 0 And KeyAscii = 45) Or (Abs(Val(TextBox1 & Chr(KeyAscii))) > 9999) _
Then KeyAscii = 0: Beep
End Sub
[Résolu] : Limiter Textbox à 4 chiffres pour positifs que négatifs
Re,
Ainsi tout est au top, c'est parfait. Les 2 derniers codes de Pierrot93 et celui de Hasco répondent bien à ce que je cherchais à obtenir. Bravo à vous tous.
Mon problème est ainsi résolu et je vous en remercie beaucoup.
Private Sub TextBox1_Change()
Dim t$
t = Val(Replace(Replace(TextBox1, ".", ""), "-", ""))
If t = 0 Then t = ""
TextBox1 = IIf(Left(TextBox1, 1) = "-", "-", "") & Left(t, 4)
End Sub