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
David Berthemet wrote: | 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.
je n'ai pas lu toute la conversation, mais par rapport à ce que j'ai cité au dessus, je propose 2 solutions miracles :
---1--- 'Adaptation de la formule de Laurent Longre 'd'après http://disciplus.simplex.free.fr/xl/calendriers.htm#numerosemaine WeekISO = Int((LaDate - (DateSerial(Year(LaDate - _ Weekday(LaDate - 1) + 4), 1, 3) - _ Weekday(DateSerial(Year(LaDate - _ Weekday(LaDate - 1) + 4), 1, 3))) + 5) / 7)
---2--- Function fWeek(MyDate As Date) As String
Dim NoSemaine As Integer Dim NoAnnee As Integer
If Not IsDate(MyDate) Then fWeek = "" Else NoSemaine = Format(MyDate, "ww", vbMonday, vbFirstFourDays) If NoSemaine = 53 Then ' Correction Bug Oleaut32.dll (29/12/2003 par exemple) ' http://support.microsoft.com/default.aspx?scid=kb;FR;q200299 If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then NoSemaine = 1 End If End If
Select Case NoSemaine 'Affecter la semaine 1 de fin d'année 'au début de l'année suivante Case 1 If Month(MyDate) = 12 Then NoAnnee = Year(MyDate) + 1 Else NoAnnee = Year(MyDate) End If
Case Is < 52 NoAnnee = Year(MyDate)
'Affecter la semaine 52 ou 53 de début d'année 'à la fin d'année précédente Case Is >= 52 If Month(MyDate) = 1 Then NoAnnee = Year(MyDate) - 1 Else NoAnnee = Year(MyDate) End If End Select
fWeek = NoAnnee & "/" & Format(NoSemaine, "00")
End If
End Function Espérant avoir aidé-- à+Arnaud--------------------------------------------------Conseils d'utilisation : http://users.skynet.be/mpfa/ Site Perso : http://memoaccess.free.fr /Réponses souhaitées sur ce forum, merci/--------------------------------------------------
Bonjour,
David Berthemet wrote:
| 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.
je n'ai pas lu toute la conversation, mais par rapport à ce que j'ai cité au dessus,
je propose 2 solutions miracles :
---1---
'Adaptation de la formule de Laurent Longre
'd'après http://disciplus.simplex.free.fr/xl/calendriers.htm#numerosemaine
WeekISO = Int((LaDate - (DateSerial(Year(LaDate - _
Weekday(LaDate - 1) + 4), 1, 3) - _
Weekday(DateSerial(Year(LaDate - _
Weekday(LaDate - 1) + 4), 1, 3))) + 5) / 7)
---2---
Function fWeek(MyDate As Date) As String
Dim NoSemaine As Integer
Dim NoAnnee As Integer
If Not IsDate(MyDate) Then
fWeek = ""
Else
NoSemaine = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If NoSemaine = 53 Then
' Correction Bug Oleaut32.dll (29/12/2003 par exemple)
' http://support.microsoft.com/default.aspx?scid=kb;FR;q200299
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
NoSemaine = 1
End If
End If
Select Case NoSemaine
'Affecter la semaine 1 de fin d'année
'au début de l'année suivante
Case 1
If Month(MyDate) = 12 Then
NoAnnee = Year(MyDate) + 1
Else
NoAnnee = Year(MyDate)
End If
Case Is < 52
NoAnnee = Year(MyDate)
'Affecter la semaine 52 ou 53 de début d'année
'à la fin d'année précédente
Case Is >= 52
If Month(MyDate) = 1 Then
NoAnnee = Year(MyDate) - 1
Else
NoAnnee = Year(MyDate)
End If
End Select
fWeek = NoAnnee & "/" & Format(NoSemaine, "00")
End If
End Function
Espérant avoir aidé-- à+Arnaud--------------------------------------------------Conseils
d'utilisation : http://users.skynet.be/mpfa/ Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/--------------------------------------------------
David Berthemet wrote: | 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.
je n'ai pas lu toute la conversation, mais par rapport à ce que j'ai cité au dessus, je propose 2 solutions miracles :
---1--- 'Adaptation de la formule de Laurent Longre 'd'après http://disciplus.simplex.free.fr/xl/calendriers.htm#numerosemaine WeekISO = Int((LaDate - (DateSerial(Year(LaDate - _ Weekday(LaDate - 1) + 4), 1, 3) - _ Weekday(DateSerial(Year(LaDate - _ Weekday(LaDate - 1) + 4), 1, 3))) + 5) / 7)
---2--- Function fWeek(MyDate As Date) As String
Dim NoSemaine As Integer Dim NoAnnee As Integer
If Not IsDate(MyDate) Then fWeek = "" Else NoSemaine = Format(MyDate, "ww", vbMonday, vbFirstFourDays) If NoSemaine = 53 Then ' Correction Bug Oleaut32.dll (29/12/2003 par exemple) ' http://support.microsoft.com/default.aspx?scid=kb;FR;q200299 If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then NoSemaine = 1 End If End If
Select Case NoSemaine 'Affecter la semaine 1 de fin d'année 'au début de l'année suivante Case 1 If Month(MyDate) = 12 Then NoAnnee = Year(MyDate) + 1 Else NoAnnee = Year(MyDate) End If
Case Is < 52 NoAnnee = Year(MyDate)
'Affecter la semaine 52 ou 53 de début d'année 'à la fin d'année précédente Case Is >= 52 If Month(MyDate) = 1 Then NoAnnee = Year(MyDate) - 1 Else NoAnnee = Year(MyDate) End If End Select
fWeek = NoAnnee & "/" & Format(NoSemaine, "00")
End If
End Function Espérant avoir aidé-- à+Arnaud--------------------------------------------------Conseils d'utilisation : http://users.skynet.be/mpfa/ Site Perso : http://memoaccess.free.fr /Réponses souhaitées sur ce forum, merci/--------------------------------------------------
michdenis
Bonjour Luis,
Ce "bug" de la fonction format() et datepart() est bien connu et est documenté quant à la possibilité d'obtenir un numéro de semaine erroné.
Va voir à cette adresse pour plus d'explication ... c'est de là qu'émane cette fonction.
Et ceci : '---------------------- Function WOY(MyDate As Date) As Integer ' Semaine de l'année WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays) If WOY > 52 Then If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1 End If End Function '----------------------
Salutations!
"Luis" a écrit dans le message de news:103f001c43f3c$9eceff10$ 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
.
Bonjour Luis,
Ce "bug" de la fonction format() et datepart() est bien connu et est documenté quant à la possibilité d'obtenir un
numéro de semaine erroné.
Va voir à cette adresse pour plus d'explication ... c'est de là qu'émane cette fonction.
Et ceci :
'----------------------
Function WOY(MyDate As Date) As Integer ' Semaine de l'année
WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
If WOY > 52 Then
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1
End If
End Function
'----------------------
Salutations!
"Luis" <anonymous@discussions.microsoft.com> a écrit dans le message de news:103f001c43f3c$9eceff10$a501280a@phx.gbl...
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" <anonymous@discussions.microsoft.com> a écrit dans
le message de
news:102d101c43f31$134394c0$a001280a@phx.gbl...
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
Et ceci : '---------------------- Function WOY(MyDate As Date) As Integer ' Semaine de l'année WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays) If WOY > 52 Then If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1 End If End Function '----------------------
Salutations!
"Luis" a écrit dans le message de news:103f001c43f3c$9eceff10$ 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
.
Luis
Bonjour, Et Merci à tous le méthode qui marche chez moi, c'est: 'Adaptation de la formule de Laurent Longre 'd'après http://disciplus.simplex.free.fr/xl/calendriers.htm#numeros emaine WeekISO = Int((LaDate - (DateSerial(Year(LaDate - _ Weekday(LaDate - 1) + 4), 1, 3) - _ Weekday(DateSerial(Year(LaDate - _ Weekday(LaDate - 1) + 4), 1, 3))) + 5) / 7)
Luis
-----Message d'origine----- Bonjour,
David Berthemet wrote: | 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.
je n'ai pas lu toute la conversation, mais par rapport à ce que j'ai cité au dessus,
je propose 2 solutions miracles :
---1--- 'Adaptation de la formule de Laurent Longre 'd'après http://disciplus.simplex.free.fr/xl/calendriers.htm#numeros
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
NoSemaine = 1 End If End If
Select Case NoSemaine 'Affecter la semaine 1 de fin d'année 'au début de l'année suivante Case 1 If Month(MyDate) = 12 Then NoAnnee = Year(MyDate) + 1 Else NoAnnee = Year(MyDate) End If
Case Is < 52 NoAnnee = Year(MyDate)
'Affecter la semaine 52 ou 53 de début d'année 'à la fin d'année précédente Case Is >= 52 If Month(MyDate) = 1 Then NoAnnee = Year(MyDate) - 1 Else NoAnnee = Year(MyDate) End If End Select
fWeek = NoAnnee & "/" & Format(NoSemaine, "00")
End If
End Function Espérant avoir aidé-- à+Arnaud---------------------------- ----------------------Conseils
d'utilisation : http://users.skynet.be/mpfa/ Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/----------------- ---------------------------------
.
Bonjour,
Et Merci à tous le méthode qui marche chez moi, c'est:
'Adaptation de la formule de Laurent Longre
'd'après
http://disciplus.simplex.free.fr/xl/calendriers.htm#numeros
emaine
WeekISO = Int((LaDate - (DateSerial(Year(LaDate - _
Weekday(LaDate - 1) + 4), 1, 3) - _
Weekday(DateSerial(Year(LaDate - _
Weekday(LaDate - 1) + 4), 1, 3))) + 5) / 7)
Luis
-----Message d'origine-----
Bonjour,
David Berthemet wrote:
| 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.
je n'ai pas lu toute la conversation, mais par rapport à
ce que j'ai cité au dessus,
je propose 2 solutions miracles :
---1---
'Adaptation de la formule de Laurent Longre
'd'après
http://disciplus.simplex.free.fr/xl/calendriers.htm#numeros
If Format(MyDate + 7, "ww", vbMonday,
vbFirstFourDays) = 2 Then
NoSemaine = 1
End If
End If
Select Case NoSemaine
'Affecter la semaine 1 de fin d'année
'au début de l'année suivante
Case 1
If Month(MyDate) = 12 Then
NoAnnee = Year(MyDate) + 1
Else
NoAnnee = Year(MyDate)
End If
Case Is < 52
NoAnnee = Year(MyDate)
'Affecter la semaine 52 ou 53 de début d'année
'à la fin d'année précédente
Case Is >= 52
If Month(MyDate) = 1 Then
NoAnnee = Year(MyDate) - 1
Else
NoAnnee = Year(MyDate)
End If
End Select
fWeek = NoAnnee & "/" & Format(NoSemaine, "00")
End If
End Function
Espérant avoir aidé-- à+Arnaud----------------------------
----------------------Conseils
d'utilisation : http://users.skynet.be/mpfa/ Site
Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/-----------------
---------------------------------
If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
NoSemaine = 1 End If End If
Select Case NoSemaine 'Affecter la semaine 1 de fin d'année 'au début de l'année suivante Case 1 If Month(MyDate) = 12 Then NoAnnee = Year(MyDate) + 1 Else NoAnnee = Year(MyDate) End If
Case Is < 52 NoAnnee = Year(MyDate)
'Affecter la semaine 52 ou 53 de début d'année 'à la fin d'année précédente Case Is >= 52 If Month(MyDate) = 1 Then NoAnnee = Year(MyDate) - 1 Else NoAnnee = Year(MyDate) End If End Select
fWeek = NoAnnee & "/" & Format(NoSemaine, "00")
End If
End Function Espérant avoir aidé-- à+Arnaud---------------------------- ----------------------Conseils
d'utilisation : http://users.skynet.be/mpfa/ Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/----------------- ---------------------------------