Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

contrôler la saisie d'une date - VBA + Word 2002

2 réponses
Avatar
Congelator
Salut tout le monde,
Mon problème est le suivant :
dans une form, j'ai plusieurs tbox dans lesquels l'utilisateur doit saisir
une date (aussi bien date du jour que de naissance). J'aimerais faire un
automatisme (saisie 01012006 = 01.01.2006). J'ai récupéré le code ci-dessous
d'un autre document créé mais il est long et je me demande s'il n'y aurait
pas moyen d'en faire une proc "Private Sub ControleDate" que j'appellerai à
la sortie de chaque champ (ou sur Change ??) au lieu de le recopier 8 x (car
8 tbox date). J'ai essayé mais vu mes faibles connaissances en VBA... a de la
peine, s'en fait et nous en donne...:-)
Si quelqu'un a une solution, ça m'intéresse. Merci d'avance.

Private Sub tbox_date_1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
' Variable de formatage de la date
Dim Date_correcte As String
' Vérification si la date existante est déjà correcte
If IsDate(tbox_date_1.Text) Then
' La date saisie est correcte
Else
' La date saisie n'est pas formatée
If IsNumeric(tbox_date_1.Text) Then
' La date est au format jjmmaa
If Len(tbox_date_1.Text) = 6 Then
Date_correcte = Left(tbox_date_1, 2) & "." &
Mid(tbox_date_1, 3, 2) & ".20" & Right(tbox_date_1, 2)
End If
' La date est au format jjmmaaaa
If Len(tbox_interp_date.Text) = 8 Then
Date_correcte = Left(tbox_date_1, 2) & "." &
Mid(tbox_date_1, 3, 2) & "." & Right(tbox_date_1, 4)
End If
End If
' Vérification que la date formatée est correcte
If IsDate(Date_correcte) Then
tbox_date_1.Text = Date_correcte
Else
' Dans les cas ou la saisie n'est pas correcte
MsgBox "VOUS N'AVEZ PAS ENTRE LE BON FORMAT DE DATE ! ( ex:
010103 ou 01012003 ) " & Chr(13) & "Vous avez tapé => " & tbox_date_1.Text +
" <=", 48, "ATTENTION !"
'MsgBox "La date est incorrecte : " & tbox_date_1.Text
tbox_date_1.SetFocus
End If
End If


--
Céd / Lausanne

2 réponses

Avatar
Jacques93
Bonjour Congelator,
Congelator a écrit :
Salut tout le monde,
Mon problème est le suivant :
dans une form, j'ai plusieurs tbox dans lesquels l'utilisateur doit saisir
une date (aussi bien date du jour que de naissance). J'aimerais faire un
automatisme (saisie 01012006 = 01.01.2006). J'ai récupéré le code ci-dessous
d'un autre document créé mais il est long et je me demande s'il n'y aurait
pas moyen d'en faire une proc "Private Sub ControleDate" que j'appellerai à
la sortie de chaque champ (ou sur Change ??) au lieu de le recopier 8 x (car
8 tbox date). J'ai essayé mais vu mes faibles connaissances en VBA... a de la
peine, s'en fait et nous en donne...:-)
Si quelqu'un a une solution, ça m'intéresse. Merci d'avance.




Une possibilité est de passer l'objet Textbox en paramètre de la
fonction de contrôle, par exemple (J'ai remplacé le séparateur . par /) :

Private Sub tbox_date_1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Not ControleDate(tbox_date_1)
End Sub

Private Sub tbox_date_2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Not ControleDate(tbox_date_2)
End Sub

' [...]

Private Function ControleDate(tbox As MSForms.TextBox) As Boolean
' Variable de formatage de la date
Dim Date_correcte As String

ControleDate = True
' Vérification si la date existante est déjà correcte
If IsDate(tbox.Text) Then
' La date saisie est correcte
Else
' La date saisie n'est pas formatée
If IsNumeric(tbox.Text) Then
' La date est au format jjmmaa
If Len(tbox.Text) = 6 Then
Date_correcte = Left(tbox.Text, 2) & "/" & Mid(tbox.Text, 3, 2)
& "/20" & Right(tbox.Text, 2)
End If
'La date est au format jjmmaaaa
If Len(tbox.Text) = 8 Then
Date_correcte = Left(tbox.Text, 2) & "/" & Mid(tbox.Text, 3, 2)
& "/" & Right(tbox.Text, 4)
End If
End If
' Vérification que la date formatée est correcte
If IsDate(Date_correcte) Then
tbox.Text = Date_correcte
Else
' Dans les cas ou la saisie n'est pas correcte
MsgBox "VOUS N'AVEZ PAS ENTRE LE BON FORMAT DE DATE ! ( ex:
""010103 ou 01012003 ) """ & Chr(13) & "Vous avez tapé => " & tbox.Text
+ " <=", 48, "ATTENTION !"
'MsgBox "La date est incorrecte : " & tbox.Text
ControleDate = False
End If
End If
End Function

--
Cordialement,

Jacques.
Avatar
Congelator
Salut Jacques

Un énorme MERCI pour ton aide, c'est génial et tout à fait ce que je
cherchais.
--
Céd / Lausanne


"Jacques93" a écrit :

Bonjour Congelator,
Congelator a écrit :
> Salut tout le monde,
> Mon problème est le suivant :
> dans une form, j'ai plusieurs tbox dans lesquels l'utilisateur doit saisir
> une date (aussi bien date du jour que de naissance). J'aimerais faire un
> automatisme (saisie 01012006 = 01.01.2006). J'ai récupéré le code ci-dessous
> d'un autre document créé mais il est long et je me demande s'il n'y aurait
> pas moyen d'en faire une proc "Private Sub ControleDate" que j'appellerai à
> la sortie de chaque champ (ou sur Change ??) au lieu de le recopier 8 x (car
> 8 tbox date). J'ai essayé mais vu mes faibles connaissances en VBA... a de la
> peine, s'en fait et nous en donne...:-)
> Si quelqu'un a une solution, ça m'intéresse. Merci d'avance.
>

Une possibilité est de passer l'objet Textbox en paramètre de la
fonction de contrôle, par exemple (J'ai remplacé le séparateur . par /) :

Private Sub tbox_date_1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Not ControleDate(tbox_date_1)
End Sub

Private Sub tbox_date_2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Cancel = Not ControleDate(tbox_date_2)
End Sub

' [...]

Private Function ControleDate(tbox As MSForms.TextBox) As Boolean
' Variable de formatage de la date
Dim Date_correcte As String

ControleDate = True
' Vérification si la date existante est déjà correcte
If IsDate(tbox.Text) Then
' La date saisie est correcte
Else
' La date saisie n'est pas formatée
If IsNumeric(tbox.Text) Then
' La date est au format jjmmaa
If Len(tbox.Text) = 6 Then
Date_correcte = Left(tbox.Text, 2) & "/" & Mid(tbox.Text, 3, 2)
& "/20" & Right(tbox.Text, 2)
End If
'La date est au format jjmmaaaa
If Len(tbox.Text) = 8 Then
Date_correcte = Left(tbox.Text, 2) & "/" & Mid(tbox.Text, 3, 2)
& "/" & Right(tbox.Text, 4)
End If
End If
' Vérification que la date formatée est correcte
If IsDate(Date_correcte) Then
tbox.Text = Date_correcte
Else
' Dans les cas ou la saisie n'est pas correcte
MsgBox "VOUS N'AVEZ PAS ENTRE LE BON FORMAT DE DATE ! ( ex:
""010103 ou 01012003 ) """ & Chr(13) & "Vous avez tapé => " & tbox.Text
+ " <=", 48, "ATTENTION !"
'MsgBox "La date est incorrecte : " & tbox.Text
ControleDate = False
End If
End If
End Function

--
Cordialement,

Jacques.