[VBA] Comment obtenir la liste des jours fériés pour une année N ?

Q&R publiée par MyDearFriend! le 26-08-2008

[VBA] Comment obtenir la liste des jours fériés pour une année N ?

Voici deux fonctions personnalisées permettant d'obtenir la liste des jours fériés français pour une année N souhaitée.

La fonction principale ListeJoursFeries() recevra comme argument l'année choisie au format numérique et retournera un tableau variant à 2 dimensions de 13 lignes (pour les 13 jours fériés français) et 2 colonnes (pour la date et le libellé de chaque jour férié).

Les fêtes mobiles découlent de la date du dimanche de Pâques, elle-même déterminée grâce à la fonction DimPâques().

DANS UN MODULE DE CODE STANDARD
Option Explicit

Function ListeJoursFeries(An As Integer) As Variant
'myDearFriend! - www.mdf-xlpages.com
'(Tableau des jours fériés français pour l'année An)
Dim DF(1 To 13, 1 To 2) As Variant
Dim
D As Date
Dim
L As Byte
    D = DimPaques(An)
    For L = 1 To 13
        DF(L, 1) = Choose(L, _
            DateSerial(An, 1, 1), D, D + 1, DateSerial(An, 5, 1), _
            DateSerial(An, 5, 8), D + 39, D + 49, D + 50, DateSerial(An, 7, 14), _
            DateSerial(An, 8, 15), DateSerial(An, 11, 1), DateSerial(An, 11, 11), _
            DateSerial(An, 12, 25))
        DF(L, 2) = Choose(L, _
            "Jour de l'An", "Dimanche de Pâques", "Lundi de Pâques", _
            "Fête du Travail", "Armistice 1945", "Jeudi Ascension", _
            "Dimanche de Pentecôte", "Lundi de Pentecôte", "Fête Nationale", _
            "Assomption", "Toussaint", "Armistice 1918", _
            "Noël")
    Next L
    ListeJoursFeries = DF
End Function

Private Function DimPaques(ByVal An As Integer) As Date
'myDearFriend! - www.mdf-xlpages.com
'(Calcul du dimanche de Pâques d'après un algorithme de Thomas O’Beirne)
Dim n As Integer, c As Integer, a As Byte, b As Byte
    n = An - 1900
    a = n Mod 19
    b = (11 * a + 4 - ((a * 7 + 1) \ 19)) Mod 29
    c = 25 - b - ((n - b + 31 + (n \ 4)) Mod 7)
    DimPaques = DateAdd("d", c, DateSerial(An, 3, 31))
End Function


Pour lister les jours fériés de l'année 2008 sur la feuille active par exemple, il convient donc de lancer ce qui suit :
Sub Test()
'Pour lister les jours fériés de l'année 2008
    ActiveSheet.Range("A1:B13").Value = ListeJoursFeries(2008)
End Sub

Cette Q&R a été trouvée sur myDearFriend! Excel Pages : https://www.mdf-xlpages.com/modules/smartfaq/faq.php?faqid=48