Bonjour tout le monde,
Et oui... L'éternel problème des dates dans des textbox...
String vs Date ! Combat éternel en VB.
Bon.
Puisque IsDate ne peut pas traiter to souci, il convient de te créer, toi-même avec tes petites mains, ta propre fonction de vérification.
Ou alors de prendre la mienne...
Que voici :
Function EstUneDate(maDate As String) As Boolean
Dim Jour As Integer, Mois As Integer, Annee As Integer
'vérifie qu'une date est bien écrite au format jj/mm/aaaa
EstUneDate = False
On Error GoTo TraiteErreur
'une date = 10 caractères
If Len(maDate) <> 10 Then GoTo TraiteErreur
'dont 2 /
If Len(maDate) - Len(Replace(maDate, "/", "")) <> 2 Then GoTo TraiteErreur
'extrait le jour (deux premiers chiffres)
Jour = CInt(Left(maDate, 2))
If Jour < 1 Then GoTo TraiteErreur
'extrait le mois (les deux chiffres suivants le premier /)
Mois = CInt(Mid(maDate, 4, 2))
If Mois < 1 Or Mois > 12 Then GoTo TraiteErreur
'extrait l'année (les 4 derniers chiffres)
Annee = CInt(Right(maDate, 4))
Select Case Mois
Case 1, 3, 5, 7, 8, 10, 12 'mois de 31 jours
If Jour > 31 Then GoTo TraiteErreur
Case 4, 6, 9, 11 'mois de 30 jours
If Jour > 30 Then GoTo TraiteErreur
Case 2 'mois de février
If Annee Mod 4 = 0 And (Annee Mod 100 <> 0 Or Annee Mod 400 = 0) Then
'années bissextiles
If Jour > 29 Then GoTo TraiteErreur
Else
'années NON bissextiles
If Jour > 28 Then GoTo TraiteErreur
End If
End Select
EstUneDate = True
TraiteErreur:
Exit Function
End Function
Code appelant adapté à ton cas :
If Not EstUneDate(Format(Replace(TextBox1, ".", "/"), "MM/DD/YYYY")) Then
GoTo erreursaisie
End If
ATTENTION : ne fonctionne pas avec le format : "DD/MM/YYYY"
Dans ce cas, prière d'inverser Mois et Jour.
j'ai essayé avec dd/mm/yyyy et mm/dd/yyyy et ça ne fonctionne pas
J'ai lu un peu sur isdate() et voila sa description
Public Function IsDate(ByVal Expression As Object) As Boolean
IsDate retourne True si Expression est de type de données Date ou peut être converti en Date ; sinon, il retourne False.
Donc, que ce soit 05/13/2015 ou 13/05/2015, Il se fout du format et accepte les deux. Donc isdate valide que ca PEUT être une date, mais ne valide pas que c'est une date selon le format désiré.
Sub Macro1()
Dim test As Boolean
test = IsDate("12/15/15") 'Retourne vrai, c'est une date ou peut être converti en
test = IsDate("15/12/15") 'Retourne vrai
test = IsDate("15/15/15") 'Retourne faux
End Sub