Dates de début et de fin de semaine
Dans la série « comment trouver la date de… » : comment afficher dans une zone de texte d’un formulaire, le 1er jour de la semaine en cours, et le dernier jour dans une autre zone ?
Sur un formulaire
- Créez une zone de texte sur un formulaire.
- Cliquez sur cette zone de texte avec le bouton droit de la souris, puis sélectionnez Propriétés.
- Dans la propriété
Nom
, tapez par exemple :txtDebutSemaine
- Toujours dans les propriétés, définissez la source en tapant :
=Date() - JourSem(Date(); 2) + 1
ou en anglais :
=Date() - WeekDay(Date(); 2) + 1
- Créez une seconde zone de texte. Nommez-la
txtFinSemaine
. - Définissez sa source en tapant cette fois :
=Date() + 7 - JourSem(Date(); 2)
ou en anglais :
=Date() + 7 - WeekDay(date(); 2)
WeekDay(UneDate; UnCode)
donne le jour de semaine d’une date, donc un chiffre compris entre 1 et 7. Si vous êtes francophone (ou non anglo-saxon, en tout cas !), il faut fournir le code 2
en deuxième paramètre. Cette valeur 2 indique que la semaine démarre le lundi. Vous pouvez remplacer ce 2 par la constante vbMonday
, quand vous programmez en VBA.Dans une requête
Ces formules peuvent être utilisées ailleurs dans Access : dans des requêtes, des états, du VBA. Dans une requête, il n’y a pas de zone de texte. Il faut en remplacement créer 2 champs calculés de cette forme :
Début Semaine: Date() - JourSem(Date(); 2) + 1
Fin Semaine: Date() + 7 - JourSem(Date(); 2)
Les calculs en question peuvent aussi être utilisés sous forme de critères (et non plus sous forme de champs calculés). Par exemple, on pourrait écrire, comme critère sous un champ Date/Heure :
1 |
Entre Date() - JourSem(Date(); 2) + 1 Et Date() + 7 - JourSem(Date(); 2) |
…pour remplacer un critère du type :
1 |
Entre #29/01/2009# Et #04/01/2009# |
En VBA
En VBA, seuls les noms anglais des fonctions doivent être utilisés, et les points-virgules doivent être remplacés par des virgules. Ce qui donne par exemple :
1 2 3 4 5 6 7 |
Dim dtDebutSemaine As Date Dim dtFinSemaine As Date dtDebutSemaine = Date() - WeekDay(Date(), vbMonday) + 1 dtFinSemaine = Date() + 7 - WeekDay(Date(), vbMonday) MsgBox "Début de semaine : " & dtDebutSemaine MsgBox "Fin de semaine : " & dtFinSemaine |
A taper dans un bloc Sub/End Sub
, bien sûr.
Date()
donnés plus haut par un champ Access qui contiendrait une date quelconque.