Date et heure fonction férié pour faire suite a la fonction paques avec l'ago de meuss méthode butcher

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
une fonction férié avec switch ModeReturn

elle renvoie true ou false sur une date
ou
le nom du jour férié

VB:
'fonction férié
'patricktoulon
Function férié(dt As Date, Optional ReturnMode As Long = 1) As Variant
    Dim X As Boolean
    Static y&: Static paques As Date
    If y <> Year(dt) Then
        y = Year(dt)
        Dim a&, b&, c&, d&, e&, f&, g&, h&, i&, k&, L&, m&, Mx, Dx
        a = y Mod 19: b = y \ 100: c = y 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: Mx = (h + L - 7 * m + 114) \ 31: Dx = ((h + L - 7 * m + 114) Mod 31) + 1
        paques = DateSerial(y, Mx, Dx)
    End If
    
    Select Case dt
        Case DateSerial(Year(dt), 1, 1): férié = "Jour de l'an": X = True
        Case paques: férié = "Pâques": X = True
        Case paques + 1: férié = "lundi de Paques": X = True
        Case paques + 39: férié = "Ascension": X = True 'L'Ascension est une fête chrétienne fixée 40 jours après le dimanche de Pâques. Elle symbolise la montée de Jésus vers Dieu
        Case paques + 50 = férié = "Lundi de Pentecôte": X = True 'Les apôtres ont alors dit : « L'Esprit du Seigneur est sur nous ». Elle clôt le temps pascal de 50 jours. La Pentecôte célèbre à la fois le commencement de l'Église, sa fondation, et l'émergence des premières communautés chrétiennes, au Ier siècle.
        Case DateSerial(Application.Max(Year(dt), 1919), 5, 1): férié = "Fête du travail": X = True 'Le 23 avril 1919, le Sénat français ratifie la journée de huit heures et fait du 1er mai suivant, à titre exceptionnel, une journée chômée. Depuis, le 1er mai est resté le jour international des revendications ouvrières, donnant lieu à des défilés de travailleurs
        Case DateSerial(Application.Max(Year(dt), 1945), 5, 8): férié = "fete de la victioire ": X = True 'Victoire des forces alliées sur l'Allemagne nazie et fin de la Seconde Guerre mondiale en Europe, le 8 mai 1945 marque une date importante. Pour le 80e anniversaire de la capitulation nazie
        Case DateSerial(Year(dt), 7, 14): férié = "Fête Nationale ": X = True 'Le 14 juillet, pour sa double valeur symbolique, a finalement été privilégié. La prise de la Bastille en 1789 s'impose dans l'imaginaire collectif comme la victoire du peuple sur l'arbitraire royal, un événement adouci par la fête de 1790 et sa dimension fédératrice autour d'un événement commun
        Case DateSerial(Application.Max(Year(dt), 1919), 11, 11): férié = "Armistice": X = True '11 novembre - Cérémonie commémorative de l'Armistice du 11 novembre 1918, de la Victoire et de la Paix et d'hommage à tous les Morts pour la France
        Case DateSerial(Year(dt), 12, 25): férié = "Noël": X = True 'au 4eme siecle les chrétiens on fixer la date de naissence de jesus christ au 25 décembre ,l'empereur Theodose l'a officialisé pour remplacer les fêtes païennes
            'ajouter des jours si besoins ici pour les dates
    End Select
    
    If ReturnMode = 0 Then férié = X
End Function

exemple en vba
Code:
Sub test()
    MsgBox férié(CDate("11/11/2025"), 0)
    MsgBox férié(CDate("11/11/2025"))
End Sub

formule
=férié(A1;0) --> renvoie vrai ou faux
=férié(A1;1)--> renvoie le nom ou raison du jour férié (si ça en est un
 
Bonjour Patrick,
Une fois, ajouté l'Assomption et la Toussaint, corrigé le "case paques + 50 = férié" par "case paques + 50 : férié", dans ta procédure et supprimé de mes données Vendredi Saint et Saint Etienne, Je valide tes dates 😉.
Il est possible aussi, que mon fichier comporte des bourdes, je précise !
Cependant, il faut noter que :
le 1er mai est aussi le jeudi de l'Ascension en 2008 : ta procédure indique Ascension (rarissime !)
Pour les années 2059, 2070, 2081 et 2092, le 8 mai correspond au jeudi de l'Ascension (retenir que le 8 mai ?, dilemme !)
Bonne reflexion 🧐
Cordialement.
 

Pièces jointes

Bonjour @Jean-Eric
en effet une petite coquille sur le paques+50
j'ai ajouté la Toussaint
VB:
'fonction férié
'patricktoulon
Function férié(dt As Date, Optional ReturnMode As Long = 1) As Variant
    Dim X As Boolean
    Static y&: Static paques As Date
    If y <> Year(dt) Then
        y = Year(dt)
        Dim a&, b&, c&, d&, e&, f&, g&, h&, i&, k&, L&, m&, Mx, Dx
        a = y Mod 19: b = y \ 100: c = y 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: Mx = (h + L - 7 * m + 114) \ 31: Dx = ((h + L - 7 * m + 114) Mod 31) + 1
        paques = DateSerial(y, Mx, Dx)
    End If
    
    Select Case dt
        Case DateSerial(Year(dt), 1, 1): férié = "Jour de l'an": X = True
        Case paques: férié = "Pâques": X = True
        Case paques + 1: férié = "lundi de Paques": X = True
        Case paques + 39: férié = "Ascension": X = True 'L'Ascension est une fête chrétienne fixée 40 jours après le dimanche de Pâques. Elle symbolise la montée de Jésus vers Dieu
        Case paques + 50: férié = "Lundi de Pentecôte": X = True  'Les apôtres ont alors dit : « L'Esprit du Seigneur est sur nous ». Elle clôt le temps pascal de 50 jours. La Pentecôte célèbre à la fois le commencement de l'Église, sa fondation, et l'émergence des premières communautés chrétiennes, au Ier siècle.
        Case DateSerial(Application.Max(Year(dt), 1919), 5, 1): férié = "Fête du travail": X = True 'Le 23 avril 1919, le Sénat français ratifie la journée de huit heures et fait du 1er mai suivant, à titre exceptionnel, une journée chômée. Depuis, le 1er mai est resté le jour international des revendications ouvrières, donnant lieu à des défilés de travailleurs
        Case DateSerial(Application.Max(Year(dt), 1945), 5, 8): férié = "fete de la victioire ": X = True 'Victoire des forces alliées sur l'Allemagne nazie et fin de la Seconde Guerre mondiale en Europe, le 8 mai 1945 marque une date importante. Pour le 80e anniversaire de la capitulation nazie
        Case DateSerial(Year(dt), 7, 14): férié = "Fête Nationale ": X = True 'Le 14 juillet, pour sa double valeur symbolique, a finalement été privilégié. La prise de la Bastille en 1789 s'impose dans l'imaginaire collectif comme la victoire du peuple sur l'arbitraire royal, un événement adouci par la fête de 1790 et sa dimension fédératrice autour d'un événement commun
        Case DateSerial(Year(dt), 11, 1): férié = "Toussaint": X = True 'la Toussaint est la fête de tous les saints. Chaque 1er novembre, l'Église honore ainsi la foule innombrable de ceux et celles qui ont été de vivants et lumineux témoins du Christ.
        Case DateSerial(Application.Max(Year(dt), 1919), 11, 11): férié = "Armistice": X = True '11 novembre - Cérémonie commémorative de l'Armistice du 11 novembre 1918, de la Victoire et de la Paix et d'hommage à tous les Morts pour la France
        Case DateSerial(Year(dt), 12, 25): férié = "Noël": X = True 'au 4eme siecle les chrétiens on fixer la date de naissence de jesus christ au 25 décembre ,l'empereur Theodose l'a officialisé pour remplacer les fêtes païennes
            'ajouter des jours si besoins ici pour les dates
    End Select
    
    If ReturnMode = 0 Then férié = X
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour