Erreur sur isdate textbox
Résolu
Bonjour,
sur une textbox je saisis des dates sur ce format 28.05.2015
j'ai une macro qui doit me détecter si la date saisie est fausse
la voici:
mais si je saisis la date 05.13.2015 cette date n'est pas refusée alors que le mois 13 n'existe pas!!!
sur une textbox je saisis des dates sur ce format 28.05.2015
j'ai une macro qui doit me détecter si la date saisie est fausse
la voici:
if not isdate(format(replace(textbox1,".","/"),"MM/DD/YYYY")) goto erreursaisie end if
mais si je saisis la date 05.13.2015 cette date n'est pas refusée alors que le mois 13 n'existe pas!!!
2 réponses
-
ModérateurBonjour 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.-
Merci énormément!!!
j'ai juste légèrement adapté la macro estunedate car et c'est bizarre pour le format
"DD/MM/YYYY" ou le format "MM/DD/YYYY" et en adaptant la fonction selon le format à chaque fois pour le mois le code:
If Mois < 1 Or Mois > 12 Then GoTo TraiteErreur ne fonctionne pas du tout
alors j'ai rajouté ceci:
Dim m As Integer
m = CInt(Mid(TextBox4.text, 4, 2))
If m < 1 Or moisi > 12 Then GoTo ErreurSaisie
If Not EstUneDate(Format(Replace(TextBox4, ".", "/"), "MM/DD/YYYY")) Then
GoTo ErreurSaisie
End If
merci beaucoup en tout cas !! bonne journée à tous!
je ne sais pas comment faire mais on peu le mettre en résolu
-