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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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
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.
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.
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
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