bonjour,
je voudrais connaitre une méthode pour vérifie rla validité d'une date
exemple 30/11/2010 c'est ok
Version imprimable
bonjour,
je voudrais connaitre une méthode pour vérifie rla validité d'une date
exemple 30/11/2010 c'est ok
Bonjour,
Et si tu ouvrais ton aide en ligne sur le mot IsDate ?
Salut,
Et d'où vient cette date, inputbox, cellule, UserForm ?
Tu veux controler via VBA ou par formule (vu qu'on est en VBA j'imagine la réponse mais...)
Voici un exemple de code pour vérifier la cellule A1
Un exemple par formule dans la feuille (si date NOK comme 30/02/2010 alors = texte)Code:If Not IsDate(Cells(1, 1)) Then MsgBox "NOK"
Et n'oublie pas que tu peux toujours "forcer" l'utilisateur à saisir une date par un format de saisie (par exemple via la Validation sur la feuille)Code:=IF(ISNONTEXT(A1)=FALSE;"NOK";"OK")
A+
ben non
c'est pour ça que je pose la question
isdate me repond vrai pour les deux cas
Ah !
Tiens donc.
Montre ton code.
bonjour,
MsgBox IsDate("31/11/2009") => renvoie faux
MsgBox IsDate("31/12/2009") => renvoie vrai
EDIT : désolé ucfoutu, je n'avais pas vu ta réponse ...
voilà pour l'exemple
test me renvoie toujour vrai
Code:
1
2
3
4
5
6
7
8 Sub toto() date_ok = Cells(1, 1).Value ' contient 30/11/2010 date_ko = Cells(2, 1).Value ' contient 31/11/2010 test = IsDate(date_ko) test = IsDate(date_ok) End Sub
Bonjour,
Chez moi le premier test est faux et le second vrai
A tout hazard quel est le format de date de tes parametres regionnaux
pour les paramètres régionnaux je vois pas quoi toucher tout me semble ok
pour le format que je sois en standard ou en date c'est pareil
Un test a faire
Est ce que code genere une erreur
Code:test = IsDate(datevalue(date_ko))
pas d'erreur, jai bien vérifié que test_ko est une date erronnée
"test" me renvoie "vrai"
je viens de refaire une manip
si je metsCode:
1
2
3
4
5
6
7
8
9
10
11 Sub toto() date_ok = Cells(1, 1).Value date_ko = Cells(2, 1).Value test = IsDate(date_ko) test = IsDate(date_ok) vale = DateValue(date_ko) test = IsDate(DateValue(date_ko)) 'MsgBox IsDate("31/11/09") End Sub
31/11/10
vale renvoie :10/11/1931
si je mets 31/11/2010
vale renvoie une erreur : incomptibilité de type
t'as touché sur queleque chose
je ne sais pas trop comment interpréter cette confusion de date française et américaine
Re,
Sauf erreur de ma part DateValue "recherche" une date dans les formats "reconnus", pour preuve DateValue("12 février 2010") renvoi 12/02/2009, c'est pour ça qu'il passera d'un format GB à un format Fr.
Alors que 31/11/2010 n'étant pas une date c'est du texte mais qui ne correspond à aucune date quelque soit le "format".
A+
bon donc je suis coincé
j'aimerai savoir comment on peut imposer la date au systéme de datation français
et éviter le mélange avec le systéme GB
ça fait plusieur fois que je bute la dessus
C'est rassurant, cela prouve que ton systeme ne considere pas 31/11/2010 comme une date valide.Citation:
si je mets 31/11/2010
vale renvoie une erreur : incomptibilité de type
Essai en direct
Ca doit renvoyer FauxCode:Msgbox isdate("31/11/2009")
Dites les gars, c'est pas que je veux pas discuter des formats mais si le but est de vérifier la validité d'une date saisie dans une cellule sous le format jj/mm/aaaa ce code doit répondre au besoin...
A+Code:
1
2
3
4
5
6 Sub testdate() If Not IsDate(Cells(1, 1)) Then MsgBox Cells(1, 1) & " n'est pas une date valable" If Not IsDate(Cells(2, 1)) Then MsgBox Cells(2, 1) & " n'est pas une date valable" End Sub
en fait le pb me vient du format de date
si je mets jj/mm/aaaa on peut détecter une date erronée avec IsDate
si je mets jj/mm/aa je me retrouve avec une indetermination
et c'est là où je suis embeté car je n'ai pas souvent le choix dans la date
( sans mauvaise contrepeterie):oops:
ma macro doit fonctionner sur des ordinateurs de plein de gents et je ne peux pas leur demander d'aller vérifier les paramètres régionnaux ou autre:cry:
faudrait que je trouve une formule élégante qui détecterait une erreur sur la date pour éviter de planter tout le fichier excel
je comprend de moins en moins ton probleme.
Le nombre de caractère de l'année ne change rien au fonctionnement
Evidemment si je met 31/11/2010 le datevalue plante et le isdate renvoi FauxCode:
1
2
3
4
5 MsgBox DateValue("30/11/10") '31/10/2010 MsgBox IsDate("30/11/10") 'vrai MsgBox DateValue("30/11/2010") '31/10/2010 MsgBox IsDate("30/11/2010") 'vrai
Le problème vient du fait que VBA et Excel ne renvoient pas la même valeur booléenne suite à un test sur certaines valeurs de date
En Excel, tu saisis en A1
et excel considère que c'est du texte... Logique, ce n'est pas une date en jj/mm/aaaaCode:11/30/2009
Un test VBA sur A1
va renvoyer TRUE, car VBA interprète la date comme si tu avais saisis au format mm/jj/aaaaCode:isdate(range("a1")
Autre problème, si tu testes la cellule A1 comme étant numérique via Excel ou via VBA, tu n'auras pas le même résultat, car une date valide en Excel n'est pas considérée comme un nombre en VBA, mais bien en Excel ... ^^
Donc, tu dois combiner les deux
Code:worksheetfunction.IsNumber(range("a1")) and isdate(range("a1"))
bon résumons
c'est une question de format
si mon format est jj/mm/aaaa on peut verifier avec isdate
si mon format est jj/mm/aa alors c'est inderterminé
là je suis bien embété car je n'ai pas le choix dans le format de date
( sans mauvaise contrepeterie):lol:
les utilisateurs mettent le format de date qu'il leur plait et je ne paut rien leur imposer, je peut juste leur signaler qu(ils ont écrit des conneries dans la date
il faudrait que je trouve la bonne méthode pour imposer le format français et faire le distinguo avec le format GB.
As-tu essayé la solution que je te propose?
De plus, si tu parles bien de la saisie d'une date dans une cellule, passe par une validation qui impose la saisie d'une date, et si tu veux quatre chiffres pour l'année, c'est en forçant le format de la cellule que tu pourras l'avoir, pas en "contraignant" la saisie... :roll:
Version d'excel?