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:
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

  1. Modérateur
    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.
    1. 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