Fonction 'isdate'

Résolu
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 - 18 oct. 2006 à 16:43
 GeoD - 8 févr. 2017 à 19:10
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

dthuler Messages postés 121 Date d'inscription dimanche 9 mars 2003 Statut Membre Dernière intervention 29 avril 2009
18 oct. 2006 à 18:28
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
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 oct. 2006 à 08:57
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
3
lilo44 Messages postés 174 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 15 février 2007 2
18 oct. 2006 à 17:53
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
0
lilo44 Messages postés 174 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 15 février 2007 2
18 oct. 2006 à 17:54
donc :

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

w_date = "38/09/1996" donne NOok pour 38 septembre 96
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
18 oct. 2006 à 18:04
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)
0
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
18 oct. 2006 à 18:17
donc ... pour résumer :

08/19/1996
et
19/08/1996

le isdate me retourne vrai !!!

c'est fou ca :-(
0
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
18 oct. 2006 à 18:34
merci beaucoup pour cette réponse !!! certes qui m'anéantis mais bon ... c'est la vie :-(
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 oct. 2006 à 08:26
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
0
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
19 oct. 2006 à 08:36
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 oct. 2006 à 08:49
y'a des formules mathématiques, pour détécter les années bissexstiles !

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_tulesais Messages postés 175 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 11 avril 2013 2
19 oct. 2006 à 09:28
superbe renfield !!!!

merci beaucoup pour ta réponse.

ta fonction isleapyear fonctionne impeccccccccc :-)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 oct. 2006 à 09:35
ravi que ca te convienne ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
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 :)
0
Rejoignez-nous