Calculer le 1er jour d’une semaine donnée
Je souhaiterais obtenir le premier jour de la semaine
37
de l’année2011
. Et ceci pour n’importe quelle année ou semaine. Comment faire ?
Le code
Voici une fonction VBA qui peut faire l’affaire (à recopier comme d’habitude dans un module standard de votre base de données) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
' --- ' CALCUL DU 1ER JOUR D'UNE SEMAINE DONNEE ' --- ' La semaine est calculée "à la française". ' Remplacer vbMonday et vbFirstFourDays pour d'autres ' méthodes. ' Function DateSemaineFR( _ ByVal intAnnee As Integer, _ Optional ByVal intSemaine As Integer = 1) Dim dt As Date ' Trouver le 1er jour de la semaine 1 de l'année ' (pas forcément le 1/1/aaaa en France !) dt = DateSerial(intAnnee, 1, 1) While DatePart("ww", dt, vbMonday, vbFirstFourDays) <> 1 dt = dt + 1 Wend ' Calculer le 1er jour de la semaine demandée dt = dt - DatePart("w", dt, vbMonday) + 1 dt = dt + 7 * (intSemaine - 1) DateSemaineFR = dt End Function |
Tester !
- La fonction doit être appelée au minimum avec le numéro de l’année concernée. Dans ce cas, vous obtenez la date du 1er jour de la semaine 1 de l’année (qui n’est pas forcément le 1er janvier de l’année, en France).
- Si vous appelez la fonction avec une année et un numéro de semaine, vous obtenez le 1er jour de cette semaine. Toujours en mode de calcul français.
- Pour adapter la fonction à d’autres pays, remplacez
vbMonday
etvbFirstFourDays
par d’autres valeurs.
Pour tester la fonction directement :
- Ouvrez la fenêtre Exécution (
CTRL
+G
). - Tapez dedans :
? DateSemaineFR(2012)
puisEntrée
.
Vous obtiendrez la date du02/01/2012
.? DateSemaineFR(2012, 32)
puisEntrée
.
Vous obtiendrez la date du06/08/2012
.
Vous pouvez aussi extraire le 1er jour de la semaine en cours par :
1 |
? DateSemaineFR(Year(Date()), DatePart("ww", Date(), vbMonday, vbFirstFourDays)) |
Mais il y a plus simple pour celle-ci :
1 |
? Date() - Weekday(Date(), vbMonday) + 1 |
Bonjour Hervé,
Je travaille sur des dates au format (ss-aaaa) que je convertis avec succès en jj/mm/aaaa avec votre fonction. Cependant j’aimerais légèrement modifier cette fonction de façon à générer une date au jeudi ou bien le 4eme jour de l’année.
En effet voici ce que je fais: ss-aaaa -> jj/mm/aaaa puis ss-aaaa à nouveau.
Je veux donc que la date que je génère à partir de 01-2014 par ex soit forcément reconvertie en 01-2014. Où dois-je modifier pour générer au jeudi?
Merci d’avance,
Ostrich95
Euh… Sans être dans le projet, ce n’est pas clair. 😉
Est-ce que je pourrais avoir un exemple plus parlant ?
(et pourquoi un aller/retour d’un format à un autre ?)
Cross > Effectivement, il y a avait un bug dans la fonction. La correction devrait fonctionner maintenant. Merci pour le retour ! 🙂
? DateSemaineFR(2012, 32) puis Entrée.
Vous obtiendrez la date du 06/08/2012.
Oui mais le premier jour de la semaine 32 en 2012 est le lundi 05/08/2012 non ?
akamus > Tu peux, dans ta requête, créer le champ calculé suivant :
Ensuite, tu peux trier sur ce champ calculé.
bonjour
je veux afficher les resultats d’une table par semaine tell que le premier jour de la semaine et le vendredi , soit par requette ou état
( la semaine commance le vendredi et termine le jeudi )
merci