IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Trouver la date de Pâques en fonction de l'année


Sujet :

Contribuez

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut Trouver la date de Pâques en fonction de l'année
    Bonjour à tous,

    je vous propose cet outils pour déterminer la date à laquelle la fête de Pâques tombera selon l'année voulu.
    Cela fonctionne à partir de 1800 jusqu'à 2199.

    La méthode est tirée du site Recreomath, je n'ai fait que la mettre en forme sur excel pour mon usage personnel, mais ça peut servir à d'autres.

    J'ai protégé la feuille pour éviter les changements par erreur, mais si vous avez besoin de la modifier le code est "protection".

    Pour faire fonctionner vous entrez l'année en cellule C2 et le fichier vous renvoie la date en cellule E2.

    Bonne journée,


    Philippe

    Date de Pâques.xlsx

    [EDIT : 03/03/15]Date de Pâques v2.xlsx[/EDIT]

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 272
    Points
    11 272
    Par défaut
    Salut, en VBA, à élaguer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Option Explicit
    
    Dim JFeries(11) As Long
    
    Private Sub JoursFeries(An As Long)
    Dim Nb As Long, Epacte As Long
    Dim PLune As Date, LPaques As Date
    Dim i As Long, j As Long, k As Long, tmp As Long
    
        '   Calcul du Lundi de Pâques
        Nb = (An Mod 19) + 1
        '   Différence entre calendrier solaire et lunaire
        Epacte = (11 * Nb - (3 + Int(2 + Int(An / 100)) * 3 / 7)) Mod 30
        PLune = DateSerial(An, 4, 19) - ((Epacte + 6) Mod 30)
        If Epacte = 24 Then PLune = PLune - 1
        '   Valable entre 1900 et 2199 : on verra bien ?
        If Epacte = 25 And (An >= 1900 And An < 2200) Then PLune = PLune - 1
        '   Lundi de Pâques
        LPaques = PLune - Weekday(PLune) + vbMonday + 7
    
        Erase JFeries
    
        '   Jour de l'An
        JFeries(1) = DateSerial(An, 1, 1)
        '   Paques
        JFeries(2) = LPaques
        '   Ascension
        JFeries(3) = LPaques + 38
        '   Pentecôte
        JFeries(4) = LPaques + 49
        '   Fete du travail
        JFeries(5) = DateSerial(An, 5, 1)
        '   Anniversire 1945
        JFeries(6) = DateSerial(An, 5, 8)
        '   Fete Nationale
        JFeries(7) = DateSerial(An, 7, 14)
        '   Assomption
        JFeries(8) = DateSerial(An, 8, 15)
        '   Toussaint
        JFeries(9) = DateSerial(An, 11, 1)
        '   Armistice 1918
        JFeries(10) = DateSerial(An, 11, 11)
        '   Noel
        JFeries(11) = DateSerial(An, 12, 25)
    
        '   Tri Tableau JFeries()
        For i = LBound(JFeries) To UBound(JFeries)
            j = i
            For k = j + 1 To UBound(JFeries)
                If JFeries(k) <= JFeries(j) Then j = k
            Next k
            If i <> j Then
                tmp = JFeries(j)
                JFeries(j) = JFeries(i)
                JFeries(i) = tmp
            End If
        Next i
    End Sub

  3. #3
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Dans cette discussion => http://www.developpez.net/forums/d15...-annuel-excel/

    Une version qui gère le lundi de Pentecôte entre 2005 et 2007.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    @pc75 : Je n'arrive pas à lire de classeur, Excel refuse de l'ouvrir (Excel 2010 ou Excel 2013). Message format ou extension non valide. Je suis le seul ?

    Sinon, la date de Pâques est donnée par la formule avec la date en A1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PLANCHER(JOUR(MINUTE(A1/38)/2+56)&"/5/"&A1;7)-34
    La formule provient du site que je suis obligé de coder parce que les modérateurs doivent se servir de mots-clés pour éliminer ce qui leur déplaît :

    e x c e l a b o . n e t

    On y trouve une douzaine de formules similaires.

  5. #5
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Bonjour,
    la plupart des formules proposées pour le calcul de la date de Pâques ont une limites au-delà de laquelle la date calculée n'est pas toujours bonne.

    A+

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Oui, bien sûr. La première différence entre les deux formules se produira en 2204. Vu que la durée de vie est d'une appli est au maximum de 5 ans...

  7. #7
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Oui, bien sûr. La première différence entre les deux formules se produira en 2204. Vu que la durée de vie est d'une appli est au maximum de 5 ans...
    Bien entendu mais c'est juste pour info. De plus sait-on jamais, cela peut peut-être servir dans le cas d'une étude quelconque sur la répartition des futures dates de Pâques en fonction des différents millénaires
    A+

  8. #8
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Bonjour !!

    Citation Envoyé par Daniel.C Voir le message
    Sinon, la date de Pâques est donnée par la formule avec la date en A1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PLANCHER(JOUR(MINUTE(A1/38)/2+56)&"/5/"&A1;7)-34
    La formule provient du site que je suis obligé de coder parce que les modérateurs doivent se servir de mots-clés pour éliminer ce qui leur déplaît :
    e x c e l a b o . n e t

    On y trouve une douzaine de formules similaires.
    Après vérification, cette formule est fausse, enfin pas jusqu'à 2079 ! :p

    Toutefois j'ai retrouvé le sujet sur le site sus-cité, et ma déception est grande de voir qu'il existe une formule qui permet de calculer la date de Pâques avec précision. Ma recherche initiale s'est arrêtée trop vite. Mais j'ai pris le temps d'une petite analyse.

    Et, voici les formules proposées :
    Citation Envoyé par Misange
    Celles qui renvoient la bonne date (avec l'année en A17) sont en plus de celle de Ti, celles ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =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)
    Après une comparaison à l'aide d'une macro toute simple entre les années 1900 et 2199 puis pour celle fonctionnant jusqu'à 9999 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    =FLOOR(DAY(MINUTE(C2/38)/2+56)&"/5/"&C2;7)-34 'est fausse en 2079
    =DOLLAR(("4/"&C2)/7+MOD(19*MOD(C2;19)-7;30)*14%;)*7-6 'est juste
    =INT(FLOOR("3/5/"&C2;29,5311)/7-(MOD(C2;95)=81))*7-6 'est fausse à partir de 2095 et régulièrement sur les années suivantes
    =CEILING(("17/4/"&C2)-TRUNC(MOD(11*MOD(C2;19)+5;30)-1,5);7)+1 'est juste aussi
    =CEILING(DATE(C2;4;20)-MOD(6+11*MOD(C2;19);30)-(MOD(6+11*MOD(C2;19);30)<3);7)+1 'est juste aussi
    Conclusion, on a 4 méthodes de calcule ici présentées qui sont juste :
    les trois formules excel ci-dessus sont valable entre 1900 et 9999 (à partir de 10000 on a une erreur #VALUE! pour les deux premières formules, et une erreur #NUM! pour la troisième)
    Enfin la formule mise dans mon classeur qui est ici valable de 1800 jusqu'à 2199.

    C'est là où j'ai quand même la satisfaction du travail bien fait : c'est que ma méthode de calcul fonctionne à partir de 1800 !!! (J'ai un siècle d'avance ! -ou de retard diront certains )

    j'essayerais de mettre à jour mon fichier pour commencer à 1583 (date du début du calendrier Grégorien jusqu'à 9999 et peut-être plus loin encore).
    (ci-joint la mise à jour du fichier -correction de quelques erreurs sur le troisième tableau)

    Bonne journée,

    Philippe

    Date de Pâques v2.xlsx

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    Pour faire suite à l'intervention de kiki29, en Vba, ci-dessous une fonction que j'utilise pour un calendrier (à adapter suivant les besoins)

    Je vous laisserai vérifier si cette fonction reste valable en 2079 ou 9999....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Dim lannee As Integer, Feries(1 To 13, 1 To 2), x As Integer
    Sub essai()
    lannee = 2015'à changer en fonction du besoin, ce n'est qu'un exemple
    MsgBox Paques(lannee)
     
      'tableau des jours fériés français y compris Lundi de Pentecote
      Feries(1, 1) = CDate("1/1/" & lannee): Feries(1, 2) = "Jour de l'An"
      Feries(2, 1) = Paques(lannee): Feries(2, 2) = "Pâques"
      Feries(3, 1) = Feries(2, 1) + 1: Feries(3, 2) = "L. de Pâques"
      Feries(4, 1) = CDate("1/5/" & lannee): Feries(4, 2) = "F. du Travail"
      Feries(5, 1) = CDate("8/5/" & lannee): Feries(5, 2) = "Armist. 46"
      Feries(6, 1) = Feries(2, 1) + 39: Feries(6, 2) = "Ascension"
      Feries(7, 1) = Feries(2, 1) + 49: Feries(7, 2) = "Pentecôte"
      Feries(8, 1) = Feries(2, 1) + 50: Feries(8, 2) = "L. de Pent."
      Feries(9, 1) = CDate("14/7/" & lannee): Feries(9, 2) = "F. Nationale"
      Feries(10, 1) = CDate("15/8/" & lannee): Feries(10, 2) = "Assomption"
      Feries(11, 1) = CDate("1/11/" & lannee): Feries(11, 2) = "Toussaint"
      Feries(12, 1) = CDate("11/11/" & lannee): Feries(12, 2) = "Armistice 1919"
      Feries(13, 1) = CDate("25/12/" & lannee): Feries(13, 2) = "Noël"
    For x = 1 To 13
      MsgBox Feries(x, 1) & " : " & Feries(x, 2)
    Next
    End Sub
    'ci-dessous, la fonction
    Function Paques(annee As Integer) As Date
    Dim A, B, C, D
    A = (19 * (annee Mod 19) + (annee \ 100) - ((annee \ 100) \ 4) - _
      ((8 * (annee \ 100) + 13) \ 25) + 15) Mod 30
    B = annee \ 4 + annee
    C = ((A \ 28) * (29 \ (A + 1)) * ((21 - (annee Mod 19)) \ 11) - 1) * (A \ 28) + A
    D = 28 + C - ((B + C + 2 + ((annee \ 100) \ 4) - (annee \ 100)) Mod 7)
    If D <= 31 Then
        Paques = DateValue(CStr(D) & "/3/" & CStr(annee))
    Else
        Paques = DateValue(CStr(D - 31) & "/4/" & CStr(annee))
    End If
     
    End Function

  10. #10
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par davido84 Voir le message
    sauf erreur de ma part aucune formule proposées au message 8 ne te donnera le résultat escompté de 1900 à 9999.
    Je ne cherche pas une formule valable pour l'éternité, mais je regarde les différentes possibilités. J'en ai proposé une, un peu limité, et l'ai comparé aux 5 autres ci-dessus.
    Pour avoir fait un test (je me répète), mais il y a trois formules qui son juste pour trouver la date de Pâques entre 1900 et 9999 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =DOLLAR(("4/"&C2)/7+MOD(19*MOD(C2;19)-7;30)*14%;)*7-6 'est juste
    =CEILING(("17/4/"&C2)-TRUNC(MOD(11*MOD(C2;19)+5;30)-1,5);7)+1 'est juste aussi
    =CEILING(DATE(C2;4;20)-MOD(6+11*MOD(C2;19);30)-(MOD(6+11*MOD(C2;19);30)<3);7)+1 'est juste aussi
    Ces trois-ci donne les bonnes dates !

    J'avais vu le sujet sur Excel-labo, j'avais trouvé la solution sympathique aussi. Merci.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Une précision qui ne concerne pas les formules, mais les tentatives de remonter trop loin dans le temps. Le calendrier grégorien n' a pas été adopté par tout le monde la même année. Le Royaume-uni l'a adopté en 1752, par exemple.

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Après vérification, cette formule est fausse, enfin pas jusqu'à 2079 ! :p
    Au temps pour moi. Effectivement, 2204 est la seconde date erronée. 2079 est bien la première.

  13. #13
    Membre confirmé
    Homme Profil pro
    conseiller
    Inscrit en
    Janvier 2013
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : conseiller
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 367
    Points : 649
    Points
    649
    Par défaut
    Pour avoir fait un test (je me répète), mais il y a trois formules qui son juste pour trouver la date de Pâques entre 1900 et 9999 :
    Non justement je ne crois pas que l'une de ces 3 formules te donne la bonne date de Pâques de 1900 à 9999.
    Teste les sur le fichier que je t'ai indiqué à partir de l'année 1900 et compare les résultats.
    A+

  14. #14
    Membre régulier
    Homme Profil pro
    Ingénieur Logistique
    Inscrit en
    Octobre 2013
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Logistique
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2013
    Messages : 104
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Une précision qui ne concerne pas les formules, mais les tentatives de remonter trop loin dans le temps. Le calendrier grégorien n' a pas été adopté par tout le monde la même année. Le Royaume-uni l'a adopté en 1752, par exemple.
    Toujours ce besoin de faire les choses après tout le monde chez les Anglais ! C'est dingue !!

    Mea Culpa davido84 : En effet, les formules sont valables jusqu'à 2204 un truc du genre, après ça, Boum ça plante ! (En fait j'avais fait mes test jusqu'à 2199 pour les m'assurer des formules)


    Philippe

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Avril 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    La méthode de calcul de la date de Pâques, valide dans les calendriers julien et grégorien est donnée dans le livre de Jean Meeus "Astronomical algorithms", ed. Willmann-Bell Inc, 1991. Elle est implémentée dans l'addin Caldate.xla pour Excel (cherchez sur le net).

    Quand je compare les 5 formules précitées avec le résultat de la méthode décrite par Jean Meeus, j'arrive au verdict suivant :
    - Caldate : valide de 325 à au delà, gère les passages entre les calendriers Julien, Grégoriens dans diverses régions
    - Excel labo : valide de 1900 à 2078
    - Jansen : valide de 1900 à 2203
    - Longre : valide de 1900 à 2094
    - Wieland : valide de 1900 à 2203
    - Aumbach : valide de 1900 à 2203

    A+

    Fred

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    une autre fonction toute simple toute petite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    MsgBox paques(2124)
    End Sub
    '
    Public Function paques(year)
    paques = CDate(((Round(DateSerial(year, 4, (234 - 11 * (year Mod 19)) Mod 30) / 7, 0) * 7) - 6))
    End Function

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/11/2010, 15h12
  2. Y a-t-il une fonction : date de Pâques ?
    Par Ehjoe dans le forum VB.NET
    Réponses: 4
    Dernier message: 28/10/2010, 10h39
  3. [Dates] Problème avec la fonction header
    Par d.w.d dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2005, 16h33
  4. PL/SQL TROUVER DATES DE PÂQUES, ASCENSION et PENTECôTE
    Par mimi_été dans le forum PL/SQL
    Réponses: 4
    Dernier message: 21/10/2004, 15h40
  5. Réponses: 8
    Dernier message: 05/05/2004, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo