Function Tab_Jours_Feries(Date_Deb_Ref, Optional ByVal Date_Fin_Ref = 0, Optional Lun_Pentecote As Boolean = 1, Optional Region_Ref As Byte = 0, Optional Pays_Ref% = 33) As Variant
'Fonction Tab_Jours_Feries V1.0 By Yeahou
'Fonction Tab_Jours_Feries V1.1 By Yeahou, correction des jours fériés DOMCOM
'Renvoie un tableau des jours fériés compris entre deux dates utilisable avec les fonctions d'Excel acceptant les tableaux exemple : NB.JOURS.OUVRES ou NBVAL
'si Date_Fin_Ref est omis, teste si la journée est fériée et renvoie un boolean
'paramétrage optionnel du Lundi de Pentecôte et de la région pour les jours fériés régionaux
'Date_Deb_Ref et Date_Fin_Ref -> une date (ex : 03/12/2021)
'Lun_Pentecôte=0 enlève le Lundi de Pentecôte des jours fériés, Lun_Pentecôte=1 ou omis le Lundi de Pentecôte est férié
'Region_Ref=0 ou omis => standard métropole (sauf Alsace-Moselle)
'Region_Ref=1 => Alsace-Moselle
'Region_Ref=2 => Guadeloupe & Saint-Martin
'Region_Ref=3 => Guyane
'Region_Ref=4 => la Réunion
'Region_Ref=5 => Martinique
'Region_Ref=6 => Mayotte
'Region_Ref=7 => Saint-Barthélemy
'Region_Ref=8 => Nouvelle -Calédonie
'Region_Ref=9 => Polynésie française
'Region_Ref=10 => Wallis et Futuna
Dim Test_Journee As Boolean
If Date_Fin_Ref = 0 Then Date_Fin_Ref = Date_Deb_Ref: Test_Journee = True
If IsDate(Date_Deb_Ref) And IsDate(Date_Fin_Ref) Then
Dim Annee_Ref%, Dim_Paques As Date, Date_en_Cours As Date, Tablo_J_F() As Date, Jour_Ferie As Boolean, Compteur&
Annee_Ref = Year(Date_Deb_Ref)
'détermine le dimanche de Paques sur Date_Deb_Ref
Dim_Paques = CDate(((Round(DateSerial(Annee_Ref, 4, (234 - 11 * (Annee_Ref Mod 19)) Mod 30) / 7, 0) * 7) - 6))
Select Case Pays_Ref
Case Is = 33 'France
For Date_en_Cours = Date_Deb_Ref To Date_Fin_Ref
If Not Annee_Ref = Year(Date_en_Cours) Then 'relance le calcul du Dimanche de paques si chgt d'année sur Date_en_Cours
Annee_Ref = Year(Date_en_Cours)
Dim_Paques = CDate(((Round(DateSerial(Annee_Ref, 4, (234 - 11 * (Annee_Ref Mod 19)) Mod 30) / 7, 0) * 7) - 6))
End If
Jour_Ferie = False
Select Case Left(DateValue(Date_en_Cours), 5)
Case Is = "01/01", "01/05", "08/05", "14/07", "15/08", "01/11", "11/11", "25/12", _
Left(DateValue(Dim_Paques) + 1, 5), Left(DateValue(Dim_Paques) + 39, 5)
'Premier janvier, Fête du travail, Victoire des alliés, Fête nationale, Assomption, Toussaint, Armistice, Noël
', Lundi de Paques, Jeudi de l'Ascension
Jour_Ferie = True
Case Is = Left(DateValue(Dim_Paques) + 50, 5) 'Lundi de Pentecôte
Jour_Ferie = Lun_Pentecote
Case Is = Left(DateValue(Dim_Paques) - 2, 5), "26/12" 'Alsace-Moselle
'Vendredi Saint, Saint Etienne
If Region_Ref = 1 Then Jour_Ferie = True
Case Is = "27/05" 'Guadeloupe & Saint-Martin
'Abolition de l'esclavage
If Region_Ref = 2 Then Jour_Ferie = True
Case Is = "10/06" 'Guyane
'Abolition de l'esclavage
If Region_Ref = 3 Then Jour_Ferie = True
Case Is = "20/12" 'La Réunion
'Abolition de l'esclavage
If Region_Ref = 4 Then Jour_Ferie = True
Case Is = "22/05" 'Martinique
'Abolition de l'esclavage
If Region_Ref = 5 Then Jour_Ferie = True
Case Is = "27/04" 'Mayotte
'Abolition de l'esclavage
If Region_Ref = 6 Then Jour_Ferie = True
Case Is = "09/10" 'Saint-Barthélemy
'Abolition de l'esclavage
If Region_Ref = 7 Then Jour_Ferie = True
Case Is = "24/09" 'Nouvelle-Calédonie
'Fête de la citoyenneté
If Region_Ref = 8 Then Jour_Ferie = True
Case Is = "05/03", "29/06" 'Polynésie française ok
'Arrivée de l'Évangile, Fête de l’autonomie
If Region_Ref = 9 Then Jour_Ferie = True
Case Is = "28/04", "29/07" 'Wallis et Futuna
'Saint Pierre Chanel, Fête du territoire
If Region_Ref = 10 Then Jour_Ferie = True
Case Else
End Select
If Jour_Ferie Then
Compteur = Compteur + 1
ReDim Preserve Tablo_J_F(1 To Compteur) As Date
Tablo_J_F(Compteur) = Date_en_Cours
End If
Next Date_en_Cours
Case 41 'Suisse
Case Else
Tab_Jours_Feries = Error(5)
Exit Function
End Select
Tab_Jours_Feries = IIf(Test_Journee, Jour_Ferie, Tablo_J_F)
Else
Tab_Jours_Feries = Error(5) 'remplacer ligne par Err.Raise 5 pour générer une erreur argument non valide
End If
End Function