Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème format de date sur DTPicker

8 réponses
Avatar
michael
Bonjour,
j'ai un problème de format de date, j'explique mon problème: je doit rentrer
une date de départ 'start date' et de fin 'end date'. Seulement dans un cas
je dois spécifié le 'jour-mois-année' mais dans d'autre cas je ne doit
spécifier que 'mois-année' en fonction de ce que je choisi préalablement dans
le menu.
Si je choisi la deuxième solution je spécifie dans le programme de
m'afficher les dates comme suit:
DTPicker1.CustomFormat = "MMMM yyy"
DTPicker2.CustomFormat = "MMMM yyy"
de sorte que l'utilisateur ne sache que séléctionner le mois et l'années...
Malheureusement il m'utilise toujours les dates par défaut remplies dans
'custom' du DTPicker1 et 2.
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le '1'
pour le 'start date' dans 'value' mais ca se complique dans le 'end date' ou
j'ai mis la valeur '31' de sorte que si je selectione juin ben il laisse le
champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme pour
février, si je met 30 c'est les mois de 31 jour qui sont pas complet!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance

8 réponses

Avatar
LE TROLL
Bonjour,

Heu, je ne sais pas si ma réponse va t'aller, mais avec les dates je
crois qu'il est beaucoup mieux de les programmer, si c'est sur une courte
période, on peut même les programmer en dur, par exemple sur 10 ans ça
ferait une liste de 3653 env, c'est rien à lire, ça va très vite, en plus en
10 ans on aura au maximum 3 férvier à 29, donc ont peut aussi les rentrer en
dur sans problème, par exemple "qui est à adapter" (je fais de tête à main
levée, si ça coince, me le dire) :
sub load()
dim ladate as date
dim dateStop as date
dim dateBase as date
dim i as long
ladate="31/12/2008"
datebase = ladate + 1
dateStop = "31/12/2019"
combo1.clear
combo2.clear
for i = 1 to 3700
ladate=ladate + 1
if ladate > dataStop then exit for
combo1.additem ladate
combo2.additem ldate
next i
dateStop = day(date) & "/" & month(date) & "/" & year(date)
for i = (dateStop - dateBase) to combo1.listcount - 1
if combo1.list(i) = dateStop then
combo1.listindex = i
combo2.listindex = i + ?
exit for
en dif
next i
end sub

***************************

exemple vérif de la date :

dim okDate as byte ' global

sub verifDate()
okDate = 1
dim ladate as date
on error goto erreur
ladate = cDate(la_date_saisie)
exit sub
erreur:
on reeor resume next
okdate = 0
msgbox "Date invalide, saisi au format ""JJ/MM/AAAA", emédier... ",
vbexclamation
end sub

******************************

Pour ton calendrier, le n°2, en disant que le format est jj/mm/aaaa

sub bonneDate()
dim jour as long
dim mois as long
dim an as long
dim reste as double
an = val(mid(DTPicker1.value, 7, 4))
select case val(mid(DTPicker1.value, 4, 2))
case 1
mois = 2
jour = 28
if reste = an mod 4 = 0 then jour = 29
case 2
mois = 3
jour = 31
case 3, 5, 7, 8, 10
jour = 30
mois = val(mid(DTPicker1.value, 4, 2)) + 1
case 4, 6, 9, 11
jour = 31
mois = val(mid(DTPicker1.value, 4, 2)) + 1
case 12
jour = 31
mois = 1
an = an + 1
end select
DTPicker2.value = jour & "/" & mois & "/" & an
end sub


--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"michael" a écrit dans le message de
news:
Bonjour,
j'ai un problème de format de date, j'explique mon problème: je doit
rentrer
une date de départ 'start date' et de fin 'end date'. Seulement dans un
cas
je dois spécifié le 'jour-mois-année' mais dans d'autre cas je ne doit
spécifier que 'mois-année' en fonction de ce que je choisi préalablement
dans
le menu.
Si je choisi la deuxième solution je spécifie dans le programme de
m'afficher les dates comme suit:
DTPicker1.CustomFormat = "MMMM yyy"
DTPicker2.CustomFormat = "MMMM yyy"
de sorte que l'utilisateur ne sache que séléctionner le mois et
l'années...
Malheureusement il m'utilise toujours les dates par défaut remplies dans
'custom' du DTPicker1 et 2.
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le
'1'
pour le 'start date' dans 'value' mais ca se complique dans le 'end date'
ou
j'ai mis la valeur '31' de sorte que si je selectione juin ben il laisse
le
champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme
pour
février, si je met 30 c'est les mois de 31 jour qui sont pas complet!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance



Avatar
michael
Bon je vais tester çà, j'ai fait un truc mais c'est franchement tiré par le
cheveux...
merci

"LE TROLL" wrote:

Bonjour,

Heu, je ne sais pas si ma réponse va t'aller, mais avec les dates je
crois qu'il est beaucoup mieux de les programmer, si c'est sur une courte
période, on peut même les programmer en dur, par exemple sur 10 ans ça
ferait une liste de 3653 env, c'est rien à lire, ça va très vite, en plus en
10 ans on aura au maximum 3 férvier à 29, donc ont peut aussi les rentrer en
dur sans problème, par exemple "qui est à adapter" (je fais de tête à main
levée, si ça coince, me le dire) :
sub load()
dim ladate as date
dim dateStop as date
dim dateBase as date
dim i as long
ladate="31/12/2008"
datebase = ladate + 1
dateStop = "31/12/2019"
combo1.clear
combo2.clear
for i = 1 to 3700
ladate=ladate + 1
if ladate > dataStop then exit for
combo1.additem ladate
combo2.additem ldate
next i
dateStop = day(date) & "/" & month(date) & "/" & year(date)
for i = (dateStop - dateBase) to combo1.listcount - 1
if combo1.list(i) = dateStop then
combo1.listindex = i
combo2.listindex = i + ?
exit for
en dif
next i
end sub

***************************

exemple vérif de la date :

dim okDate as byte ' global

sub verifDate()
okDate = 1
dim ladate as date
on error goto erreur
ladate = cDate(la_date_saisie)
exit sub
erreur:
on reeor resume next
okdate = 0
msgbox "Date invalide, saisi au format ""JJ/MM/AAAA", emédier... ",
vbexclamation
end sub

******************************

Pour ton calendrier, le n°2, en disant que le format est jj/mm/aaaa

sub bonneDate()
dim jour as long
dim mois as long
dim an as long
dim reste as double
an = val(mid(DTPicker1.value, 7, 4))
select case val(mid(DTPicker1.value, 4, 2))
case 1
mois = 2
jour = 28
if reste = an mod 4 = 0 then jour = 29
case 2
mois = 3
jour = 31
case 3, 5, 7, 8, 10
jour = 30
mois = val(mid(DTPicker1.value, 4, 2)) + 1
case 4, 6, 9, 11
jour = 31
mois = val(mid(DTPicker1.value, 4, 2)) + 1
case 12
jour = 31
mois = 1
an = an + 1
end select
DTPicker2.value = jour & "/" & mois & "/" & an
end sub


--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"michael" a écrit dans le message de
news:
> Bonjour,
> j'ai un problème de format de date, j'explique mon problème: je doit
> rentrer
> une date de départ 'start date' et de fin 'end date'. Seulement dans un
> cas
> je dois spécifié le 'jour-mois-année' mais dans d'autre cas je ne doit
> spécifier que 'mois-année' en fonction de ce que je choisi préalablement
> dans
> le menu.
> Si je choisi la deuxième solution je spécifie dans le programme de
> m'afficher les dates comme suit:
> DTPicker1.CustomFormat = "MMMM yyy"
> DTPicker2.CustomFormat = "MMMM yyy"
> de sorte que l'utilisateur ne sache que séléctionner le mois et
> l'années...
> Malheureusement il m'utilise toujours les dates par défaut remplies dans
> 'custom' du DTPicker1 et 2.
> Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le
> '1'
> pour le 'start date' dans 'value' mais ca se complique dans le 'end date'
> ou
> j'ai mis la valeur '31' de sorte que si je selectione juin ben il laisse
> le
> champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme
> pour
> février, si je met 30 c'est les mois de 31 jour qui sont pas complet!!
> Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
> problème qui me bloque...
> merci d'avance
>



Avatar
Driss HANIB
Salut Michael,

Voilà Une petite chose que tu peux faire
Soit MoisCour le mois que tu as extrait de DTPicker2 (de type long)
Soit AnnéeCour l'année.. (de type long)
Soit DernierJourMois de format date
Tu peux Faire quelque chose de la sorte..

Select case MoisCours
Case 1,3,5,7,8,10,12
DernierJour1
case 4,6,9,11
DernierJour = 30
case 2
DernierJourMois = DateAdd("d", -1, CDate("01/" & CStr(moiscour + 1)
& "/" & CStr(annéecour)))
DernierJour = clng(format$(DernierJourMois,"dd"))
End select

"michael" a écrit dans le message de
news:
Bonjour,
j'ai un problème de format de date, j'explique mon problème: je doit
rentrer
une date de départ 'start date' et de fin 'end date'. Seulement dans un
cas
je dois spécifié le 'jour-mois-année' mais dans d'autre cas je ne doit
spécifier que 'mois-année' en fonction de ce que je choisi préalablement
dans
le menu.
Si je choisi la deuxième solution je spécifie dans le programme de
m'afficher les dates comme suit:
DTPicker1.CustomFormat = "MMMM yyy"
DTPicker2.CustomFormat = "MMMM yyy"
de sorte que l'utilisateur ne sache que séléctionner le mois et
l'années...
Malheureusement il m'utilise toujours les dates par défaut remplies dans
'custom' du DTPicker1 et 2.
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le
'1'
pour le 'start date' dans 'value' mais ca se complique dans le 'end date'
ou
j'ai mis la valeur '31' de sorte que si je selectione juin ben il laisse
le
champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme
pour
février, si je met 30 c'est les mois de 31 jour qui sont pas complet!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance



Avatar
Gloops
Bonjour,

Je suis surpris de la question.
Si il s'agit de sélectionner un mois, à quoi bon s'embêter avec le
DateTimePicker ? Ce n'est pas fait pour : le DateTimePicker, comme son
nom l'indique, sert à sélectionner une date (et étymologiq uement une
heure, en fait ça il faut l'implémenter à part).

Quand on saisit une date de validité de carte bleue sur le site d'un e
banque, on le fait à l'aide de deux listes déroulantes, une pou r l'année
et une pour le mois. ça ne m'a jamais choqué, ne serait-ce pas approprié ?

Autrement ce qu'il m'est arrivé de faire aussi, c'est de laisser
sélectionner une date quelconque dans le mois souhaité, en ayan t prévenu
l'utilisateur que de toute manière à la sortie je prends le pre mier jour
du mois en question. J'avais fait ça sous Access avec le contrô le
calendrier, mais enfin le principe est le même.
______________________________________
michael a écrit, le 04/08/2009 14:21 :
Bonjour,
j'ai un problème de format de date, j'explique mon problème: je doit rentrer
une date de départ 'start date' et de fin 'end date'. Seulement da ns un cas
je dois spécifié le 'jour-mois-année' mais dans d'autre cas je ne doit
spécifier que 'mois-année' en fonction de ce que je choisi pr éalablement dans
le menu.
Si je choisi la deuxième solution je spécifie dans le program me de
m'afficher les dates comme suit:
DTPicker1.CustomFormat = "MMMM yyy"
DTPicker2.CustomFormat = "MMMM yyy"
de sorte que l'utilisateur ne sache que séléctionner le mois et l'années...
Malheureusement il m'utilise toujours les dates par défaut remplie s dans
'custom' du DTPicker1 et 2.
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le '1'
pour le 'start date' dans 'value' mais ca se complique dans le 'end dat e' ou
j'ai mis la valeur '31' de sorte que si je selectione juin ben il laiss e le
champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme pour
février, si je met 30 c'est les mois de 31 jour qui sont pas compl et!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance



Avatar
Gloops
Re,

Ah, quelquefois il y a des trucs qu'on croit évidents, et qui finale ment
ne le sont pas forcément tant que ça.

C'est ça que tu cherches ?

http://www.vbforums.com/showthread.php?t(1303
______________________________________
michael a écrit, le 04/08/2009 14:21 :
Bonjour,
j'ai un problème de format de date, j'explique mon problème: je doit rentrer
une date de départ 'start date' et de fin 'end date'. Seulement da ns un cas
je dois spécifié le 'jour-mois-année' mais dans d'autre cas je ne doit
spécifier que 'mois-année' en fonction de ce que je choisi pr éalablement dans
le menu.
Si je choisi la deuxième solution je spécifie dans le program me de
m'afficher les dates comme suit:
DTPicker1.CustomFormat = "MMMM yyy"
DTPicker2.CustomFormat = "MMMM yyy"
de sorte que l'utilisateur ne sache que séléctionner le mois et l'années...
Malheureusement il m'utilise toujours les dates par défaut remplie s dans
'custom' du DTPicker1 et 2.
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le '1'
pour le 'start date' dans 'value' mais ca se complique dans le 'end dat e' ou
j'ai mis la valeur '31' de sorte que si je selectione juin ben il laiss e le
champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme pour
février, si je met 30 c'est les mois de 31 jour qui sont pas compl et!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance



Avatar
Driss HANIB
Salut Gloops

je ne sais pas si michael est toujours là mais je pense que son problème
était surtout de déterminer le dernier jour du mois ..
Mais en "bricolant" la réponse située au lien que tu as donné il pourra la
trouver plus rapidement que ma réponse (surtout moins de lignes)

Driss


"Gloops" a écrit dans le message de news:

Re,

Ah, quelquefois il y a des trucs qu'on croit évidents, et qui finalement
ne le sont pas forcément tant que ça.

C'est ça que tu cherches ?

http://www.vbforums.com/showthread.php?t(1303
______________________________________
michael a écrit, le 04/08/2009 14:21 :
Bonjour, j'ai un problème de format de date, j'explique mon problème: je
doit rentrer une date de départ 'start date' et de fin 'end date'.
Seulement dans un cas je dois spécifié le 'jour-mois-année' mais dans
d'autre cas je ne doit spécifier que 'mois-année' en fonction de ce que je
choisi préalablement dans le menu.
Si je choisi la deuxième solution je spécifie dans le programme de
m'afficher les dates comme suit:
DTPicker1.CustomFormat = "MMMM yyy"
DTPicker2.CustomFormat = "MMMM yyy"
de sorte que l'utilisateur ne sache que séléctionner le mois et
l'années...
Malheureusement il m'utilise toujours les dates par défaut remplies dans
'custom' du DTPicker1 et 2.
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le
'1' pour le 'start date' dans 'value' mais ca se complique dans le 'end
date' ou j'ai mis la valeur '31' de sorte que si je selectione juin ben il
laisse le champ du mois blanc puisque le 31 juin n'existe pas... pareil
probleme pour février, si je met 30 c'est les mois de 31 jour qui sont pas
complet!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance



Avatar
Gloops
Driss HANIB a écrit, le 19/08/2009 09:09 :
Salut Gloops

je ne sais pas si michael est toujours là mais je pense que son probl ème
était surtout de déterminer le dernier jour du mois ..
Mais en "bricolant" la réponse située au lien que tu as donné il pourra la
trouver plus rapidement que ma réponse (surtout moins de lignes)




Bonjour,

En effet, dernier jour du mois, c'est une question qui a fait causer sur
le forum Access, il y a un moment de ça.

Une idée qui vient assez vite à l'esprit est de prendre le 20 du mois
par SerialDate, ajouter 20 pour se retrouver dans le mois suivant, et
puis prendre le premier du mois obtenu, ensuite en retranchant un on
obtient le dernier jour du mois de départ.

Après on se rend compte qu'il y a bien plus simple. Le jour 0 du mois
suivant, par exemple, c'est le dernier jour du mois en cours.
SerialDate(0, moissuivant, anneedumoissuivant)

Une fausse bonne idée pour obtenir le mois suivant est de simplement
ajouter 1 au numéro du mois, car de 12 on passe à 13. Si la fonction qui
reçoit les arguments corrige le tir, tout va bien, mais ce n'est pas
nécessairement le cas dans toutes les versions. Alors sinon si on veut
partir de la décomposition de la date en jour, mois, année, il faut
penser à distinguer le cas (mois = 12), où on fait passer le mois à 1 et
on ajoute 1 à l'année.


Dans le fil que j'indiquais on mentionne la fonction DateSerial, et
effectivement pour avoir le premier jour c'est immédiat. Pour le dernie r ...

Je crois aussi que dans certaines versions il y a une fonction pour
directement avoir le dernier jour du mois, alors là évidemment ça p ermet
de mettre les neurones au repos :)

Bon, avec tout ça j'imagine qu'il doit y avoir de quoi s'en sortir. Dan s
les archives du newsgroup Access il doit même traîner quelque part un e
fonction toute prête j'imagine.
Avatar
Gloops
michael a écrit, le 04/08/2009 14:21 :
Donc si c'est le 5 du mois il calcule de à partir du 5, j'ai bien mis le '1'
pour le 'start date' dans 'value' mais ca se complique dans le 'end dat e' ou
j'ai mis la valeur '31' de sorte que si je selectione juin ben il laiss e le
champ du mois blanc puisque le 31 juin n'existe pas... pareil probleme pour
février, si je met 30 c'est les mois de 31 jour qui sont pas compl et!!
Je ne sais pas si c'est assez clair, mais si quelqu'un peux m'aider sur ce
problème qui me bloque...
merci d'avance




Si il s'agit de vérifier si une date est dans le mois sélection né, on
peut prendre le problème par un autre bout, en extraire le mois par la
fonction Month et l'année par la fonction Year, et vérifier que les
valeurs obtenues sont les mêmes. Auquel cas, finalement, le dernier jour
du mois, on peut le laisser aux éditeurs d'almanachs :)