La requête paramétrée suivante calcule directement la date du Dimanche de Pâques entre 1900 et 2099 sans faire intervenir une fonction VBA personnelle grâce à une formule dérivée de l’algorithme de Carter.
La date des 3 jours fériés mobiles français (Lundi de Pâques, Ascension et Lundi de Pentecôte) est également formulée, bien que le lundi de Pentecôte ne soit plus chômé depuis 2005 (journée de solidarité).
La requête SQL pour ACCESS
SELECT IIF(Annee BETWEEN 1900 AND 2099,
DateSerial(
Annee,
3,
(204 - 11 * (Annee MOD 19)) MOD 30 + 28 + (Annee MOD 19 IN (5,16)) - (Annee + Annee \ 4 + ((204 - 11 * (Annee MOD 19)) MOD 30 + 22 + (Annee MOD 19 IN (5,16)))) MOD 7
),
NULL
) AS [Dimanche de Pâques],
[Dimanche de Pâques] + 1 AS [Lundi de Pâques],
[Dimanche de Pâques] + 39 AS [Ascension],
[Dimanche de Pâques] + 50 AS [Lundi de Pentecôte]
Remarques
Si vous souhaitez extrapoler la formule à d’autres SQL, il faut savoir que sous Access :
- True = -1 donc
(Annee MOD 19 IN (5,16))
retourne -1 si vrai; - L’opérateur ‘\’ de
Annee \ 4
retourne seulement la partie entière de la division; - Attention aussi à la priorité des opérateurs…
Il n’est pas possible non plus de copier directement la formule dans une fonction VBA car elle utilise des opérateurs spécifiques SQL (Between et In).
Exemples
Au lancement de la requête, un popup demande de saisir l’année souhaitée.
de Pâques Pâques Ascension Lundi de Pentecôte
15/04/1900 16/04/1900 24/05/1900 04/06/1900
18/04/1954 19/04/1954 27/05/1954 07/06/1954
08/04/2012 09/04/2012 17/05/2012 28/05/2012
21/04/2019 22/04/2019 30/05/2019 10/06/2019
12/04/2099 13/04/2099 21/05/2099 01/06/2099
Si l’année est en dehors de la plage 1900 – 2099, NULL est renvoyé pour chaque colonne.
A noter
La formule pour le calcul des jours ouvrables de la FAQ Access n’est valable que pour la période comprise entre 1982 et 2048.
@+
Philippe