Soyez le premier à donner votre avis sur cette source.
Snippet vu 7 008 fois - Téléchargée 29 fois
Function DateLundi(Sem As Integer, Annee As Integer) As Date 'Retrouve la date suivant une semaine demandée Dim X As Integer 'Trouve la position du lundi de la premiere semaine de l'année 'ensuite on le soustrait avec le nb de semaine converti en jour X = (Sem * 7) - (Weekday("01/01/" & Annee, vbMonday) + 6) 'Decale le premier jour de l'annee avec la valeur qu'on a trouvé DateLundi = DateAdd("d", X, "01/01/" & Annee) End Function
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 !!!
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 !
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 ;)
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).
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.