Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

Dranreb

XLDnaute Barbatruc
Bonsoir
Testez plutôt :
VB:
If Not IsDate(Me.TB_DateNaissance.Value) Then
    MsgBox ("Veuillez saisir un bon format de date: (jj/mm/aaaa)")
    Cancel = True: End If
(Supposé dans une Sub TB_DateNaissance.Exit)
 

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
261
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…