XL 2016 Contrôle de date d'une textebox

Goose

XLDnaute Occasionnel
bonjour,
je cherche a réalise un contrôle de date d'une textebox (TB_DateNaissance) d'un userform (Form2).
du genre:
VB:
if Form2.TB_DateNaissance.Value <> Format(CDate(Form2.TB_DateNaissance), "dd/mm/yyyy") Then
MsgBox ("Veuillez saisir un bon format de date: (jj/mm/aaaa)")
Form2.TB_DateNaissance.SetFocus
mais je me perds un peu !!
merci de votre aide
bye
 

patricktoulon

XLDnaute Barbatruc
bonjour à tous
le test isdate seulement , n'est pas une bonne solution car isdate accepte tout les formats de date et même les courts
ce qui pourrait engendrer des erreurs de saisie ou syntaxe "dd/mm/yyyy" ( non relevées)
exemple si je tape
2022/12 --> isdate ok
05/06 --> isdate ok
16-07-2022 --> isdate ok
etc..etc..
tester le format était très bien après un test isdate bien entendu ;)
perso je préfere forcer la saisie au bon format comme ça pas de problème;)
 

jpb388

XLDnaute Accro
Bonjour à tous
alors il peut essayer ceci
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim An%, jour As Byte, Mois As Byte
    Select Case IsDate(Me.TextBox1.Value)
        Case True
            An = Year(Me.TextBox1.Value)
            Mois = Month(Me.TextBox1.Value)
            jour = Day(Me.TextBox1.Value)
            Me.TextBox1 = jour & "/" & Mois & "/" & An
        Case False
            If Me.TextBox1.Text = "" Then Exit Sub
            MsgBox "Veuillez saisir un format date Merci", vbCritical + vbOKOnly, "Erreur de saisie"
            Cancel = True
    End Select
End Sub
 

Eric C

XLDnaute Barbatruc
Bonjour le forum

@jpb388 : l'idée était bonne mais essaie d'entrer dans le TextBox : 148/2 !!!
Attention : je ne suis pas programmeur, je bidouille simplement et récupère les codes qui me conviennent.
@ Patrick : content de te lire, tu te fais absent ces derniers temps...
Bonne fin d'après-midi à toutes & à tous et bonnes vacances pour ceux qui y sont ou qui y seront bientôt.
@+ Eric c
 

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour le fil

Comme dit précédemment, j'ai récupéré un code de notre ami Patrick que je place ci-dessous. J'ai testé moults codes de nos amis de ce forum (et de forums amis) mais celui-ci est efficient à 100%. Il ne laisse passer (je n'ai peut être pas été assez sévère avec mes tests...) aucune erreur.

VB:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox1
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

Bonne fin d'après midi à toutes & à tous
@+ Eric c
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
243

Statistiques des forums

Discussions
312 192
Messages
2 086 056
Membres
103 110
dernier inscrit
Privé