[excel 2007 vba] Textbox saisie

Fermé
florian - 17 juin 2010 à 09:32
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 17 juin 2010 à 10:18
Bonjour,

J'ai un userform avec plusieurs textbox et je ne veux autoriser que la saisie de chiffre, avec des chiffres décimale aussi. J'ai bloqué pour que l'utilisateur ne puisse pas rentré plusieurs virgule dans la textbox mais quand j'inscrit un chiffre décimale dans la textbox que j'efface je ne peux plus inscrire un chiffre décimale.
Voici mon code:

Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(Chr(KeyAscii)) And Chr(KeyAscii) <> "." Then
        KeyAscii = 0 'on annule la pression sur la touche
    End If
    If Chr(KeyAscii) = "." Then
    If Not virgule Then virgule = True Else KeyAscii = 0
    End If
End Sub


Comment remédier à ce problème?
Merci pour vos réponses.


A voir également:

1 réponse

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 17/06/2010 à 10:19
Bonjour,

La solution n'est pas de tester la saisie sur l'évènement KeyPress() mais sur l'évènement Change() du TextBox. Par exemple:

Private Sub TextBox1_Change() 
     
    If CtrlSaisie(TextBox1.Text) = False Then 
        TextBox1.Text = Mid(TextBox1.Text, 1, Len(TextBox1.Text) - 1) 
    End If 
     
End Sub 

Public Function CtrlSaisie(ByVal str As Variant) As Boolean 
Dim i As Long 
Dim c As Variant 
Dim trouve As Integer 

    trouve = 0 

    For i = 1 To Len(str) 
        c = Mid(str, i, 1) 
        If c = "," Then trouve = trouve + 1 
    Next i 
     
    If trouve > 1 Then 
        CtrlSaisie = False 
        Exit Function 
    End If 
     
    For i = 1 To Len(str) 
        c = Mid(str, i, 1) 
        If Not IsNumeric(c) And c <> "," Then 
            CtrlSaisie = False 
            Exit Function 
        End If 
    Next i 
     
    CtrlSaisie = True 

End Function


J'ai fait une fonction qui effectue le contrôle, ce qui permet d'effacer et de recommencer sans problème et de l'utiliser pour d'autres Textboxes le cas échéant.

;o)

«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0