A la ligne :
X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6)
j'ai rajouté "-7"
elle devient :
X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6) + 7
Là cela marche pour 2005 et 2006 ...
(je suis sous XP) et sous VBA
Voilà sinon super le code j'ai moins eu à réfléchir !
nycos62
Messages postés11Date d'inscriptionvendredi 7 mars 2003StatutMembreDernière intervention30 juillet 2007 8 juil. 2004 à 15:10
je crois plutot qu'il n'y a pas de semaine 53 en 2004. c'est bel et bien le début de la semaine 1 de 2005.
une année = 52 semaines.
!!!! ta correction fausse les calculs dav78.
a part çà, la fonction DateLundi est super cool. et fonctionne sous VB.Net. merci IciDEDE ;)
cs_dav78
Messages postés25Date d'inscriptionmercredi 30 avril 2003StatutMembreDernière intervention25 juin 2004 17 juin 2004 à 11:48
Je propose cette modif:
TrouverNuméroSemaine est une fonction trouvé sur ce site, corrigeant le bug de la semaine 53 de l'an 2004. j'ai rajouté un test en fin de la fonction DateLundi.
Public Function TrouverNuméroSemaine(ByVal Dte As Date) As Integer
TrouverNuméroSemaine = Format(Dte, "ww", vbMonday, vbFirstFourDays)
If TrouverNuméroSemaine > 52 Then
If Format(Dte + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
TrouverNuméroSemaine = 1
End If
End If
End Function
Public Function DateLundi(ByVal Sem As Integer, ByVal Annee As Integer) As Date
Dim X As Integer
X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6)
DateLundi = DateAdd("d", X, "01/01/" & Annee)
If TrouverNuméroSemaine(DateLundi) <> Sem Then
'si bug a cause de la semaine 53
DateLundi = DateLundi + 7
End If
End Function
Il semblerait que ça fonctionne. (test de la semaine 1 de 2004 et 2005 OK).
cs_dav78
Messages postés25Date d'inscriptionmercredi 30 avril 2003StatutMembreDernière intervention25 juin 2004 17 juin 2004 à 11:37
j'ai l'impression que ça ne marche pas pour la premiere semaine de 2005:
il me met le lundi au 27/12/2004 alors que ça c'est la semaine 53 de 2004! Il y a peut etre un bug de la fonction weekday() ??
Pour la premiere semaine de 2004 par contre aucun probleme.
Dav
jawo2
Messages postés3Date d'inscriptionjeudi 27 mai 2004StatutMembreDernière intervention27 mai 2004 27 mai 2004 à 14:30
excellent c'est juste ce que je cherchais
jawo2
Messages postés3Date d'inscriptionjeudi 27 mai 2004StatutMembreDernière intervention27 mai 2004 27 mai 2004 à 14:30
excellent c'est juste ce que je cherchais
bleyniel
Messages postés3Date d'inscriptionmercredi 3 décembre 2003StatutMembreDernière intervention28 novembre 2007 23 avril 2004 à 16:44
Merci pour cette source, elle m'a vraiment aidé.
IciDEDE
Messages postés1Date d'inscriptionvendredi 7 mars 2003StatutMembreDernière intervention26 septembre 2003 26 sept. 2003 à 11:19
Merci du conseille et pour ta note :-)
Je remercie egalement un collegue de travail (Nicoulas) qui m'a guidé lors de ma recherche. ;-)
A++
cs_legion91
Messages postés216Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention15 décembre 2010 24 sept. 2003 à 17:04
Super marche pas sous XP lol non ne t'inquite pas la date est une fonction intégré à VB donc 100% compatible ;-)
5 oct. 2005 à 22:56
Me.date_select = Me.calendrier
Me.num_semaine = T.Semaine(Me.calendrier)
DATEDEPART = Me.calendrier
temp = DateAdd("d", -Weekday(DATEDEPART, vbMonday) + 1, DATEDEPART)
End Sub
ceci me semble plus simple !!!
27 sept. 2005 à 13:36
A la ligne :
X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6)
j'ai rajouté "-7"
elle devient :
X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6) + 7
Là cela marche pour 2005 et 2006 ...
(je suis sous XP) et sous VBA
Voilà sinon super le code j'ai moins eu à réfléchir !
8 juil. 2004 à 15:10
une année = 52 semaines.
!!!! ta correction fausse les calculs dav78.
a part çà, la fonction DateLundi est super cool. et fonctionne sous VB.Net. merci IciDEDE ;)
17 juin 2004 à 11:48
TrouverNuméroSemaine est une fonction trouvé sur ce site, corrigeant le bug de la semaine 53 de l'an 2004. j'ai rajouté un test en fin de la fonction DateLundi.
Public Function TrouverNuméroSemaine(ByVal Dte As Date) As Integer
TrouverNuméroSemaine = Format(Dte, "ww", vbMonday, vbFirstFourDays)
If TrouverNuméroSemaine > 52 Then
If Format(Dte + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then
TrouverNuméroSemaine = 1
End If
End If
End Function
Public Function DateLundi(ByVal Sem As Integer, ByVal Annee As Integer) As Date
Dim X As Integer
X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6)
DateLundi = DateAdd("d", X, "01/01/" & Annee)
If TrouverNuméroSemaine(DateLundi) <> Sem Then
'si bug a cause de la semaine 53
DateLundi = DateLundi + 7
End If
End Function
Il semblerait que ça fonctionne. (test de la semaine 1 de 2004 et 2005 OK).
17 juin 2004 à 11:37
il me met le lundi au 27/12/2004 alors que ça c'est la semaine 53 de 2004! Il y a peut etre un bug de la fonction weekday() ??
Pour la premiere semaine de 2004 par contre aucun probleme.
Dav
27 mai 2004 à 14:30
27 mai 2004 à 14:30
23 avril 2004 à 16:44
26 sept. 2003 à 11:19
Je remercie egalement un collegue de travail (Nicoulas) qui m'a guidé lors de ma recherche. ;-)
A++
24 sept. 2003 à 17:04