Boucle sur textbox indexée
Bonjour à tous
je sèche sur une boucle de textbox pour vérifier que le 3ème caractère à partir de la droite est soit "." ou","
Une erreur de compilation sur Textbox(x) "Erreur de compilation Sub ou Fonctin non définie
Question : est il possible de faire ce type de boucle et si oui ou est mon erreur
Merci d'avance
Private Sub CommandButton2_Click() '<<<<====.... VALIDATION
Dim test As Variant
dim x as byte
' VÉRIFICATIONS SI TEXTBOX AVEC UNIQUEMENT 2 DÉCIMALES
' verif décimal = "." ou ","
For X = 4 To 14
'On Error Resume Next
test = Left(TextBox(X), Len(TextBox(X)) - 2) 'on enlève les 2 derniers caractères
test = Right(test, 1)
If test <> "." Then averti7: Exit Sub ' verifier que le 3ème caractère de droite est "."
Controls("Textbox" & X).Value = Replace(("Textbox" & X), ".", ",") ' on remplace le point par un virgule
If (TextBox(X).Value) < 1 Then averti7: Exit Sub 'verifier si valeur >0 OK
Next X
'Si on arrive là, c'est que les textbox sont bien numériques et la décimale bien placée
End Sub
bonjour
si on veux un texbox numériques i faux déjà lui mettre un KeyPress
1 ex:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890,", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
End Sub
et on enregistre avec Cdbl
2 ex:
Cells(Lig, C).Value = CDbl(Controls("TextBox" & C).Value)
A+
Maurice
Bonjour Maurice
j'utilise déjà ces fonctions, mais je souhaite aller plus loin en vérifiant que le chiffre saisi ne comporte que 2 décimales.
Je ne pense pas que ces deux fonctions répondent à mon besoins sauf erreur ou omission de ma part.
A te lire
Alain
Bonjour,
Il serait préférable de contrôler et insérer directement à la saisie le bon séparateur :
Dim Sep As String
Private Sub UserForm_Initialize()
'récupère le séparateur système
Sep = Format(0, ".")
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
'inscrit le bon séparateur que l'on tape le point ou la virgule
Case 45, 46: KeyAscii = Asc(Sep)
'seulement les chiffres de 0 à 9 (dans ce cas, ne rien faire !)
Case 48 To 57
'interdit tout autre caractère
Case Else: KeyAscii = 0
End Select
End SubEnsuite, tu peux mettre en place une routine pour contrôler que seulement un séparateur est saisie.
Comme tu as plusieurs TextBox, tu peux utiliser un module de classe afin de ne pas taper du code inutilement.
Suite,
Pour empêcher une seconde saisie du séparateur :
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
'inscrit le séparateur système que l'on tape le point ou la virgule
Case 45, 46
KeyAscii = Asc(Sep)
'si déjà présent, empêche une seconde saisie
If InStr(TextBox1.Text, Sep) <> 0 Then KeyAscii = 0
'ne rien faire, c'est un chiffre donc, autorisé !
Case 48 To 57
'interdit tout autre caractère
Case Else: KeyAscii = 0
End Select
End SubBonjour à tous,
Tout ça me paraît quelque peu lourd...
v = Val(Replace(TextBox1.Value, ",", "."))Je vérifie éventuellement que la valeur n'est pas 0, si 0 ne peut être attendu...
Et j'ajuste les décimales :
v = Int(v * 100) / 100Cordialement.