Gestion des dates dans des TextBox

Bonjour à tous !

Qui n'a jamais été embêté par la gestion des dates dans des TextBox ... ?

Personne en effet !

La fonction IsDate() n'est pas assez complète pour une date au format Français. Effectivement, si on vérifie la date '12/13/2020' elle nous renvoie Vrai alors que c'est faux !

Je vous partage donc les petits bouts de codes que j'ai mis au point pour gérer ces dates et faciliter la saisie de l'utilisateur.

Cela se fait en trois procédures :

1/

Private Sub TextBox_Date_Change()

    'On autorise la saisie de 10 caractères maximum
    TextBox_Date.MaxLength = 10

End Sub

2/

Private Sub TextBox_Date_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

    'On autorise uniquement la saisie des caractères "0123456789"
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0

End Sub

3/

Private Sub TextBox_Date_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Dim Valeur As Byte

    'Si l'utilisateur presse la touche "Suppr" ou la touche "Del" (<-) alors quitte la procédure
    If KeyCode = 8 Or KeyCode = 46 Then

        Exit Sub

    Else

        Valeur = Len(TextBox_Date)

        'Si le jour ou le mois est inscrit, alors ajoute un "/" automatiquement
        If Valeur = 2 Then
            TextBox_Date = TextBox_Date & "/"
        ElseIf Valeur = 5 Then
            TextBox_Date = TextBox_Date & "/20"
        End If

        'Si la date inscrite contient 10 caractères
        If Valeur = 10 Then

            'Si le jour est compris entre [1;31] et le mois entre [1;12] alors
            If (Mid(TextBox_Date.Value, 1, 2) >= 1 And Mid(TextBox_Date.Value, 1, 2) < 32) And (Mid(TextBox_Date.Value, 4, 2) >= 1 And Mid(TextBox_Date.Value, 4, 2) < 13) Then

                'On va étudier les cas des différents mois
                Select Case Mid(TextBox_Date.Value, 4, 2)

                    'Pour les mois d'Avril, Juin, Octobre et Novembre
                    Case 4, 6, 9, 11

                        'Si le jour est supérieur à 30 alors va à DateNonExistante
                        If Mid(TextBox_Date.Value, 1, 2) > 30 Then
                            GoTo DateNonExistante
                        End If

                    'Pour le mois de Février
                    Case 2

                        On Error GoTo DateNonExistante 'Permet de gérer les années non bissextiles inférieures à l'année 2000

                        'Si l'année n'est pas bissextile mais que le jour rentré est 29 alors va à DateNonExistante
                        If Not Day(DateSerial(Year(TextBox_Date.Value), 3, 1 - 1)) = 29 And Mid(TextBox_Date.Value, 1, 2) = 29 Then
                            GoTo DateNonExistante
                        End If

                End Select

            Else

DateNonExistante:
                MsgBox "Veuillez entrer une date valide."
                TextBox_Date.Value = ""

            End If

        End If

    End If

End Sub

Je vous joins également un fichier pour vous montrer. Après, libre à vous de modifier le code à votre guise en fonction de vos préférences !

En espérant vous avoir aidé !

Baboutz

Bonjour toutes et tous

merci @toi ^^

crdlt,

André

Avec plaisir André !

Rechercher des sujets similaires à "gestion dates textbox"