Fonction 'isdate' [Résolu]

Signaler
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
-
 GeoD -
Bonjour,

je souhaiterais avoir de l'aide sur la Fonction 'isdate'.

je n'arrive pas à bloquer la saisie d'une zone date invalide.

Par exemple : 08/19/1996 (jj/mm/aaaa)

les syntaxes suivantes laissent passer l'anomalie :
   IsDate(Format(w_date, "mm/dd/yyyy"))
   IsDate(w_date)

Auriez vous une proposition à me suggérer ? Merci d'avance pour votre aide,

Frédéric

13 réponses

Messages postés
121
Date d'inscription
dimanche 9 mars 2003
Statut
Membre
Dernière intervention
29 avril 2009

Pour autant que je me souvienne, IsDate retourne vrai si c'est une date, mais il ne contrôle aucunement la validité par rapport aux config régionales de l'utilisateur.

Ainsi, 38/10/1996 ne peut être valide car 38 n'est ni un jour ni un mois valide. Par contre 08/19/1996 en notation américaine mm/dd/aaa = 19/08/1996 en notation européene dd/mm/aaaa, donc la function retourne True dans les deux cas. Aucune anomalie de la part du système, cette fonction ne contrôle pas le format de la date...

... reste à coder la fonction qui va t'aider à faire ton contrôle...

Bon code!

David
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
ou bien tu peux utiliser les fonctions de manipulation de date de VB ^^

http://codyx.org/snippet_determiner-si-annee-est-bissextile_249.aspx

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
174
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
15 février 2007
2
w_date = "08/19/1996"

if IsDate(w_date) then
msgbox "ok"
else
msgbox "nook"
endif

Attention, par defaut, c'est de la forme MM/JJ/YYYY
Messages postés
174
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
15 février 2007
2
donc :

w_date = "08/19/1996" donne OK pour 19 aout 96

w_date = "38/09/1996" donne NOok pour 38 septembre 96
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
hummm ..... j'ai un ptit soucis !!!

w_date = "38/09/1996" donne effectivement NOok !!!
par contre ...
w_date = "18/09/1996" donne OK !!! alors comment se fait ce ???

la ... je bloque :-(

(merci beaucoup lilo44)
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
donc ... pour résumer :

08/19/1996
et
19/08/1996

le isdate me retourne vrai !!!

c'est fou ca :-(
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
merci beaucoup pour cette réponse !!! certes qui m'anéantis mais bon ... c'est la vie :-(
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
au choix :

IsDate ( #10/19/2006# )    => True
IsDate ( "19/10/2006" )    => True   (dépend des paramètes régionnaux)
IsDate ( "2006-10-19" )    => True  (fonctionne quelques soient les paramètres régionnaux)

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
BONJOUR !!!
... pas très beau sur marseille aujourd'hui :-(

donc ... pour en revenir à mon problème ... je souhaiterais contourner cette fonction 'isdate' ... 

je vous livre donc mon code mais je bute sur la détection des années bissextiles.
Auriez vous une astuce à me donner ? :-)

Merci d'avance pour votre aide !!!

    Select Case Mid(W_Date, 3, 2)
        Case "01", "03", "05", "07", "08", "10", "12"
            If Mid(W_Date, 1, 2) < "01" Or Mid(W_Date, 1, 2) > "31" Then
                ANO
            End If
        Case "04", "06", "09", "11"
            If Mid(W_Date, 1, 2) < "01" Or Mid(W_Date, 1, 2) > "30" Then
               ANO
            End If
        Case "02"            If Mid(W_Date, 5, 2) "96" Or Mid(W_Date, 5, 2) "00" Or _                Mid(W_Date, 5, 2) "04" Or Mid(W_Date, 5, 2) "08" Or _                Mid(W_Date, 5, 2) "12" Or Mid(W_Date, 5, 2) "16" Then
                If Mid(W_Date, 1, 2) < "01" Or Mid(W_Date, 1, 2) > "29" Then
                  ANO
                End If
            Else
                If Mid(W_Date, 1, 2) < "01" Or Mid(W_Date, 1, 2) > "28" Then
                  ANO
                End If
            End If
        Case Else
            ANO
    End Select
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
y'a des formules mathématiques, pour détécter les années bissexstiles !

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
177
Date d'inscription
mercredi 2 juin 2004
Statut
Membre
Dernière intervention
11 avril 2013
1
superbe renfield !!!!

merci beaucoup pour ta réponse.

ta fonction isleapyear fonctionne impeccccccccc :-)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
ravi que ca te convienne ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Merciiiiiiiiiiiiii cs_tulesais!!!!!

j'ai passé des heures aujourd'hui à tenter de valider une date entrée dans un inputbox... piouf!... et là bingo! enfin :)