date de paques

C@thy

XLDnaute Barbatruc
Bonjour le forum,

je pense que la formule
=PLANCHER(DATE(F1;5;JOUR(MINUTE(F1/38)/2+56));7)-34+7*(F1=2079)
(donnée par Ti) est juste.
Pour 2079 elle me renvoie le 23 avril 2079

Pourquoi toutes les fonctions VBA de calcul de paques (trouvées sue ce forum) me renvoient-elles toujours le dimanche 16 avril??? Je n'ai pas trouvé la bonne???
Merci à vous :)

Bises

C@thy
 

Misange

XLDnaute Barbatruc
Re : date de paques

Bonjour

Si tu veux t'amuser : dans ce classeur
Ce lien n'existe plus
il y a 19 formules et fonctions permettant de calculer la date du jour du pâques.
Pour 2079, suivant la formule tu trouves le 16, le 17 ou le 23 avril !
Mais la majorité renvoient bien le 23/4

Celles qui renvoient la bonne date (avec l'année en A17) sont en plus de celle de Ti, celles ci
=DEVISE(("4/"&A17)/7+MOD(19*MOD(A17;19)-7;30)*14%;)*7-6 (de Thomas Jansen)
=ENT(PLANCHER("3/5/"&A17;29.5311)/7-(MOD(A17;95)=81))*7-6 (de Laurent Longre)
=PLAFOND(("17/4/"&A17)-TRONQUE(MOD(11*MOD(A17;19)+5;30)-1.5);7)+1 (de R. Wieland)
=PLAFOND(DATE(A17;4;20)-MOD(6+11*MOD(A17;19);30)-(MOD(6+11*MOD(A17;19);30)<3);7)+1 (de B BAumbach)
ou encore
=7*TRONQUE((MOD(MOD(A17;19)*19-6;30)+365.25*A17-693881)/7)-SI(OU(A17=1950+{4;31;99;126});7)-6
=DATE(A1;3;28)+MOD(24-MOD(A1;19)*10.63;29)-MOD(TRONQUE(A1*5/4)+MOD(24-MOD(A1;19)*10.63;29)+1;7)
=DATE(A17;3;29.56+0.979*MOD(204-11*MOD(A17;19);30)-JOURSEM(DATE(A17;3;28.56+0.979*MOD(204-11*MOD(A17;19);30))))
=DATE(A17;3;28+MOD(204-11*MOD(A17;19);30))-MOD(DATE(A17;3;6+MOD(204-11*MOD(A17;19);30));7)-SI(OU(A17=1954;A17=1981;A17=2049;A17=2076);7)
=TRONQUE(365.25*A17-693894)+SI(OU(A17=1954;A17=1981;A17=2049;A17=2076);;7)+MOD(24-11*MOD(A17;19);30)-MOD(A17+TRONQUE(A17/4)+MOD(24-11*MOD(A17;19);30)+1;7)
=DATE(A17;4;MOD(24-11*MOD(A17;19);30)-MOD(1+ENT(A17*5/4)+MOD(24-11*MOD(A17;19);30)-(MOD(24-11*MOD(A17;19);30)>27);7)-(MOD(24-11*MOD(A17;19);30)>27)-3)
=DATE(A17;3;28)+MOD(24-11*MOD(A17;19);30)-(MOD(24-11*MOD(A17;19);30)>27)-MOD(ENT(5*A17/4)+1+MOD(24-11*MOD(A17;19);30)-(MOD(24-11*MOD(A17;19);30)>27);7)
=DATE(A17;3;28)+MOD(24+19*MOD(A17;19);30)-(MOD(24+19*MOD(A17;19);30)>27)-MOD(ENT(A17+A17/4)+MOD(24+19*MOD(A17;19);30)-(MOD(24+19*MOD(A17;19);30)>27)+1;7)
 

Bebere

XLDnaute Barbatruc
Re : date de paques

bonjour Cathy,Misange,le forum
peut être que les codes ou formules essayées sont bonnes pour une certaine période
en voilà une qui donne le même résultat que la formule que tu as mise
formule de Hetterich n de 1900 à 2078
=FRANC((JOUR(MINUTE(n/38)/2+55)&"/4/"&n)/7;)*7-6

Code:
'calcule le jour de Pâques et les fêtes mobiles
'(calendrier depuis 1900 uniquement)

Sub TestPaques()
Dim An As Integer
Dim Paques As Date
Dim LunPaq As Date
Dim Ascension As Date
Dim LunPent As Date
'
  An = InputBox("Calcul des fêtes mobiles de l'année :", , Year(Date))
'
  Paques = fPaques(An)   'Cherche le jour de Pâques
  LunPaq = Paques + 1     'En déduit
  Ascension = Paques + 39 'les autres
  LunPent = Paques + 50   'jours fériés

  'Affichages des résultats
  MsgBox "Pour l'année " & An & " :" & vbLf & vbLf & _
        "Pâques : " & Paques & vbLf & _
        "Lundi de Pâques : " & LunPaq & vbLf & _
        "Ascension : " & Ascension & vbLf & _
        "Lundi de Pentecôte : " & LunPent

End Sub

Public Function fPaques(An%) As Date
'* AUTEUR : Marc Salacroup
'* CODE TROUVE SUR "Le petit monde de Visual Basic"
'*                 http://www.vbasic.org
'* DESCRIPTION :
'* Ce code permet de trouver le jour de Pâques
'* d'une année au choix, et d'en déduire les autres
'* jours fériés non fixes français : Lundi de Pâques,
'* Ascension, Lundi de Pentecôte.

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
Dim g As Integer
Dim h As Integer
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim m As Integer
Dim n As Integer
Dim p As Integer

  a% = An% Mod 19
  b% = An% \ 100
  c% = An% Mod 100
  d% = b% \ 4
  e% = b% Mod 4
  f% = (b% + 8) \ 25
  g% = (b% - f% + 1) \ 3
  h% = (19 * a% + b% - d% - g% + 15) Mod 30
  i% = c% \ 4
  k% = c% Mod 4
  l% = (32 + 2 * e% + 2 * i% - h% - k%) Mod 7
  m% = (a% + 11 * h% + 22 * l%) \ 451
  n% = (h% + l% - 7 * m% + 114) \ 31
  p% = (h% + l% - 7 * m% + 114) Mod 31
  
  fPaques = DateSerial(An%, n%, p% + 1)

End Function
 

Modeste geedee

XLDnaute Barbatruc
Re : date de paques

Bonsour®
Bonjour le forum,

Pourquoi toutes les fonctions VBA de calcul de paques (trouvées sue ce forum) me renvoient-elles toujours le dimanche 16 avril??? Je n'ai pas trouvé la bonne???

parce que les différents auteurs n'ont pas précisé la portée de validité .
ou pire n'ont pas contrôlé exhaustivement en rapport avec une source ecclésiastique avérée
(Pâques chrétienne, orthodoxe, juive)
Calcul de la date de Pâques — Wikipédia

la bonne ? ...:rolleyes:


Roger a exposé ceci : https://www.excel-downloads.com/threads/calendrier-scolaire-perpetuel.217876/
- pour les dates après 1900
VB:
=DATE(An;4;
           25-MOD(ENT(An/400)-ENT(An/100)+ENT(8*(ENT(An/100)+11)/25)+11*MOD(An;19)+11;30)
   -ENT((8-19*MOD(ENT(An/400)-ENT(An/100)+ENT(8*(ENT(An/100)+11)/25)+11*MOD(An;19)+11;30)+MOD(An;19))/544)
    -MOD(MOD(-MOD(ENT(An/400)-ENT(An/100)+ENT(8*(ENT(An/100)+11)/25)+11*MOD(An;19)+11;30)
   -ENT((8-19*MOD(ENT(An/400)-ENT(An/100)+ENT(8*(ENT(An/100)+11)/25)+11*MOD(An;19)+11;30)+MOD(An;19))/544);7)
 +MOD(MOD(2-2*MOD(ENT(An/100);4);7)+MOD(An;100)+ENT(MOD(An;100)/4);7);7))
 
Dernière édition:

MJ13

XLDnaute Barbatruc
Re : date de paques

Bonjour à tous

J'avais trouvé cette fonction sur le net pour calculer la date de Pâques :). J'ai un peu tester par rapport à notre référence Xldienne Le Roger :) et cela à l'air bon de 1900 à 2099.
Code VBA:
Function CalculPaques(annee)
'Normalement Ok de 1900 à 2099
apaq = annee Mod 4
bpaq = annee Mod 7
c = annee Mod 19
m = 24
n = 5
d = (19 * c + m) Mod 30
e = (2 * apaq + 4 * bpaq + 6 * d + n) Mod 7
datepaques = 22 + d + e
If datepaques > 31 Then
CalculPaques = CStr(d + e - 9) & "/04/" & annee
Else
CalculPaques = CStr(22 + d + e) & "/03/" & annee
End If
If d = 29 And e = 6 Then CalculPaques = "10/04/" & annee
If d = 28 And e = 6 Then CalculPaques = "18/04/" & annee
End Function
 
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : date de paques

Bonjour,

Roger nous avait fourni ce fichier en 2013 (il me semble)

a+
 

Pièces jointes

  • Pâques-CONWAY-OUDIN.xlsm
    296.4 KB · Affichages: 107
  • Pâques-CONWAY-OUDIN.xlsm
    296.4 KB · Affichages: 120
  • Pâques-CONWAY-OUDIN.xlsm
    296.4 KB · Affichages: 113

néné06

XLDnaute Accro
Re : date de paques

Bonjour à toutes et tous

J'ai trouvé aussi sur internet cet article.
Code:
Calculer la date de Pâques
Publié le 14 octobre 2012	

Je vous propose une fonction VBA qui détermine la date du Dimanche de Pâques pour toute année (de 325 à 9999) dont découlent les jours fériés mobiles en France.
Elle complète également la fonction fournie dans la FAQ Access qui n’est valide qu’entre 1982 et 2048.

La fonction VBA
L’objectif est la performance et non l’aspect didactique des calculs…
Public Function Paques(ByVal an As Integer) As Date
'Calcul de la date du dimanche de Pâques à partir de l'année 325
'Performance par million d'appel :
'   - Entre 325 et 1582 et entre 1900 et 2099   => 1/4 de seconde
'   - Année supérieure à 1582 hors 1900 - 2099 => 1/2 de seconde
'Philben - v1.0 - Free to use
  Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer
   If an < 10000 Then    'Limite supérieure des dates sous Access (31 décembre 9999)
     Select Case an
      Case 1900 To 2099    'Algorithme de Carter
        a = (204 - 11 * (an Mod 19)) Mod 30 + 22
         Paques = DateSerial(an, 3, a + 6 + (a > 49) - (an + an \ 4 + a + (a > 49)) Mod 7)
      Case Is > 1582    'Proposé en 1876 dans la revue Nature (dérivé de l'algorithme de Delambre)
        a = an Mod 19: b = an \ 100: c = an Mod 100
         d = (19 * a + b - b \ 4 - (b - (b + 8) \ 25 + 1) \ 3 + 15) Mod 30
         e = (32 + 2 * (b Mod 4) + 2 * (c \ 4) - d - c Mod 4) Mod 7
         f = d + e - 7 * ((a + 11 * d + 22 * e) \ 451) + 114
         Paques = DateSerial(an, f \ 31, f Mod 31 + 1)
      Case Is > 324    'Algorithme de Oudin pour les dates juliennes < 1583 décrit par Claus Tondering
        a = (19 * (an Mod 19) + 15) Mod 30
         Paques = DateSerial(an, 3, 28 + a - (an + an \ 4 + a) Mod 7)
      End Select
   End If
End Function

 
Pourquoi trois périodes de temps ?
La date de Pâques (Easter en anglais) a été fixée au concile de Nicée en 325 ce qui explique l’année de départ de la fonction. De l’an 325 à 1582, on utilise l’algorithme de Oudin adapté au calendrier julien puis l’algorithme de la revue Nature pour le calendrier grégorien actuel (réforme du 15 octobre 1582). Enfin, l’algorithme de Carter est utilisé pour la période actuelle (1900 à 2099) compte tenu de sa rapidité de calcul.

Performance
Pour un million d’appels de la fonction :

    Compter 1/4 de seconde pour la période entre 325 et 1582 et entre 1900 et 2099;
    Compter 1/2 seconde pour les années supérieures à 1582 (hors 1900 à 2099).

Vérification des résultats
La méthode retenue est de comparer les résultats avec d’autres algorithmes.
Concernant le calendrier julien j’ai utilisé l’algorithme de Delambre versus Oudin :
Public Function TestPaquesJulien()
   Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, an As Integer, bErr As Boolean
   Dim d1 As Date, d2 As Date

   Debug.Print "Test calendrier julien..."
   For an = 325 To 1582

      'Delambre
     a = an Mod 19
      b = an Mod 7
      c = an Mod 4
      d = (19 * a + 15) Mod 30
      e = (2 * c + 4 * b - d + 34) Mod 7
      d1 = DateSerial(an, 3, 22 + d + e)

      d2 = Paques(an)
      If d1 <> d2 Then
         Debug.Print vbTab & "-> Date différente pour l'année " & an & " entre Delambre (" & d1 & ") et la fonction Paques (" & d2 & ")"
         bErr = True
         Exit For
      End If
   Next an
   Debug.Print "Fin - " & IIf(bErr, "Ecart constaté !", "Pas d'écart constaté")

End Function

 
Pour le calendrier grégorien, j’ai utilisé l’algorithme de Oudin versus nos deux algorithmes (Carter et Nature) :
Public Function TestPaquesGregorien()
   Dim c As Integer, g As Integer, k As Integer, i As Integer, j As Integer, l As Integer, m As Integer
   Dim an As Integer, bErr As Boolean, d1 As Date, d2 As Date

   Debug.Print "Test calendrier grégorien..."
   For an = 1583 To 9999

      'Oudin - Modified Oudin's Method for calculating the date of Easter
     g = an Mod 19
      c = an \ 100
      k = (c - 17) \ 25
      i = (c - c \ 4 - (c - k) \ 3 + 19 * g + 15) Mod 30
      i = i - (i \ 28) * (1 - (i \ 28) * (29 \ (i + 1)) * ((21 - g) \ 11))
      j = (an + an \ 4 + i + 2 - c + c \ 4) Mod 7
      l = i - j
      m = 3 + (l + 40) \ 44
      d1 = DateSerial(an, m, l + 28 - 31 * (m \ 4))

      d2 = Paques(an)
      If d1 <> d2 Then
         Debug.Print vbTab & "-> Date différente pour l'année " & an & " entre Oudin (" & d1 & ") et la fonction Paques (" & d2 & ")"
         bErr = True
         Exit For
      End If
   Next an
   Debug.Print "Fin - " & IIf(bErr, "Ecart constaté !", "Pas d'écart constaté")

End Function

 
On peut également vérifier que la date de Pâques calculée soit comprise entre le 22 mars et le 25 avril et qu’elle soit bien un dimanche. Comme la fonction VBA Weekday() n’est adaptée qu’au calendrier grégorien, il faut donc ajouter un algorithme qui détermine les jours de semaine du comput julien (années < 1583 dans notre cas).
La fonction de test et JourSemaineJulien() :
Public Function TestPaques()
'Quelque soit l'année, vérifier que la date de Pâques est bien :
'   - comprise entre le 22 mars et 25 avril
'   - un dimanche
  Const cMinAn As Integer = 325
   Const cMaxAn As Integer = 9999
   Const cMaxMoisJour As Integer = 425
   Const cMinMoisJour As Integer = 322
   Const cMinCalendrierGregorien As Integer = 1583
   Dim p As Date, i As Integer, md As Integer, j As Integer

   For i = cMinAn To cMaxAn
      p = Paques(i)
      md = Month(p) * 100 + Day(p)
      If i < cMinCalendrierGregorien Then j = JourSemaineJulien(p) Else j = Weekday(p)
      If j <> vbSunday Then
         Debug.Print "Erreur ! Une date de Pâques n'est pas un dimanche : ", p
         Exit For
      End If
      If md < cMinMoisJour Then
         Debug.Print "Erreur ! Une date de Pâques est inférieure au 22 mars : ", p
         Exit For
      ElseIf md > cMaxMoisJour Then
         Debug.Print "Erreur ! Une date de Pâques est supérieure au 25 avril : ", p
         Exit For
      End If
   Next i
   If i > cMaxAn Then Debug.Print "Aucune erreur détectée entre " & cMinAn & " et " & cMaxAn
End Function

Public Function JourSemaineJulien(ByVal LaDate As Date) As VbDayOfWeek
'Formule de Zeller - [url=http://www.vendredi13.us/ZellerMethode.html]Algorithme de Christian Zeller (1822-1899)[/url]
  Dim a As Integer, m As Integer, s As Integer, y As Integer, z As Integer

   y = Year(LaDate): m = Month(LaDate)
   If m < 3 Then m = 12 + m: y = y - 1
   s = y \ 100: a = y - s * 100

   'Comput julien : de 100 (1ère date Access : 1/1/100) à 1582
  z = (Day(LaDate) + Int(2.6 * (m + 1)) + a + a \ 4 + 5 - s) Mod 7

   'comput grégorien : > 1582
  'z = (Day(LaDate) + Int(2.6 * (m + 1)) + a + a \ 4 + s \ 4 - 2 * s) Mod 7
  'If z < 0 Then z = 7 + (z Mod 7) 'inutile entre 100 et 1582

   If z = 0 Then z = vbSaturday   'alignement sur VbDayOfWeek

   JourSemaineJulien = z
End Function

 
J'ai également comparé les résultats d'un échantillon d'années avec ceux de ce site web très intéressant sans constater d’erreur.

Exemples
A copier dans la fenêtre ‘Exécution’ de VBE puis mettre le focus sur la ligne à exécuter et taper sur ‘Entrée’.
'Dimanche de Pâques pour l'année en cours
?Paques(Year(Date())) 'pour 2012 -> 08/04/2012
'An 1000 - Calendrier julien
?Paques(1000) '31/03/1000
?Paques(3000) '13/04/3000

 
Remarque
Bien que l’année grégorienne (365.2425 jours en moyenne) soit plus courte que l’année julienne (365.25 jours en moyenne) , elle est encore trop longue par rapport à l’année tropique (365.2422 jours en moyenne). De plus, le raccourcissement de l’année tropique et l’allongement du jour au fil des millénaires nécessiteront des ajustements qui rendront caduques les algorithmes utilisés…

Références
Cette présentation en français au format PDF de P. Rocher (Observatoire de Paris) fait un point détaillé sur les dates de Pâques, les méthodes de calcul et présente l’algorithme de la revue Nature (page 15).
Le site vendredi13.us dont le design pique un peu les yeux (!) est d’une richesse exceptionnelle sur le vendredi 13 et les dates de Pâques, le tout en français ! Il expose très clairement de nombreuses méthodes de calcul du jour de Pâques dont Gauss, Delambre, Oudin, Reints, Zeller…

@+

Philippe
Ce contenu a été publié dans VBA - Ms Access par philben, et marqué avec Algorithme, Code VBA, Date. Mettez-le en favori avec son permalien.

Et je l'ai "Allégé" sur ce fichier.

A+

René
 

Pièces jointes

  • Paques.xlsm
    17.7 KB · Affichages: 95
  • Paques.xlsm
    17.7 KB · Affichages: 103

ROGER2327

XLDnaute Barbatruc
Re : date de paques

Bonsoir à tous.


Beaucoup de formules proposées pour le calcul de la date de Pâques sont fantaisistes si on ne précise pas leur domaine de validité.
Par exemple, des douze formules proposées au message #3 aucune n'est valable avant 1900 ou au-delà de 2203.
La plus rigolote est la première :
=DEVISE(("4/"&A2)/7+MOD(19*MOD(A2;19)-7;30)*14%;)*7-6
Elle s'écrit en réalité :
Code:
=DEVISE(("4/"&A2)/7+MOD(19*MOD(A2;19)-7;30)*14%;)*7-6

Par respect du lecteur, la moindre des choses est de préciser, formule par formule, son domaine de validité :
  • La première (sans la petite merde jaune) est valable de 1900 à 2203, comme la troisième, la quatrième et la septième.
  • La cinquième, la huitième et la neuvième sont valables de 1900 à 2105.

Les autres ne couvrent même pas le XXI[SUP]ème[/SUP] siècle :
  • Les trois dernières sont valables de 1900 à 2099.
  • La deuxième est valable de 1900 à 2094.
  • La sixième mourira en 2078.



Bonne nuit.


ℝOGER2327
#7345


Mardi 24 Palotin 141 (Sainte Lumelle, écuyère - fête Suprême Quarte)
24 Floréal An CCXXII, 0,2543h - valériane
2014-W20-2T00:36:37Z
 

Pièces jointes

  • 13 formules pour Pâques.xlsm
    17.4 KB · Affichages: 128

MJ13

XLDnaute Barbatruc
Re : date de paques

Bonjour à tous

Je pense Misange :) que Roger n'a pas voulu dire de mal, c'est juste une petite plaisanterie, comme il sait le faire.

Merci Roger :) pour ce dernier fichier qui fait le point sur le jour de Pâques car il y a tellement de formules, qu'on ne sait plus laquelle choisir :).

Par contre une petite coquille :eek:, à moins que cela ne soit voulu en vieux François, tu as écrit:

La sixième mourira en 2078.

Conjugaison mourir - Conjuguer mourir - Le Monde.fr
 

Discussions similaires

Statistiques des forums

Discussions
313 775
Messages
2 102 281
Membres
108 192
dernier inscrit
mehdi.touhami@pernod-rica