OVH Cloud OVH Cloud

Calendrier

13 réponses
Avatar
Luis
Bonjour,
Sur la base du code 'Cr=E9er une table contenant un=20
calendrier' trouv=E9 dans Biblioth=E8que de Programmes de=20
stucki que j'ai modifi=E9 pour avoir les num=E9ros de semaines=20
j'ai cr=E9=E9 une table calendrier de plusieurs ann=E9es.
Mais j'ai un probl=E8me justement avec la num=E9rotation des=20
semaines qui commencent l'ann=E9e toujours par semaine no 1=20
et la finissent toujours par semaine no 53, sans tenir=20
compte si l'ann=E9e a 53 ou 52 semaines.
Par exemple la table me donne pour la fin de l'ann=E9e 2003,=20
le lundi 29, mardi 30 et mercredi 31 d=E9cembre semaine 53=20
et commence l'ann=E9e^2004 par jeudi 1 janvier semaine 1.
Au lieu de finir l'ann=E9e par lundi29 d=E9cembre 2003=3Dsemaine=20
1.
Ma question, vous l'avez d=E9j=E0 devin=E9: comment faire pour=20
que le nombres de semaines soit juste dans chaque ann=E9e.
Merci pour votre aide.
Luis

10 réponses

1 2
Avatar
Raymond [mvp]
Bonjour Luis.

il faut utiliser la fonction datePart dans laquelle tu as l'option
firstweekofyear qui peut prendre la valeur:
vbUseSystem 0 Utiliser l'argument NLS API.
vbFirstJan1 1 Commencer par la semaine du 1er janvier (valeur par
défaut).
vbFirstFourDays 2 Commencer par la première semaine comportant au moins
quatre jours dans l'année nouvelle.
vbFirstFullWeek 3 Commencer par la première semaine complète de l'année.

regarde a ussi les conversations sur le sujet:
http://groups.google.com/groups?hl=fr&lr=&ie=UTF-8&q=semaine+53&meta=group%3Dmicrosoft.public.fr.access

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de
news:1012f01c43f01$e47e82f0$
Bonjour,
Sur la base du code 'Créer une table contenant un
calendrier' trouvé dans Bibliothèque de Programmes de
stucki que j'ai modifié pour avoir les numéros de semaines
j'ai créé une table calendrier de plusieurs années.
Mais j'ai un problème justement avec la numérotation des
semaines qui commencent l'année toujours par semaine no 1
et la finissent toujours par semaine no 53, sans tenir
compte si l'année a 53 ou 52 semaines.
Par exemple la table me donne pour la fin de l'année 2003,
le lundi 29, mardi 30 et mercredi 31 décembre semaine 53
et commence l'année^2004 par jeudi 1 janvier semaine 1.
Au lieu de finir l'année par lundi29 décembre 2003=semaine
1.
Ma question, vous l'avez déjà deviné: comment faire pour
que le nombres de semaines soit juste dans chaque année.
Merci pour votre aide.
Luis
Avatar
Luis
Bonjour Raymond,
Je n'arrive pas à comprendre où ajouter la condition que
tu me donnes.
Je t'envoi deux bout de code que j'utilise.

With tbl
.Fields.Append .CreateField("RéfJour", dbLong)
.Fields.Append .CreateField("Mois", dbText, 9)
.Fields.Append .CreateField("NoJour", dbInteger)
.Fields.Append .CreateField("JourSem", dbText, 8)
.Fields.Append .CreateField("Date", dbDate)
.Fields.Append .CreateField("No Semaine", dbLong)


End With



For i = datedeb To datefin
rs.AddNew
rs.Fields("Mois") = StrConv(Mid(Format(i, "mmmm"), 1,
9), vbProperCase)
rs.Fields("NoJour") = Day(i)
rs.Fields("JourSem") = StrConv(Mid(Format(i, "dddd"),
1, 8), vbProperCase)
rs.Fields("No Semaine") = StrConv(Mid(Format(i, "ww"),
1, 8), vbProperCase)

rs.Update
Next i
DoCmd.OpenTable "tblCalendrier"
End Function
Merci de ton aide.
Luis
-----Message d'origine-----
Bonjour Luis.

il faut utiliser la fonction datePart dans laquelle tu as
l'option

firstweekofyear qui peut prendre la valeur:
vbUseSystem 0 Utiliser l'argument NLS API.
vbFirstJan1 1 Commencer par la semaine du 1er
janvier (valeur par

défaut).
vbFirstFourDays 2 Commencer par la première semaine
comportant au moins

quatre jours dans l'année nouvelle.
vbFirstFullWeek 3 Commencer par la première semaine
complète de l'année.


regarde a ussi les conversations sur le sujet:
http://groups.google.com/groups?hl=fr&lr=&ie=UTF-
8&q=semaine+53&meta=group%3Dmicrosoft.public.fr.access


--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans
le message de

news:1012f01c43f01$e47e82f0$
Bonjour,
Sur la base du code 'Créer une table contenant un
calendrier' trouvé dans Bibliothèque de Programmes de
stucki que j'ai modifié pour avoir les numéros de semaines
j'ai créé une table calendrier de plusieurs années.
Mais j'ai un problème justement avec la numérotation des
semaines qui commencent l'année toujours par semaine no 1
et la finissent toujours par semaine no 53, sans tenir
compte si l'année a 53 ou 52 semaines.
Par exemple la table me donne pour la fin de l'année 2003,
le lundi 29, mardi 30 et mercredi 31 décembre semaine 53
et commence l'année^2004 par jeudi 1 janvier semaine 1.
Au lieu de finir l'année par lundi29 décembre 2003=semaine
1.
Ma question, vous l'avez déjà deviné: comment faire pour
que le nombres de semaines soit juste dans chaque année.
Merci pour votre aide.
Luis



.



Avatar
Raymond [mvp]
essaie de remplacer:

Format(i, "ww") par DatePart("ww",i ,vbMonday ,vbFirstFullWeek)
dans
rs.Fields("No Semaine") = StrConv(Mid(Format(i, "ww"), 1, 8),
vbProperCase)

je ne comprend pas trop ton Mid sur un n° de semaine.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de
news:1018301c43f09$398f3a80$
Bonjour Raymond,
Je n'arrive pas à comprendre où ajouter la condition que
tu me donnes.
Je t'envoi deux bout de code que j'utilise.

With tbl
.Fields.Append .CreateField("RéfJour", dbLong)
.Fields.Append .CreateField("Mois", dbText, 9)
.Fields.Append .CreateField("NoJour", dbInteger)
.Fields.Append .CreateField("JourSem", dbText, 8)
.Fields.Append .CreateField("Date", dbDate)
.Fields.Append .CreateField("No Semaine", dbLong)


End With



For i = datedeb To datefin
rs.AddNew
rs.Fields("Mois") = StrConv(Mid(Format(i, "mmmm"), 1,
9), vbProperCase)
rs.Fields("NoJour") = Day(i)
rs.Fields("JourSem") = StrConv(Mid(Format(i, "dddd"),
1, 8), vbProperCase)
rs.Fields("No Semaine") = StrConv(Mid(Format(i, "ww"),
1, 8), vbProperCase)

rs.Update
Next i
DoCmd.OpenTable "tblCalendrier"
End Function
Merci de ton aide.
Luis
Avatar
Luis
Bonjour Raymond,
Avec:
rs.Fields("No Semaine") = StrConv(Mid(Format(DatePart
("ww", i, vbMonday, vbFirstFullWeek)), 1, 8), vbProperCase)
J'ai la semaine No 1 qui commence le lundi 5 janvier.
Il doit manquer quelque chose.
Luis
-----Message d'origine-----
essaie de remplacer:

Format(i, "ww") par DatePart
("ww",i ,vbMonday ,vbFirstFullWeek)

dans
rs.Fields("No Semaine") = StrConv(Mid(Format(i, "ww"),
1, 8),

vbProperCase)

je ne comprend pas trop ton Mid sur un n° de semaine.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans
le message de

news:1018301c43f09$398f3a80$
Bonjour Raymond,
Je n'arrive pas à comprendre où ajouter la condition que
tu me donnes.
Je t'envoi deux bout de code que j'utilise.

With tbl
.Fields.Append .CreateField("RéfJour", dbLong)
.Fields.Append .CreateField("Mois", dbText, 9)
.Fields.Append .CreateField("NoJour", dbInteger)
.Fields.Append .CreateField("JourSem", dbText, 8)
.Fields.Append .CreateField("Date", dbDate)
.Fields.Append .CreateField("No Semaine", dbLong)


End With



For i = datedeb To datefin
rs.AddNew
rs.Fields("Mois") = StrConv(Mid(Format(i, "mmmm"), 1,
9), vbProperCase)
rs.Fields("NoJour") = Day(i)
rs.Fields("JourSem") = StrConv(Mid(Format(i, "dddd"),
1, 8), vbProperCase)
rs.Fields("No Semaine") = StrConv(Mid(Format(i, "ww"),
1, 8), vbProperCase)

rs.Update
Next i
DoCmd.OpenTable "tblCalendrier"
End Function
Merci de ton aide.
Luis


.



Avatar
Raymond [mvp]
Non, car avec vbFirstFullWeek il faut 4 jours minimum dans la semaine, donc
la 1ere semaine répondant au critère est le 5 janvier, les jours précédents
étant de la semaine de l'année précédente.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de
news:101c101c43f14$b49fbdc0$
Bonjour Raymond,
Avec:
rs.Fields("No Semaine") = StrConv(Mid(Format(DatePart
("ww", i, vbMonday, vbFirstFullWeek)), 1, 8), vbProperCase)
J'ai la semaine No 1 qui commence le lundi 5 janvier.
Il doit manquer quelque chose.
Luis
Avatar
Luis
Bonjour Raymond,
Je n'arrive pas à faire en sorte que la semaine commence
ou finisse avec le bon chiffre.
J'ai même essayé le code donné dans Memoaccess 'Calcul du
numéro de Semaine / Année de référence'
Mais là non plus dans ce cas j'ai le dimanche 28 en
semaine 52, le lundi 29 décembre 2003 en semaine 53 et le
mardi 30 2003 en semaine 1.
Si tu as d'autres idées.
Merci et heureusement qu'il y a des gens actifs sur le
news.
Luis
-----Message d'origine-----
Non, car avec vbFirstFullWeek il faut 4 jours minimum
dans la semaine, donc

la 1ere semaine répondant au critère est le 5 janvier,
les jours précédents

étant de la semaine de l'année précédente.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans
le message de

news:101c101c43f14$b49fbdc0$
Bonjour Raymond,
Avec:
rs.Fields("No Semaine") = StrConv(Mid(Format(DatePart
("ww", i, vbMonday, vbFirstFullWeek)), 1, 8),
vbProperCase)

J'ai la semaine No 1 qui commence le lundi 5 janvier.
Il doit manquer quelque chose.
Luis


.



Avatar
Raymond [mvp]
Si ça ne fonctionne pas avec la méthode Arnaud, ça ne fonctionnera jamais.
c'est le pape du calendrier.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans le message de
news:102d101c43f31$134394c0$
Bonjour Raymond,
Je n'arrive pas à faire en sorte que la semaine commence
ou finisse avec le bon chiffre.
J'ai même essayé le code donné dans Memoaccess 'Calcul du
numéro de Semaine / Année de référence'
Mais là non plus dans ce cas j'ai le dimanche 28 en
semaine 52, le lundi 29 décembre 2003 en semaine 53 et le
mardi 30 2003 en semaine 1.
Si tu as d'autres idées.
Merci et heureusement qu'il y a des gens actifs sur le
news.
Luis
Avatar
Luis
Bonjour,
Bon ben ça veut dire qu'avec Access il n'y a pas moyen de
numéroter les semaines de façon juste.
Quelle déception!!!
Je te remercie tout de même.
Luis
-----Message d'origine-----
Si ça ne fonctionne pas avec la méthode Arnaud, ça ne
fonctionnera jamais.

c'est le pape du calendrier.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Luis" a écrit dans
le message de

news:102d101c43f31$134394c0$
Bonjour Raymond,
Je n'arrive pas à faire en sorte que la semaine commence
ou finisse avec le bon chiffre.
J'ai même essayé le code donné dans Memoaccess 'Calcul du
numéro de Semaine / Année de référence'
Mais là non plus dans ce cas j'ai le dimanche 28 en
semaine 52, le lundi 29 décembre 2003 en semaine 53 et le
mardi 30 2003 en semaine 1.
Si tu as d'autres idées.
Merci et heureusement qu'il y a des gens actifs sur le
news.
Luis


.



Avatar
Luis
Bonjour,
Dans mon agenda, le 31 décembre 2003 et le 1er janvier
2004 sont dans la même semaine, c'est-à dire le Semaine No
1.
D'ailleurs c'est logique puisque le 31 est un mercredi et
que le 1er est le jeudi et comme les semaines ne sont pas
coupées.
Merci pour la remarque.
Luis
-----Message d'origine-----
Bonjour,
J'utilise les semaines de calendrier avec Access sans
aucun problème.

Va voir dans ton agenda les numeros de semaine, le
31/12/2003 est dans la 53e, et le 01/01/2004 est la 1e

tout en étant dans la même semaine (Cela dépend
uniquement de l'année que tu choisis).
.



Avatar
David Berthemet
Bonsoir,

Ayant eu le même problème fin d'année 2003, j'ai cherché mais je n'ai jamais
trouvé de solution miracle. Le problème ne semble survenir que si l'on se
trouve avec une semaine 53 dans l'année.J'ai donc créé une petite fonction
vérifiant si le numéro de semaine est correcte et le corrigeant si ce n'est
pas le cas. La voici donc.

Function VerificationSemaine53(DateDuJour As Date)
'Cette fonction a pour but de bien vérifier que la semaine renvoyée
' par la fonction FORMAT(Me.Date, "ww", vbMonday, vbFirstFourDays)
' est conforme à la norme européenne qui indique que la semaine 1
' est la première semaine de l'année qui comporte au moins 4 jours,
' ce qui implique qu'elle commence au plus tard un JEUDI. Cette
' fonction va donc vérifier que si la fonction FORMAT renvoie comme
' numéro de semaine 53, c'est que la semaine de décembre comporte
' bien strictement moins de 4 jours

Dim JourDeLaSemaine As String, NumeroDeLaSemaine As Byte,
JourDeLaSemainePremierJanvierSuivant As String
Dim EcartAvecPremierJanvier As Byte

NumeroDeLaSemaine = Format(DateDuJour, "ww", vbMonday, vbFirstFourDays)
JourDeLaSemaine = Format(DateDuJour, "dddd", vbMonday, vbFirstFourDays)
JourDeLaSemainePremierJanvierSuivant = Format(CDate("01/01/" &
(Format(DateDuJour, "yyyy") + 1)), "dddd", vbMonday, vbFirstFourDays)

If NumeroDeLaSemaine = 53 Then
EcartAvecPremierJanvier = DateDiff("d", DateDuJour, CDate("01/01/" &
(Format(DateDuJour, "yyyy") + 1)))
If EcartAvecPremierJanvier < 7 Then
Select Case JourDeLaSemainePremierJanvierSuivant
Case "lundi", "mardi", "mercredi", "jeudi"
VerificationSemaine53 = 1
Case "vendredi", "samedi", "dimanche"
VerificationSemaine53 = NumeroDeLaSemaine
End Select
End If
Else
VerificationSemaine53 = NumeroDeLaSemaine
End If
End Function

Espérant avoir aidé,


--
David Berthemet -
Enlever l'oiseau pour me contacter !!!

"On ne peut le nier, j'ai le corps d'un dieu.
Un bouddha, peut-être, mais un dieu quand même."
1 2