Jour de Pâques
Le jour de Pâques arrive bientôt… mais pouvez-vous dire quand précisément ? Sachant qu’il varie en fonction de l’année, ce serait pratique de pouvoir le calculer automatiquement.
Voici 2 méthodes proposées par DenisS, à partir d’algorithmes du site « Vendredi13« . Vous pouvez aussi consulter l’inévitable Wikipédia !
Les 2 fonctions VBA sont à recopier dans un module standard comme d’habitude.
Méthode 1
La première fonction est la plus rapide, mais elle ne calcule le jour de Pâques que pour les années 1900 à 2099 :
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 27 28 29 30 |
' --- ' CALCUL DE LA DATE DE PAQUES - ALGORITHME DE CARTER ' --- ' Retourne la date de Pâques pour l'année fournie, ' en utilisant l'algorithme de Carter. ' Le calcul est valable pour les années comprises entre 1900 et 2099. ' Le nombre d'opérations réduit assure un calcul plus rapide sur cette période. ' ' Plus d'informations et d'autres algorithmes sur http://www.vendredi13.us ' Function PaquesCarter(iAnnee As Integer) As Date Dim B As Integer, D As Integer, E As Integer, Q As Integer Select Case iAnnee Case 1900 To 2099 B = 225 - 11 * (iAnnee Mod 19) D = ((B - 21) Mod 30) + 21 D = D + (D > 48) ' Soustraire 1 si D>48 E = (iAnnee + (iAnnee 4) + D + 1) Mod 7 Q = D + 7 - E ' Pâques est calculé par rapport au 1er mars. ' Addition plus rapide que DateAdd() PaquesCarter = DateSerial(iAnnee, 3, 1) + (Q - 1) Case Else PaquesCarter = CDate(0) End Select End Function |
Méthode 2
La deuxième fonction est plus lente… mais elle s’étend de l’année 325 à l’année 2999. De quoi voir venir !
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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
' --- ' CALCUL DE LA DATE DE PAQUES - ALGORITHME D'OUDIN-TONDERING ' --- ' Retourne la date de Pâques pour l'année fournie ' en utilisant l'algorithme d'Oudin-Tondering. ' Le calcul est valable pour les années comprises entre 325 et 2999. ' Cet algorithme est un peu plus lent que le précédent, ' mais il permet le calcul sur une période plus étendue. ' ' Plus d'informations et d'autres algorithmes sur http://www.vendredi13.us ' Function PaquesOT(iAnnee As Integer) As Date Dim G As Integer, C As Integer, D As Integer, E As Integer, H As Integer Dim K As Integer, P As Integer, Q As Integer, I As Integer, J As Integer Select Case iAnnee Case 1583 To 2999 ' Calendrier Grégorien G = iAnnee Mod 19 C = iAnnee 100 D = C - (C 4) E = (8 * C + 13) 25 H = (D - E + 19 * G + 15) Mod 30 K = H 28 P = 29 (H + 1) Q = (21 - G) 11 I = H - K * (1 - K * P * Q) J = (iAnnee + (iAnnee 4) + I + 2 - D) Mod 7 Case 325 To 1582 ' Calendrier Julien G = iAnnee Mod 19 I = (19 * G + 15) Mod 30 J = (iAnnee + (iAnnee 4) + I) Mod 7 Case Else PaquesOT = CDate(0) Exit Function End Select ' Pâques est calculé par rapport au 1er mars. PaquesOT = DateSerial(iAnnee, 3, 1) + (28 + I - J - 1) End Function |
Exemples
Une fois les fonctions recopiées dans votre base, elles peuvent être utilisées dans une requête, un formulaire, un état, ou un autre module VBA. Pour faire un test rapide :
- Ouvrez la fenêtre Exécution (
[CTRL]
+G
). - Tapez dans cette fenêtre :
? PaquesCarter(2009)
puis[Entrée]
ou encore :
? PaquesOT(2009)
puis[Entrée]
Pour lister toutes les dates dans la fenête Exécution, vous pouvez aussi exécuter ce petit bout de code :
1 2 3 4 5 6 7 |
Sub TestPaques() Dim intI As Integer For intI = 2009 To 2099 Debug.Print intI & " => " & PaquesCarter(intI) Next End Sub |
missnour > Dans une requête, tu crées un champ calculé de la forme :
Date Fin Contrat: DateAdd("yyyy"; 2; [Date Début Contrat])
Selon la version d’Access, tu peux remplacer « yyyy » par « aaaa ».
comment savoir a partire d une [date debut contrat] la [date fin contrat]qui arrive apres 2 ans
[date debut]+ 2 ans