Trouve la date du lundi pour une semaine et une année données

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 844 fois - Téléchargée 29 fois

Contenu du snippet

Pour tous ceux qui galere pour trouver la date du Lundi pour une semaine et une année données. J'ai fait cette fonction car sur le net il n'y a pas grand chose sur le traitement des dates.
Cette fonction fonctionne sur Win 2000, je n'ai pas testé sur les autres OS. (Elle peut etre appliqué dans VBA Excel ou VB)
Le code est assez court et rapide en execution. ;-)

Voilou, A++

Source / Exemple :


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

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6
Date d'inscription
mercredi 5 octobre 2005
Statut
Membre
Dernière intervention
5 octobre 2005

Private Sub ok_date_Click()
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 !!!
Messages postés
46
Date d'inscription
dimanche 5 juin 2005
Statut
Membre
Dernière intervention
10 juillet 2007

Bonjour,

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 !
Messages postés
11
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
30 juillet 2007

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 ;)
Messages postés
25
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 juin 2004

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).
Messages postés
25
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 juin 2004

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
Afficher les 10 commentaires

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.