Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)

cathodique

XLDnaute Barbatruc
Bonsoir,

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

En vous remerciant par avance.

Cordialement,
 

Pièces jointes

  • Copie de TextBox 4 chiffres.xls
    36.5 KB · Affichages: 62

Si...

XLDnaute Barbatruc
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
 

Pièces jointes

  • TextBox 4 chiffres.xls
    35.5 KB · Affichages: 54

mapomme

XLDnaute Barbatruc
Supporter XLD
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
 

Pièces jointes

  • TextBox 4 chiffres v1.xls
    39 KB · Affichages: 56
Dernière édition:

Pierrot93

XLDnaute Barbatruc
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

bonne journée
@+
 

cathodique

XLDnaute Barbatruc
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 "-".
 
Dernière édition:

cathodique

XLDnaute Barbatruc
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).

En vous remerciant beaucoup.

Cordialement,
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
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
 

Si...

XLDnaute Barbatruc
Re : Limiter Textbox à 4 chiffres pour positifs que négatifs (- au debut uniquement)

salut

Pierrot93:D, pas de Beep avec mon 2010 :confused:.
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
 

Pièces jointes

  • TextBox entier 4 chiffres.xls
    39.5 KB · Affichages: 47

cathodique

XLDnaute Barbatruc
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).

Je vous remercie beaucoup.

Cordialement,
 
G

Guest

Guest
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

A+
 

Pierrot93

XLDnaute Barbatruc
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
 

Pierrot93

XLDnaute Barbatruc
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
 

cathodique

XLDnaute Barbatruc
[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.

Cordialement,
 

Statistiques des forums

Discussions
311 719
Messages
2 081 874
Membres
101 829
dernier inscrit
listener75