XL 2016 Problème VBA - format TextBox

marcfriez

XLDnaute Nouveau
Bonsoir à tous,

J'ai crée un programme excel avec UserForm, mais je rencontre un problème dans mon formulaire. J'ai 3 types de textbox:

-Dans la première j'ajoute des données numériques (montant en euros). J'ai envie de modifier le format de ma textbox pour faire en sorte que je peux saisir juste des nombres décimaux avec la virgule, puis à la fin faire apparaître le symbole euros €. Si je saisie un autre symbole ou une lettre un message d'erreur doit apparaître.

-Dans la deuxième j'ajoute une date du type dd/mm/yyyy. J'ai envie de modifier le format de ma textbox pour faire en sorte que je peux saisir juste des chiffres avec des slashes ("/"). Si je saisie un autre symbole ou une lettre un message d'erreur doit apparaître.

- Dans la dernière j'ajoute un pourcentage ("00.00%). J'ai envie de modifier le format de ma textbox pour faire en sorte que je peux saisir juste des chiffres avec la virgule, puis à la fin faire apparaître le "%". Si je saisie un autre symbole ou une lettre un message d'erreur doit apparaître.

Je vous remercie d'avance :)))
 
Dernière édition:

Eric C

XLDnaute Barbatruc
Re,

Bonjour Patrick... Avoue que c'est plus rapide avec le code de ton masque de saisie universel ..... 3 formats pour le prix d'un... mieux que les soldes.
Ma signature.gif
 

patricktoulon

XLDnaute Barbatruc
Re,

Bonjour Patrick... Avoue que c'est plus rapide avec le code de ton masque de saisie universel ..... 3 formats pour le prix d'un... mieux que les soldes.
Regarde la pièce jointe 1048347
Bonsoir @Eric C ca n'a rien a voir avec un textbox avec masque de saisie
la il s'agit juste de suffixer le .value d'un symbole et je t'offre en prime la manip des touches sans te soucier de ce suffixe
comme dans celle du masque ;)
 

marcfriez

XLDnaute Nouveau
@ ça plante à chaque fois. Pour simplifier, avez vous un code unique pour toutes mes textbox pour éviter la saisie de lettre. C'est à dire quand je saisie des lettres un message d'erreur doit apparaître. Le reste me semble très compliqué, je suis perdu...
 

patricktoulon

XLDnaute Barbatruc
@ ça plante à chaque fois. Pour simplifier, avez vous un code unique pour toutes mes textbox pour éviter la saisie de lettre. C'est à dire quand je saisie des lettres un message d'erreur doit apparaître. Le reste me semble très compliqué, je suis perdu...
il faut suivre !!! post #15 il t'est impossible de taper autre chose qu'un numérique décimale ou pas
 

patricktoulon

XLDnaute Barbatruc
re
TIENS pour une date en voila un aussi tout mini de code
pareil on intercepte et control la validité de la date en même temps avant de valider la touche (les séparateurs sont automatiques )
VB:
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    With TextBox3
        X = .Value
       l = 10
        Select Case KeyCode
        Case 96 To 105
            X = X & Chr(KeyCode + IIf(KeyCode < 96, 32, -48))
            If Len(X) = 2 Or Len(X) = 5 Then X = X & "/"
            If Val(X) > 31 Then X = ""
            If Len(X) = 6 Then If Not IsDate(X & "2000") Then X = Left(X, 3)
            If Len(X) = 10 Then If Not IsDate(X) Then X = Mid(X, 1, InStrRev(X, "/"))
            KeyCode = 0
         Case 8:
        If .SelStart > 3 Then l = 4
       If .SelStart > 6 Then l = 6
        Case Else: KeyCode = 0
        End Select
        .Value = Mid(X, 1, l)
    End With
End Sub
;)
 

marcfriez

XLDnaute Nouveau
re
TIENS pour une date en voila un aussi tout mini de code
pareil on intercepte et control la validité de la date en même temps avant de valider la touche (les séparateurs sont automatiques )
VB:
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    With TextBox3
        X = .Value
       l = 10
        Select Case KeyCode
        Case 96 To 105
            X = X & Chr(KeyCode + IIf(KeyCode < 96, 32, -48))
            If Len(X) = 2 Or Len(X) = 5 Then X = X & "/"
            If Val(X) > 31 Then X = ""
            If Len(X) = 6 Then If Not IsDate(X & "2000") Then X = Left(X, 3)
            If Len(X) = 10 Then If Not IsDate(X) Then X = Mid(X, 1, InStrRev(X, "/"))
            KeyCode = 0
         Case 8:
        If .SelStart > 3 Then l = 4
       If .SelStart > 6 Then l = 6
        Case Else: KeyCode = 0
        End Select
        .Value = Mid(X, 1, l)
    End With
End Sub
;)
@patricktoulon

Je vous remercie infiniment, j'ai enfin réussi, merci beaucoup :) :) :) :)

Bonne soirée
 

Discussions similaires

Réponses
15
Affichages
511
Réponses
9
Affichages
165

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote