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 Sub

Ensuite, 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 Sub

Bonjour à tous,

Tout ça me paraît quelque peu lourd... Si je veux un nombre avec 2 décimales maxi, je teste à la sortie :

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) / 100

Cordialement.

Rechercher des sujets similaires à "boucle textbox indexee"