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

3 réponses

1 2
Avatar
Anor
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/--------------------------------------------------
Avatar
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.

http://support.microsoft.com/default.aspx?scid=kb;fr;200299

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


.



Avatar
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

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)

---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/-----------------
---------------------------------



.



1 2