Bonjour le forum

Voici une fonction polyvalente, sans calendrier fixe, qui dispense de la tenue d’un calendrier des jours fériés :

Selon l'utilisation :
  • Elle détermine si une date donnée est fériée et renvoie un boolean.
  • Elle renvoie un tableau des jours fériés, compris entre deux dates, utilisable avec les fonctions d'Excel acceptant un tableau de dates.
  • Elle gère les spécificités régionales par un paramètre optionnel pour la région.
  • Elle est utilisable en formule, en matricielle, en MFC ou par VBA.
  • La version 2.0 a intégré le choix du pays, France, Belgique, Suisse et Luxembourg. Un paramètre optionnel a été ajouté pour la gestion des jours chômés spécifiques à la Suisse et les cantons sont gérés par le paramètre régional.
  • La version 3.0 l'a rendue utilisable en fonction matricielle renvoyant un tableau horizontal ou vertical, compatible matricielles standards et matricielles dynamiques Excel 365. La gestion des #N/A en calcul matriciel standard est intégrée dans la fonction.
    Cette fonctionnalité permet de remplacer facilement, dans un fichier existant, un tableau des jours fériés à mise à jour manuelle par un tableau des jours fériés entièrement automatisé ( voir fichier joint ).
  • La version 3.3 a intégré en option la possibilité de renvoyer les libellés des jours fériés. Elle permet de faire un listing détaillé des jours fériés, libellés et dates, voir fichiers exemples.
  • La version 4.0 a intégré l'Espagne, le Portugal et la Principauté de Monaco, les régions en Espagne et au Portugal sont gérées par le paramètre régional.
Cette fonction gère tous les jours fériés à date fixe et tous les jours fériés à date mobile déterminés par le dimanche de Pâques de l’année ( testé jusqu'à 2099 ) ou par la spécificité régionale. Elle comprend un paramétrage optionnel du lundi de Pentecôte (pour la France) et des jours fériés régionaux. Elle dispense de la tenue d'un calendrier des jours fériés pour les calculs, les MFC ou l'établissement de plannings/calendriers.

Paramètre pour le pays, 33 ou omis France, 32 Belgique, 41 Suisse, 352 Luxembourg, 377 Monaco, 34 España, 351 Portugal

J'ai mis dans le fichier joint « Exemples utilisation TJF en formules en MFC en détermination de jours fériés.Xlsm », pour quatre pays, des exemples d'utilisation avec NB, NB.JOURS.OUVRES, NB.JOURS.OUVRES.INTL, des MFC et des déterminations de jour férié.
Dans le fichier joint « Exemples utilisation en matricielles standard ou dynamiques 365 horizontales ou verticales.Xlsm », j’ai mis des exemple de formules matricielles standard toutes version d'Excel et matricielles dynamiques horizontales et verticales pour 365.

Fonction personnalisée utilisable en VBA, en formules (y compris encapsulée ou en matricielle) et en MFC.

Bien cordialement, @+

Code de la fonction
Code:
Function TJF(ByVal DateDeb, Optional ByVal DateFin = 0, Optional Pays = 33, Optional Region$ = "", Optional Lun_Pent As Boolean = 1, Optional Jour_Chome As Boolean = 0, Optional MDV As Boolean = 0, Optional Lib As Boolean = 0) As Variant
'********************************************************************************************************************
'                                                      Fonction TJF, jours fériés automatiques
'                                                      Auteur: Yeahou sur Exceldownloads
'Selon l 'utilisation :
'Elle détermine si une date donnée est fériée et renvoie un boolean.
'Elle renvoie un tableau des jours fériés, compris entre deux dates, utilisable avec les fonctions d'Excel acceptant un tableau de dates.
'Elle gère les spécificités régionales par un paramètre optionnel pour la région.
'La version 2.0 a intégré le choix du pays, France, Belgique, Suisse et Luxembourg. Un paramètre optionnel a été ajouté pour la gestion des jours chômés spécifiques à la Suisse et les cantons sont gérés par le paramètre régional.
'La version 3.0 l'a rendue utilisable en fonction matricielle renvoyant un tableau horizontal ou vertical, compatible matricielles standards et matricielles dynamiques Excel 365. La gestion des #N/A en calcul matriciel standard est intégrée dans la fonction.
'Cette fonctionnalité permet de remplacer facilement, dans un fichier existant, un tableau des jours fériés à mise à jour manuelle par un tableau des jours fériés entièrement automatisé ( voir fichier joint ).
'La version 3.3 a intégré en option la possibilité de renvoyer les libellés des jours fériés. Elle permet de faire un listing détaillé des jours fériés, libellés et dates, voir fichiers exemples.
'La version 4.0 a intégré l'Espagne, le Portugal et la Principauté de Monaco, les régions en Espagne et au Portugal sont gérées par le paramètre régional.
'
'Utilisable en formule (y compris encapsulée), par les fonctions de feuille acceptant un tableau, en MFC, par VBA, en matricielles standards (gestion des #N/A intégrée) et en matricielles dynamiques 365
'Cette fonction gère tous les jours fériés à date fixe et tous les jours fériés à date mobile déterminés par le dimanche de Pâques de l’année ( testé jusqu'à 2099 ) ou par la spécificité régionale. Elle comprend un
'paramétrage optionnel du lundi de Pentecôte (pour la France) et des jours fériés régionaux. Elle dispense de la tenue d'un calendrier des jours fériés pour les calculs, les MFC ou l'établissement de plannings/calendriers.
'France par défaut (avec régions), paramétrage optionnel du pays : Belgique (avec communauté), Suisse (avec cantons), Luxembourg, Monaco
'
'évolution des versions
'Fonction TJF V1.0 , Yeahou, simplification de la formule de calcul du Dimanche de Pâques par patricktoulon
'Fonction TJF V1.1 , Yeahou, correction des jours fériés DOMCOM
'Fonction TJF V2.0 , Yeahou, ajout du choix de pays, ajout de la Belgique, ajout de la Suisse, ajout du Luxembourg
'Fonction TJF V2.1 , Yeahou, réglement d'un bug sur les calculs de jours mobiles pour la Suisse et d'un bug sur le retour tableau en cas d'absence de jour férié sur la période définie
'Fonction TJF V2.3 , Yeahou, amélioration du calcul des jours mobiles pour la Suisse
'Fonction TJF V2.4 , Yeahou, réglement d'un bug de traitement des dates de début et de fin passés en paramètre, en nombre dans une feuille de calcul
'Fonction TJF V3.0 , Yeahou, intégration des formules matricielles horizontales et verticales avec une gestion des #N/A intégrée dans la fonction, compatible formules matricielles standard et matricielles dynamiques Excel 365
'Fonction TJF V3.1 , Yeahou, amélioration de la gestion des matricielles dynamiques Excel 365
'Fonction TJF V3.2 , Yeahou, ajout des libellés des jours fériés
'Fonction TJF V3.3 , Yeahou, ajout traitement des libellés des jours fériés en mode test une journée
'Fonction TJF V3.4 , Yeahou, amélioration du retour TJF en cas d'absence de jours fériés sur une période
'Fonction TJF V3.5 , Yeahou, optimisation du code et suppression de la redondance du calcul des jours mobiles religieux
'Fonction TJF V3.6 , Yeahou, suppression de la redondance du calcul des jours mobiles pour la suisse
'Fonction TJF V3.7 , Yeahou, optimisation des portées matricielles
'Fonction TJF V3.8 , Yeahou, tous les séparateurs de date par défaut sont gérés (obsolète en 3.9)
'Fonction TJF V3.9 , Yeahou, comparaisons de dates en entier DDMM
'Fonction TJF V3.93 , Yeahou, diverses petites corrections et améliorations
'Fonction TJF V4.0 , Yeahou, ajout de l'Espagne, du Portugal et de la Principauté de Monaco

'si DateFin est omis, teste si la journée est fériée et renvoie un boolean
'Renvoie un tableau des jours fériés compris entre deux dates utilisable avec les fonctions d'Excel acceptant un tableau de dates exemple : NB.JOURS.OUVRES
'Pays : paramétrage optionnel du pays, 33 ou omis France, 32 Belgique, 41 Suisse, 352 Luxembourg, 377 Monaco, 34 España, 351 Portugal
'Region : paramétrage optionnel de la région pour les jours fériés régionaux
'Lun_Pent : paramétrage optionnel du Lundi de Pentecôte pour la France, actif par défaut
'Jour_Chome : paramétrage optionnel pour l'intégration des jours chômés spécifiques à la suisse, inactif par défaut
'MDV : paramétrage optionnel pour l'orientation des matricielles dynamiques d'Excel 365 (0 ou omis pour horizontale, 1 pour verticale)
'Lib : report des libellés des jours fériés au lieu des dates en mode tableau ou d'un boolean en mode journée, inactif par défaut

'Paramètre Région

'Régions pour la France
'Region = "" ou omis => standard métropole (sauf Alsace-Moselle)
'Region = "ALM" => Alsace-Moselle
'Region = "GSM" => Guadeloupe & Saint-Martin
'Region = "GUY" => Guyane
'Region = "REU" => la Réunion
'Region = "MAR" => Martinique
'Region = "MAY" => Mayotte
'Region = "STB" => Saint-Barthélemy
'Region = "NCA" => Nouvelle-Calédonie
'Region = "POF" => Polynésie française
'Region = "WEF" => Wallis et Futuna

'Communautés pour la Belgique
'Region = "" ou omis => standard Belgique
'Region = "SID" => sidérurgie, la Saint Éloi (premier décembre) remplace le 11 novembre
'Region = "FLA" => Communauté Flamande
'Region = "FRA" => Communauté Française
'Region = "FLS" => Communauté Flamande et sidérurgie, la Saint Éloi (premier décembre) remplace le 11 novembre
'Region = "FRS" => Communauté Française et sidérurgie, la Saint Éloi (premier décembre) remplace le 11 novembre

'Cantons pour la Suisse
'Region = "AG" >= Argovie
'Region = "AI" => Appenzell Rhodes-Intérieures
'Region = "AR" => Appenzell Rhodes-Extérieures
'Region = "BE" >= Berne
'Region = "BL" >= Bâle - Campagne
'Region = "BS" >= Bâle - Ville
'Region = "FR" >= Fribourg
'Region = "GE" >= Genève
'Region = "GL" >= Glaris
'Region = "GR" >= Grisons
'Region = "JU" >= Jura
'Region = "LU" >= Lucerne
'Region = "NE" >= Neuchâtel
'Region = "NW" >= Nidwald
'Region = "OW" >= Obwald
'Region = "SG" >= Saint - Gall
'Region = "SH" >= Schaffhouse
'Region = "SO" >= Soleure
'Region = "SZ" >= Schwytz
'Region = "TG" >= Thurgovie
'Region = "TI" >= Tessin
'Region = "UR" >= Uri
'Region = "VD" >= Vaud
'Region = "VS" >= Valais
'Region = "ZG" >= Zoug
'Region = "ZH" >= Zurich

'Regiones para España
'Region = "AND" >= Andalucía
'Region = "ARA" >= Aragón
'Region = "CYL" >= Castilla y León
'Region = "CLM" >= Castilla-La Mancha
'Region = "ICA" >= las Canarias
'Region = "CAT" >= Catalunya
'Region = "EXT" >= Extremadura
'Region = "GAL" >= Galicia
'Region = "BAL" >= Illes Balears
'Region = "RIO" >= Rioja
'Region = "MAD" >= Comunidad de Madrid
'Region = "MUR" >= Murcia
'Region = "NAV" >= Navarra
'Region = "AST" >= Asturias
'Region = "VAS" >= País Vasco
'Region = "CAN" >= Cantabria
'Region = "VAL" >= Comunitat Valenciana
'Region = "CEU" >= Ceuta
'Region = "MEL" >= Melilla

'Regiões para Portugal
'Region = "" ou omitido => Portugal padrão
'Region = "ACO" >= Região Autónoma dos Açores
'Region = "MAD" >= Madeira e das Comunidades Madeirenses

'''utilisation TJF en VBA
''
'''pour déterminer si une journée est fériée
''Sub demo1()
''    Dim Date_Test
''    Date_Test = InputBox("Entrez une date en format jj/mm/aaaa ou en valeur", "Demande", "13/05/2021")
''    If IsDate(Date_Test) Or IsNumeric(Date_Test) Then MsgBox "Le " & Format(Date_Test, "dddd dd mmmm yyyy") & " est férié : " & vbLf & vbLf & TJF(Date_Test), vbOKOnly + vbInformation _
''        Else: MsgBox "La valeur :" & vbLf & Date_Test & vbLf & " n'est pas une date valide", vbOKOnly + vbInformation
''End Sub
'''pour récupérer un libellé
''Sub demo2()
''    Dim Date_Test
''    Date_Test = InputBox("Entrez une date en format jj/mm/aaaa ou en valeur", "Demande", "13/05/2021")
''    If IsDate(Date_Test) Or IsNumeric(Date_Test) Then MsgBox "Le " & Format(Date_Test, "dddd dd mmmm yyyy") & " est férié : " & vbLf & vbLf & TJF(Date_Test) & IIf(TJF(Date_Test), ", ", "") & TJF(DateDeb:=Date_Test, Lib:=True), vbOKOnly + vbInformation _
''        Else: MsgBox "La valeur :" & vbLf & Date_Test & vbLf & " n'est pas une date valide", vbOKOnly + vbInformation
''End Sub
'''pour récupérer un tableau vb des jours fériés
''Sub demo3()
''    Dim Tablo, Tablo2$(), x&
''    Dim Date_Deb, Date_Fin
''    'définition des dates de début et fin de période en nombre ou en valeur
''    Date_Deb = "01/01/2021": Date_Fin = "31/12/2022"
''    Date_Deb = InputBox("Entrez une date de début en format jj/mm/aaaa ou en valeur", "Demande", Date_Deb)
''    Date_Fin = InputBox("Entrez une date de fin en format jj/mm/aaaa ou en valeur", "Demande", Date_Fin)
''    If (IsDate(Date_Deb) Or IsNumeric(Date_Deb)) And (IsDate(Date_Fin) Or IsNumeric(Date_Fin)) Then
''        'récupération en tableau
''        Tablo = TJF(Date_Deb, Date_Fin)
''        If Not Tablo(LBound(Tablo)) = "" Then
''            ReDim Tablo2(LBound(Tablo) To UBound(Tablo))
''            For x = LBound(Tablo2) To UBound(Tablo2)
''                Tablo2(x) = Format(Tablo(x), "dddd dd mmmm yyyy")
''            Next x
''            If Not Tablo2(1) = "" Then MsgBox "Il y a " & UBound(Tablo2) - LBound(Tablo2) + 1 & " jours fériés sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy") & " : " & vbLf & vbLf & Join(Tablo2, vbLf), vbOKOnly + vbInformation
''        Else
''            MsgBox "Il y a aucun jour férié sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy"), vbOKOnly + vbInformation
''        End If
''    End If
''End Sub
'''pour récupérer un tableau vb des jours fériés avec leurs libellés
''Sub demo4()
''    Dim Tablo, Tablo2$(), Tablo3, x&
''    Dim Date_Deb, Date_Fin
''    'définition des dates de début et fin de période en nombre ou en valeur
''    Date_Deb = "01/01/2021": Date_Fin = "31/12/2022"
''    Date_Deb = InputBox("Entrez une date de début en format jj/mm/aaaa ou en valeur", "Demande", Date_Deb)
''    Date_Fin = InputBox("Entrez une date de fin en format jj/mm/aaaa ou en valeur", "Demande", Date_Fin)
''    If (IsDate(Date_Deb) Or IsNumeric(Date_Deb)) And (IsDate(Date_Fin) Or IsNumeric(Date_Fin)) Then
''        'récupération en tableaux
''        Tablo = TJF(Date_Deb, Date_Fin)
''        If Not Tablo(LBound(Tablo)) = "" Then
''            Tablo3 = TJF(DateDeb:=Date_Deb, DateFin:=Date_Fin, Lib:=1)
''            ReDim Tablo2(LBound(Tablo) To UBound(Tablo))
''            For x = LBound(Tablo2) To UBound(Tablo2)
''                Tablo2(x) = Format(Tablo(x), "dddd dd mmmm yyyy") & ", " & Tablo3(x)
''            Next x
''            MsgBox "Il y a " & UBound(Tablo2) - LBound(Tablo2) + 1 & " jours fériés sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy") & " : " & vbLf & vbLf & Join(Tablo2, vbLf), vbOKOnly + vbInformation
''        Else
''            MsgBox "Il y a aucun jour férié sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy"), vbOKOnly + vbInformation
''        End If
''    End If
''End Sub
'''pour récupérer un tableau vb des jours fériés avec leurs libellés, Suisse, Canton de Genève, jours chomés intégrés aux jours fériés
''Sub demo4B()
''    Dim Tablo, Tablo2$(), Tablo3, x&
''    Dim Date_Deb, Date_Fin
''    'définition des dates de début et fin de période en nombre ou en valeur
''    Date_Deb = "01/01/2021": Date_Fin = "31/12/2022"
''    Date_Deb = InputBox("Entrez une date de début en format jj/mm/aaaa ou en valeur", "Demande", Date_Deb)
''    Date_Fin = InputBox("Entrez une date de fin en format jj/mm/aaaa ou en valeur", "Demande", Date_Fin)
''    If (IsDate(Date_Deb) Or IsNumeric(Date_Deb)) And (IsDate(Date_Fin) Or IsNumeric(Date_Fin)) Then
''        'récupération en tableaux
''        Tablo = TJF(DateDeb:=Date_Deb, DateFin:=Date_Fin, Pays:=41, Region:="GE", Jour_Chome:=1)
''        If Not Tablo(LBound(Tablo)) = "" Then
''            Tablo3 = TJF(DateDeb:=Date_Deb, DateFin:=Date_Fin, Pays:=41, Region:="GE", Jour_Chome:=1, Lib:=1)
''            ReDim Tablo2(LBound(Tablo) To UBound(Tablo))
''            For x = LBound(Tablo2) To UBound(Tablo2)
''                Tablo2(x) = Format(Tablo(x), "dddd dd mmmm yyyy") & ", " & Tablo3(x)
''            Next x
''            MsgBox "Il y a " & UBound(Tablo2) - LBound(Tablo2) + 1 & " jours fériés/chômés pour le Canton de Genève sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy") & " : " & vbLf & vbLf & Join(Tablo2, vbLf), vbOKOnly + vbInformation
''        Else
''            MsgBox "Il y a aucun jour férié/chômé pour le Canton de Genève sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy"), vbOKOnly + vbInformation
''        End If
''    End If
''End Sub
'********************************************************************************************************************
Region = UCase(Region)
'vérification des arguments Pays et Région
Select Case Pays
    Case 33 'France
        Select Case Region
        Case "", "ALM", "GSM", "GUY", "REU", "MAR", "MAY", "STB", "NCA", "POF", "WEF"
        Case Else
            TJF = "Argument Région " & Chr(34) & Region & Chr(34) & " incorrect": Exit Function
        End Select
    Case 32 'Belgique
        Select Case Region
        Case "", "FRA", "FLA", "SID", "FRS", "FLS"
        Case Else
            TJF = "Argument Région " & Chr(34) & Region & Chr(34) & " incorrect": Exit Function
        End Select
    Case 41 'Suisse
        Select Case Region
        Case "AG", "AI", "AR", "BE", "BL", "BS", "FR", "GE", "GL", "GR", "JU", "LU", "NE", "NW", "OW", "SG", "SH", "SO", "SZ", "TG", "TI", "UR", "VD", "VS", "ZG", "ZH"
            Dim Date_Ref As Date, Num_Cible As Byte, Jour_Sem As Byte, Decal_Jour%, Mois_Ref As Byte 'valeurs
            Dim Fahrtsfest%, Jeune_Genevois%, Lundi_du_Jeune_Federal% 'fêtes mobiles
        Case Else
            TJF = "Configuración de región " & Chr(34) & Region & Chr(34) & " incorrecta": Exit Function
        End Select
    Case 352 'Luxembourg
    Case 377 'Monaco
    Case 34 'España
        Select Case Region
        Case "AND", "ARA", "CYL", "CLM", "ICA", "CAT", "EXT", "GAL", "BAL", "RIO", "MAD", "MUR", "NAV", "AST", "VAS", "CAN", "VAL", "CEU", "MEL"
        Case Else
            TJF = "Configuración de región " & Chr(34) & Region & Chr(34) & " incorrecta": Exit Function
        End Select
    Case 351 'Portugal
        Select Case Region
        Case "", "ACO", "MAD"
        Case Else
            TJF = "Configuração de região " & Chr(34) & Region & Chr(34) & " incorreta": Exit Function
        End Select
    Case Else
        TJF = "Argument Pays " & Chr(34) & Pays & Chr(34) & " incorrect": Exit Function
End Select
Dim Test_J As Boolean
'concordance des dates
If IsDate(DateDeb) And IsDate(DateFin) Then
    Select Case CDate(DateFin)
        Case 0
            DateFin = DateDeb
            Test_J = True
        Case Is < CDate(DateDeb)
            TJF = "Date de fin inférieure à la date de début": Exit Function
    End Select
Else
    Select Case DateFin
        Case 0
            DateFin = DateDeb
            Test_J = True
        Case Is < DateDeb
            TJF = "Date de fin inférieure à la date de début": Exit Function
    End Select
End If
Dim Annee%, DateX As Date, LibJF$, Val1%  'valeurs
Dim JF() As Date, JF2(), LibTJF$() 'tableaux
Dim Date_Dim_Paques As Date, Mar_Gras%, Jeu_Saint%, Ven_Saint%, Dim_Paques%, Lun_Paques%, Ascension%, Pentecote%, Fete_Dieu% 'fêtes mobiles
Dim Premier_An%, Epiphanie%, Saint_Joseph%, Premier_Mai%, Assomption%, Toussaint%, Noel%, Saint_Etienne%, Armistice%, Immaculee_Conception% 'fêtes fixes communes
'définition des fêtes fixes communes
Premier_An = 101: Epiphanie = 601: Saint_Joseph = 1903: Premier_Mai = 105: Assomption = 1508: Toussaint = 111: Armistice = 1111: Immaculee_Conception = 812: Noel = 2512: Saint_Etienne = 2612
For DateX = DateDeb To DateFin
    If Not Annee = Year(DateX) Then 'calcul du Dimanche de Pâques et des fêtes mobiles sur changement d'année de DateX
        Annee = Year(DateX)
        Date_Dim_Paques = CDate(((Round(DateSerial(Annee, 4, (234 - 11 * (Annee Mod 19)) Mod 30) / 7, 0) * 7) - 6)) 'simplification du calcul originel du dimanche de Pâques by patricktoulon
        Mar_Gras = CInt(Format(Date_Dim_Paques - 47, "ddmm")) 'Calcul Mardi Gras, 47 jours avant le Dimanche de Pâques, début de la semaine grasse avant le jeune de 40 jours du Carème
        Jeu_Saint = CInt(Format(Date_Dim_Paques - 3, "ddmm")) 'Calcul Jeudi Saint, jeudi précédant le Dimanche de Pâques
        Ven_Saint = CInt(Format(Date_Dim_Paques - 2, "ddmm")) 'Calcul Vendredi Saint, vendredi précédant le Dimanche de Pâques
        Dim_Paques = CInt(Format(Date_Dim_Paques, "ddmm")) 'Dimanche de Pâques
        Lun_Paques = CInt(Format(Date_Dim_Paques + 1, "ddmm")) 'Calcul Lundi de Pâques, lundi suivant le Dimanche de Pâques
        Ascension = CInt(Format(Date_Dim_Paques + 39, "ddmm")) 'Calcul Ascension, 39 jours après le Dimanche de Pâques
        Pentecote = CInt(Format(Date_Dim_Paques + 50, "ddmm")) 'Calcul Pentecôte, 50 jours après le Dimanche de Pâques
        Fete_Dieu = CInt(Format(Date_Dim_Paques + 60, "ddmm"))  'Calcul Fête Dieu, 60 jours après le Dimanche de Pâques
        If Pays = 41 Then
            'Calcul Fahrtsfest, Premier jeudi d'avril
            Jour_Sem = 4: Mois_Ref = 4: Num_Cible = 1 'premier jeudi d'avril
            Date_Ref = DateSerial(Year:=Annee, Month:=Mois_Ref, Day:=1)
            Decal_Jour = Jour_Sem - Weekday(Date_Ref, 2): If Decal_Jour >= 0 Then Decal_Jour = Decal_Jour - 7
            Fahrtsfest = CInt(Format(Date_Ref + Decal_Jour + (Num_Cible * 7), "ddmm"))  'Calcul Fahrtsfest, Premier jeudi d'avril
            'Calcul Jeûne genevois, jeudi suivant le 1er dimanche de septembre
            Jour_Sem = 7: Mois_Ref = 9: Num_Cible = 1 'premier dimanche de septembre
            Date_Ref = DateSerial(Year:=Annee, Month:=Mois_Ref, Day:=1)
            Decal_Jour = Jour_Sem - Weekday(Date_Ref, 2): If Decal_Jour >= 0 Then Decal_Jour = Decal_Jour - 7
            Jeune_Genevois = CInt(Format(Date_Ref + Decal_Jour + (Num_Cible * 7) + 4, "ddmm"))  'Calcul Jeûne genevois, premier dimanche de septembre + 4 jours pour le jeudi
            'Calcul Lundi du Jeûne fédéral, lundi suivant le 3e dimanche de septembre
            Jour_Sem = 7: Mois_Ref = 9: Num_Cible = 3 'troisième dimanche de septembre
            Date_Ref = DateSerial(Year:=Annee, Month:=Mois_Ref, Day:=1)
            Decal_Jour = Jour_Sem - Weekday(Date_Ref, 2): If Decal_Jour >= 0 Then Decal_Jour = Decal_Jour - 7
            Lundi_du_Jeune_Federal = CInt(Format(Date_Ref + Decal_Jour + (Num_Cible * 7) + 1, "ddmm"))  'Calcul Lundi du Jeûne fédéral, troisième dimanche de septembre + 1 jour pour le lundi
        End If
    End If
    LibJF = ""
    Select Case Pays
    Case 33 'France
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'commun,Premier janvier
                LibJF = "Premier janvier"
            Case Lun_Paques 'commun,Lundi de Pâques
                LibJF = "Lundi de Pâques"
            Case Premier_Mai 'commun, Fête du travail
                LibJF = "Fête du travail"
            Case 805 'commun, Victoire des alliés
                LibJF = "Victoire des alliés"
            Case Ascension 'commun, Jeudi de l'Ascension
                LibJF = "Jeudi de l'Ascension"
            Case Pentecote 'commun,Lundi de Pentecôte
                If Lun_Pent Then LibJF = "Lundi de Pentecôte"
            Case 1407 'commun, Fête nationale
                LibJF = "Fête nationale"
            Case Assomption 'commun, Assomption
                LibJF = "Assomption"
            Case Toussaint 'commun, Toussaint
                LibJF = "Toussaint"
            Case Armistice 'commun, Armistice
                LibJF = "Armistice"
            Case Noel 'commun, Noël
                LibJF = "Noël"
            Case Ven_Saint 'Alsace Moselle, Vendredi Saint
                If Region = "ALM" Then LibJF = "Vendredi Saint"
            Case Saint_Etienne  'Alsace Moselle, Saint Etienne
                If Region = "ALM" Then LibJF = "Saint Etienne"
            Case 2705  'Guadeloupe & Saint-Martin, Abolition de l'esclavage
                If Region = "GSM" Then LibJF = "Abolition de l'esclavage"
            Case 1006 'Guyane, Abolition de l'esclavage
                If Region = "GUY" Then LibJF = "Abolition de l'esclavage"
            Case 2012 'La Réunion, Abolition de l'esclavage
                If Region = "REU" Then LibJF = "Abolition de l'esclavage"
           Case 2205 'Martinique, Abolition de l'esclavage
                If Region = "MAR" Then LibJF = "Abolition de l'esclavage"
            Case 2704 'Mayotte, Abolition de l'esclavage
                If Region = "MAY" Then LibJF = "Abolition de l'esclavage"
            Case 910 'Saint-Barthélemy, Abolition de l'esclavage
                If Region = "STB" Then LibJF = "Abolition de l'esclavage"
            Case 2409 'Nouvelle-Calédonie, Fête de la citoyenneté
                If Region = "NCA" Then LibJF = "Fête de la citoyenneté"
            Case 503 'Polynésie française, Arrivée de l'Évangile
                If Region = "POF" Then LibJF = "Arrivée de l'Évangile"
            Case 2906 'Polynésie française, Fête de l’autonomie
                If Region = "POF" Then LibJF = "Fête de l’autonomie"
            Case 2804 'Wallis et Futuna, Saint Pierre Chanel
                If Region = "WEF" Then LibJF = "Saint Pierre Chanel"
            Case 2907  'Wallis et Futuna, Fête du territoire
                If Region = "WEF" Then LibJF = "Fête du territoire"
        End Select
    Case 32 'Belgique
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'commun,Premier janvier
                LibJF = "Premier janvier"
            Case Lun_Paques 'commun,Lundi de Pâques
                LibJF = "Lundi de Pâques"
            Case Premier_Mai 'commun, Fête du travail
                LibJF = "Fête du travail"
            Case Ascension 'commun, Jeudi de l'Ascension
                LibJF = "Jeudi de l'Ascension"
            Case Pentecote 'commun,Lundi de Pentecôte
                LibJF = "Lundi de Pentecôte"
            Case 2107 'commun, Fête nationale
                LibJF = "Fête nationale"
            Case Assomption 'commun, Assomption
                LibJF = "Assomption"
            Case Toussaint 'commun, Toussaint
                LibJF = "Toussaint"
            Case Armistice 'Armistice
                Select Case Region
                    Case "SID", "FLS", "FRS"
                    Case Else
                        LibJF = "Armistice"
                End Select
            Case 112 'Saint Éloi, sidérurgie
                Select Case Region
                    Case "SID", "FLS", "FRS"
                        LibJF = "Saint Éloi"
                End Select
            Case Noel 'commun, Noël
                LibJF = "Noël"
            Case 1107 'Communauté Flamande
                Select Case Region
                    Case "FLA", "FLS"
                        LibJF = "Communauté Flamande"
                End Select
            Case 2709 'Communauté Française
                Select Case Region
                    Case "FRA", "FRS"
                        LibJF = "Communauté Française"
                End Select
        End Select
    Case 41 'Suisse
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'commun,Premier janvier
                LibJF = "Premier janvier"
            Case 201  'Saint Berchtold
                Select Case Region
                    Case "AG", "BE", "JU", "VD", "ZG"
                        LibJF = "Saint Berchtold"
                    Case "NE"
                        If Application.Weekday(DateX - 1, 2) = 7 Then LibJF = "Saint Berchtold(dimanche 01/01)"
                    Case Else
                        If Jour_Chome Then
                            Select Case Region
                                Case "FR", "GL", "LU", "OW", "SH", "SO", "ZH"
                                    LibJF = "Saint Berchtold, chômé"
                            End Select
                        End If
                End Select
            Case Epiphanie 'Épiphanie
                Select Case Region
                    Case "SZ", "TI", "UR"
                        LibJF = "Épiphanie"
                End Select
            Case 103 'Instauration de la République
                If Region = "NE" Then LibJF = "Instauration de la République"
            Case Saint_Joseph 'Saint Joseph
                Select Case Region
                    Case "LU", "NW", "SZ", "TI", "UR", "VS"
                        LibJF = "Saint Joseph"
                End Select
            Case Fahrtsfest 'Fahrtsfest, Premier jeudi d'avril
                If Region = "GL" Then LibJF = "Fahrtsfest"
            Case Ven_Saint 'Vendredi saint
                Select Case Region
                    Case "AG", "AI", "AR", "BE", "BL", "BS", "FR", "GE", "GL", "GR", "JU", "LU", "NE", "NW", "OW", "SG", "SH", "SO", "SZ", "TG", "UR", "VD", "ZG", "ZH"
                        LibJF = "Vendredi saint"
                End Select
            Case Lun_Paques 'Lundi de Pâques
                Select Case Region
                    Case "AG", "AI", "AR", "BE", "BL", "BS", "GE", "GL", "GR", "JU", "SG", "SH", "SZ", "TG", "TI", "UR", "VD", "ZH"
                        LibJF = "Lundi de Pâques"
                    Case Else
                        If Jour_Chome Then
                            Select Case Region
                                Case "FR", "LU", "NE", "NW", "OW", "SO", "VS", "ZG"
                                    LibJF = "Lundi de Pâques, chômé"
                            End Select
                        End If
                End Select
            Case Premier_Mai 'Fête du travail
                Select Case Region
                    Case "BL", "BS", "JU", "NE", "SH", "TI", "UR", "ZH"
                        LibJF = "Fête du travail"
                    Case Else
                        If Jour_Chome And Region = "GE" Then LibJF = "Fête du travail, chômé"
                End Select
            Case Ascension 'commun,Jeudi de l'Ascension
                LibJF = "Jeudi de l'Ascension"
            Case Pentecote 'Lundi de Pentecôte
                Select Case Region
                    Case "AG", "AI", "AR", "BE", "BL", "BS", "GE", "GL", "GR", "JU", "SG", "SH", "SZ", "TG", "TI", "UR", "VD", "ZH"
                        LibJF = "Lundi de Pentecôte"
                    Case Else
                        If Jour_Chome Then
                            Select Case Region
                                Case "FR", "LU", "NE", "NW", "OW", "SO", "VS", "ZG"
                                    LibJF = "Lundi de Pentecôte, chômé"
                            End Select
                        End If
                End Select
            Case 2306 'Commémoration du plébiscite
                If Region = "JU" Then LibJF = "Commémoration du plébiscite"
            Case Fete_Dieu 'Fête-Dieu
                Select Case Region
                    Case "AG", "AI", "FR", "JU", "LU", "NW", "OW", "SO", "SZ", "TI", "UR", "VS", "ZG"
                        LibJF = "Fête-Dieu"
                End Select
            Case 2906 'Saint-Pierre et Paul
                If Region = "TI" Then LibJF = "Saint-Pierre et Paul"
            Case 108 'commun, Fête nationale
                LibJF = "Fête nationale"
            Case Assomption 'Assomption
                Select Case Region
                    Case "AG", "AI", "FR", "GR", "JU", "LU", "NW", "OW", "SO", "SZ", "TI", "UR", "VS", "ZG"
                        LibJF = "Assomption"
                End Select
            Case Jeune_Genevois 'Jeûne genevois, jeudi suivant le 1er dimanche de septembre
                If Region = "GE" Then LibJF = "Jeûne genevois"
            Case Lundi_du_Jeune_Federal 'Lundi du Jeûne fédéral, lundi suivant le 3e dimanche de septembre
                If Region = "VD" Then
                    LibJF = "Lundi du Jeûne fédéral"
                Else
                    If Jour_Chome And Region = "NE" Then LibJF = "Lundi du Jeûne fédéral, chômé"
                End If
            Case 2509 'Fête de Saint-Nicolas-de-Flüe
                If Region = "OW" Then LibJF = "Fête de Saint-Nicolas-de-Flüe"
            Case Toussaint 'Toussaint
                Select Case Region
                    Case "AI", "FR", "GL", "JU", "LU", "NW", "OW", "SG", "SO", "TI", "UR", "VS", "ZG"
                        LibJF = "Toussaint"
                End Select
            Case Immaculee_Conception 'Immaculée Conception
                Select Case Region
                    Case "FR", "LU", "NW", "OW", "TI", "UR", "VS", "ZG"
                        LibJF = "Immaculée Conception"
                End Select
            Case Noel 'commun, Noël
                LibJF = "Noël"
            Case Saint_Etienne 'Saint-Étienne
                Select Case Region
                    Case "AG", "AI", "AR", "BE", "BL", "BS", "GL", "GR", "LU", "SG", "SH", "SZ", "TG", "TI", "UR", "ZH"
                        LibJF = "Saint-Étienne"
                    Case "NE"
                        If Application.Weekday(DateX - 1, 2) = 7 Then LibJF = "Saint-Étienne(dimanche 25/12)"
                    Case Else
                        If Jour_Chome Then
                            Select Case Region
                                Case "FR", "NW", "OW", "SO", "ZG"
                                    LibJF = "Saint-Étienne, chômé"
                            End Select
                        End If
                End Select
            Case 3112 'Restauration de la République
                If Region = "GE" Then LibJF = "Restauration de la République"
        End Select
    Case 352 'Luxembourg
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'Premier janvier
                LibJF = "Premier janvier"
            Case Lun_Paques 'Lundi de Pâques
                LibJF = "Lundi de Pâques"
            Case Premier_Mai 'Fête du travail
                LibJF = "Fête du travail"
            Case 905 'Journée de l'Europe
                LibJF = "Journée de l'Europe"
            Case Ascension 'Jeudi de l'Ascension
                LibJF = "Jeudi de l'Ascension"
            Case Pentecote 'Lundi de Pentecôte
                LibJF = "Lundi de Pentecôte"
            Case 2306 'Anniversaire du Grand Duc
                LibJF = "Anniversaire du Grand Duc"
            Case Assomption 'Assomption
                LibJF = "Assomption"
            Case Toussaint 'Toussaint
                LibJF = "Toussaint"
            Case Noel 'Noël
                LibJF = "Noël"
            Case Saint_Etienne  'Saint Etienne
                LibJF = "Saint Etienne"
        End Select
    Case 377 'Monaco
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'Premier janvier
                LibJF = "Premier janvier"
            Case 2701 'Sainte Dévote
                LibJF = "Sainte Dévote"
            Case Lun_Paques 'Lundi de Pâques
                LibJF = "Lundi de Pâques"
            Case Premier_Mai 'Fête du travail
                LibJF = "Fête du travail"
            Case Ascension 'Jeudi de l'Ascension
                LibJF = "Jeudi de l'Ascension"
            Case Pentecote 'Lundi de Pentecôte
                LibJF = "Lundi de Pentecôte"
            Case Fete_Dieu 'Fête-Dieu
                LibJF = "Fête-Dieu"
            Case Assomption 'Assomption
                LibJF = "Assomption"
            Case Toussaint 'Toussaint
                LibJF = "Toussaint"
            Case 1911 'Fête du Prince Monégasque
                LibJF = "Fête du Prince Monégasque"
            Case Immaculee_Conception 'Immaculée Conception
                LibJF = "Immaculée Conception"
            Case Noel 'Noël
                LibJF = "Noël"
        End Select
    Case 34 'España
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'Año Nuevo
                LibJF = "Año Nuevo"
            Case Epiphanie 'Epifanía del Señor
                LibJF = "Epifanía del Señor"
            Case 2802 'Día de Andalucía
                If Region = "AND" Then LibJF = "Día de Andalucía"
            Case 103 'Dia de les Illes Balears
                If Region = "BAL" Then LibJF = "Dia de les Illes Balears"
            Case 1903 'San José
                If Region = "MUR" Or Region = "VAL" Then LibJF = "San José"
            Case Jeu_Saint 'Jueves Santo
                Select Case Region
                    Case "MUR", "VAL"
                        LibJF = "Jueves Santo"
                End Select
            Case Ven_Saint 'Viernes Santo
                LibJF = "Viernes Santo"
            Case Lun_Paques 'Lunes de Pascua
                Select Case Region
                    Case "CAT", "BAL", "NAV", "VAS", "VAL"
                        LibJF = "Lunes de Pascua"
                End Select
            Case 2304 'Día de Aragón, Día de Castilla y León
                If Region = "ARA" Then LibJF = "Día de Aragón"
                If Region = "CYL" Then LibJF = "Día de Castilla y León"
            Case Premier_Mai 'Día del Trabajador
                LibJF = "Día del Trabajador"
            Case 205 'Fiesta de la Comunidad de Madrid
                If Region = "MAD" Then LibJF = "Fiesta de la Comunidad de Madrid"
            Case 305 'Dia de la Cruz
                If Region = "AND" Then LibJF = "Dia de la Cruz"
            Case 1705 'Día das Letras Galegas
                If Region = "BAL" Then LibJF = "Día das Letras Galegas"
            Case 3005 'Día de las Canarias
                If Region = "ICA" Then LibJF = "Día de las Canarias"
            Case 3105 'Día de la Región Castilla-La Mancha
                If Region = "CLM" Then LibJF = "Día de la Región Castilla-La Mancha"
            Case Fete_Dieu 'Corpus Christi
                If Region = "MAD" Then LibJF = "Corpus Christi"
            Case 906 'Día de Aragón, Día de la Región de Murcia
                If Region = "RIO" Then LibJF = "Día de La Rioja"
                If Region = "MUR" Then LibJF = "Día de la Región de Murcia"
            Case 2406 'Sant Joan
                If Region = "CAT" Then LibJF = "Sant Joan"
            Case 2507 'Santiago Apóstol
                If Region = "GAL" Then LibJF = "Santiago Apóstol"
            Case Assomption 'Asunción
                LibJF = "Asunción"
            Case 209 'Día de Ceuta
                If Region = "CEU" Then LibJF = "Día de Ceuta"
            Case 809 'Día de Asturias, Día de Extremadura
                If Region = "AST" Then LibJF = "Día de Asturias"
                If Region = "EXT" Then LibJF = "Día de Extremadura"
            Case 1109 'Diada Nacional de Catalunya
                If Region = "CAT" Then LibJF = "Diada Nacional de Catalunya"
            Case 1509 'Día de Cantabria
                If Region = "CAN" Then LibJF = "Día de Cantabria"
            Case 1709 'Día de Melilla
                If Region = "MEL" Then LibJF = "Día de Melilla"
            Case 910 'Dia de la Comunitat Valenciana
                If Region = "VAL" Then LibJF = "Dia de la Comunitat Valenciana"
            Case 1210 'Fiesta Nacional de España
                LibJF = "Fiesta Nacional de España"
            Case 2510 'Euskadi Eguna
                If Region = "VAS" Then LibJF = "Euskadi Eguna"
            Case Toussaint 'Día de todos los Santos
                LibJF = "Día de todos los Santos"
            Case 612 'Día de la Constitución
                LibJF = "Día de la Constitución"
            Case Immaculee_Conception 'Inmaculada Concepción
                LibJF = "Inmaculada Concepción"
            Case Noel 'Navidad
                LibJF = "Navidad"
            Case Saint_Etienne  'Sant Esteve
                If Region = "CAT" Then LibJF = "Sant Esteve"
        End Select
        Case 351 'Portugal
        Select Case CInt(Format(DateX, "ddmm"))
            Case Premier_An 'Ano Novo
                LibJF = "Ano Novo"
            Case Mar_Gras 'Carnaval
                LibJF = "Carnaval"
            Case Ven_Saint 'Sexta-feira Santa
                LibJF = "Sexta-feira Santa"
            Case Dim_Paques 'Domingo de Páscoa
                LibJF = "Domingo de Páscoa"
            Case 2504 'Dia da Liberdade
                LibJF = "Dia da Liberdade"
            Case Premier_Mai 'Dia do Trabalhador
                LibJF = "Dia do Trabalhador"
            Case Pentecote 'Dia da Região Autónoma dos Açores
                If Region = "ACO" Then LibJF = "Dia da Região Autónoma dos Açores"
            Case Fete_Dieu 'Corpo de Deus
                LibJF = "Corpo de Deus"
            Case 1006 'Dia de Portugal
                LibJF = "Dia de Portugal"
            Case 107 'Dia da Região Autónoma da Madeira
                If Region = "MAD" Then LibJF = "Dia da Região Autónoma da Madeira"
            Case Assomption 'Assunção de Nossa Senhora
                LibJF = "Assunção de Nossa Senhora"
            Case 510 'Implantação da República
                LibJF = "Implantação da República"
            Case Toussaint 'Dia de Todos-os-Santos
                LibJF = "Dia de Todos-os-Santos"
            Case 112 'Restauração da Independência
                LibJF = "Restauração da Independência"
            Case Immaculee_Conception 'Imaculada Conceição
                LibJF = "Imaculada Conceição"
            Case Noel 'Natal
                LibJF = "Natal"
            Case Saint_Etienne 'Primeira Oitava
                If Region = "MAD" Then LibJF = "Primeira Oitava"
        End Select
    End Select
    If Not LibJF = "" Then
        Val1 = Val1 + 1
        ReDim Preserve LibTJF(1 To Val1): LibTJF(Val1) = LibJF
        ReDim Preserve JF(1 To Val1): JF(Val1) = DateX
    End If
Next DateX
If Test_J Then
    If Lib Then TJF = LibJF Else TJF = IIf(LibJF = "", False, True)
Else
    If Val1 = 0 Then ReDim JF2(1): TJF = JF2: Exit Function
    Dim Val2%, Val3%, Val4%, Test_MD
    With Application
        '<pour initialisation matricielle dynamique>
        If Lib Then
            TJF = IIf(MDV, .Transpose&(LibTJF), LibTJF)
        Else
            TJF = IIf(MDV, .Transpose&(JF), JF)
        End If
        '</>
        If TypeName(.Caller) = "Range" Then
            .Volatile
            With .ThisCell
                If .FormulaArray = .Offset(0, 1).FormulaArray And Not MDV Then
                    Test_MD = Range(.Address & ":" & .Offset(0, 1).Address).Formula 'pour test matricielle dynamique
                    If Test_MD(1, 1) = Test_MD(1, 2) Then 'teste si matricielle non dynamique
                        For Val3 = 1 To 3000
                            If Not .FormulaArray = .Offset(0, Val3).FormulaArray Then Exit For
                        Next Val3
                    End If
                    If Val3 < Val1 Then Val3 = Val1 'pour le redimensionnement des matricielles dynamiques après modification des données d'entrée
                    ReDim JF2(1 To Val3)
                    Val4 = UBound(JF)
                    For Val2 = 1 To Val3
                        If Val2 > Val4 Or Val1 = 0 Then JF2(Val2) = "" Else JF2(Val2) = IIf(Lib, LibTJF(Val2), JF(Val2))
                    Next Val2
                    TJF = JF2
                Else
                    If .FormulaArray = .Offset(1, 0).FormulaArray Then 'teste si matricielle
                        If MDV Then
                            Val3 = Val1
                        Else
                            For Val3 = 1 To 3000
                                If Not .FormulaArray = .Offset(Val3, 0).FormulaArray Then Exit For
                            Next Val3
                        End If
                        ReDim JF2(1 To Val3)
                        Val4 = UBound(JF)
                        For Val2 = 1 To Val3
                            If Val2 > Val4 Or Val1 = 0 Then JF2(Val2) = "" Else JF2(Val2) = IIf(Lib, LibTJF(Val2), CLng(JF(Val2)))
                        Next Val2
                        TJF = Application.Transpose(JF2)
                    Else
                        '<pour matricielles dynamiques sans report de matrice ou matricielle sans portée>
                        Select Case Val1
                            Case 0
                                TJF = ""
                            Case 1
                                TJF = IIf(Lib, LibTJF, CLng(JF(1)))
                        End Select
                        '</>
                    End If
                End If
            End With
        End If
    End With
End If
End Function

exemples VBA
VB:
'utilisation TJF en VBA

'pour déterminer si une journée est fériée
Sub demo1()
    Dim Date_Test
    Date_Test = InputBox("Entrez une date en format jj/mm/aaaa ou en valeur", "Demande", "13/05/2021")
    If IsDate(Date_Test) Or IsNumeric(Date_Test) Then MsgBox "Le " & Format(Date_Test, "dddd dd mmmm yyyy") & " est férié : " & vbLf & vbLf & TJF(Date_Test), vbOKOnly + vbInformation _
        Else MsgBox "La valeur :" & vbLf & Date_Test & vbLf & " n'est pas une date valide", vbOKOnly + vbInformation
End Sub
'pour récupérer un libellé
Sub demo2()
    Dim Date_Test
    Date_Test = InputBox("Entrez une date en format jj/mm/aaaa ou en valeur", "Demande", "13/05/2021")
    If IsDate(Date_Test) Or IsNumeric(Date_Test) Then MsgBox "Le " & Format(Date_Test, "dddd dd mmmm yyyy") & " est férié : " & vbLf & vbLf & TJF(Date_Test) & IIf(TJF(Date_Test), ", ", "") & TJF(DateDeb:=Date_Test, Lib:=True), vbOKOnly + vbInformation _
        Else MsgBox "La valeur :" & vbLf & Date_Test & vbLf & " n'est pas une date valide", vbOKOnly + vbInformation
End Sub
'pour récupérer un tableau vb des jours fériés
Sub demo3()
    Dim Tablo, Tablo2$(), x&
    Dim Date_Deb, Date_Fin
    'définition des dates de début et fin de période en nombre ou en valeur
    Date_Deb = "01/01/2021": Date_Fin = "31/12/2022"
    Date_Deb = InputBox("Entrez une date de début en format jj/mm/aaaa ou en valeur", "Demande", Date_Deb)
    Date_Fin = InputBox("Entrez une date de fin en format jj/mm/aaaa ou en valeur", "Demande", Date_Fin)
    If (IsDate(Date_Deb) Or IsNumeric(Date_Deb)) And (IsDate(Date_Fin) Or IsNumeric(Date_Fin)) Then
        'récupération en tableau
        Tablo = TJF(Date_Deb, Date_Fin)
        If Not Tablo(LBound(Tablo)) = "" Then
            ReDim Tablo2(LBound(Tablo) To UBound(Tablo))
            For x = LBound(Tablo2) To UBound(Tablo2)
                Tablo2(x) = Format(Tablo(x), "dddd dd mmmm yyyy")
            Next x
            If Not Tablo2(1) = "" Then MsgBox "Il y a " & UBound(Tablo2) - LBound(Tablo2) + 1 & " jours fériés sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy") & " : " & vbLf & vbLf & Join(Tablo2, vbLf), vbOKOnly + vbInformation
        Else
            MsgBox "Il y a aucun jour férié sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy"), vbOKOnly + vbInformation
        End If
    End If
End Sub
'pour récupérer un tableau vb des jours fériés avec leurs libellés
Sub demo4()
    Dim Tablo, Tablo2$(), Tablo3, x&
    Dim Date_Deb, Date_Fin
    'définition des dates de début et fin de période en nombre ou en valeur
    Date_Deb = "01/01/2021": Date_Fin = "31/12/2022"
    Date_Deb = InputBox("Entrez une date de début en format jj/mm/aaaa ou en valeur", "Demande", Date_Deb)
    Date_Fin = InputBox("Entrez une date de fin en format jj/mm/aaaa ou en valeur", "Demande", Date_Fin)
    If (IsDate(Date_Deb) Or IsNumeric(Date_Deb)) And (IsDate(Date_Fin) Or IsNumeric(Date_Fin)) Then
        'récupération en tableaux
        Tablo = TJF(Date_Deb, Date_Fin)
        If Not Tablo(LBound(Tablo)) = "" Then
            Tablo3 = TJF(DateDeb:=Date_Deb, DateFin:=Date_Fin, Lib:=1)
            ReDim Tablo2(LBound(Tablo) To UBound(Tablo))
            For x = LBound(Tablo2) To UBound(Tablo2)
                Tablo2(x) = Format(Tablo(x), "dddd dd mmmm yyyy") & ", " & Tablo3(x)
            Next x
            MsgBox "Il y a " & UBound(Tablo2) - LBound(Tablo2) + 1 & " jours fériés sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy") & " : " & vbLf & vbLf & Join(Tablo2, vbLf), vbOKOnly + vbInformation
        Else
            MsgBox "Il y a aucun jour férié sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy"), vbOKOnly + vbInformation
        End If
    End If
End Sub
'pour récupérer un tableau vb des jours fériés avec leurs libellés, Suisse, Canton de Genève, jours chomés intégrés aux jours fériés
Sub demo4B()
    Dim Tablo, Tablo2$(), Tablo3, x&
    Dim Date_Deb, Date_Fin
    'définition des dates de début et fin de période en nombre ou en valeur
    Date_Deb = "01/01/2021": Date_Fin = "31/12/2022"
    Date_Deb = InputBox("Entrez une date de début en format jj/mm/aaaa ou en valeur", "Demande", Date_Deb)
    Date_Fin = InputBox("Entrez une date de fin en format jj/mm/aaaa ou en valeur", "Demande", Date_Fin)
    If (IsDate(Date_Deb) Or IsNumeric(Date_Deb)) And (IsDate(Date_Fin) Or IsNumeric(Date_Fin)) Then
        'récupération en tableaux
        Tablo = TJF(DateDeb:=Date_Deb, DateFin:=Date_Fin, Pays:=41, Region:="GE", Jour_Chome:=1)
        If Not Tablo(LBound(Tablo)) = "" Then
            Tablo3 = TJF(DateDeb:=Date_Deb, DateFin:=Date_Fin, Pays:=41, Region:="GE", Jour_Chome:=1, Lib:=1)
            ReDim Tablo2(LBound(Tablo) To UBound(Tablo))
            For x = LBound(Tablo2) To UBound(Tablo2)
                Tablo2(x) = Format(Tablo(x), "dddd dd mmmm yyyy") & ", " & Tablo3(x)
            Next x
            MsgBox "Il y a " & UBound(Tablo2) - LBound(Tablo2) + 1 & " jours fériés/chômés pour le Canton de Genève sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy") & " : " & vbLf & vbLf & Join(Tablo2, vbLf), vbOKOnly + vbInformation
        Else
            MsgBox "Il y a aucun jour férié/chômé pour le Canton de Genève sur la période du " & Format(Date_Deb, "dddd dd mmmm yyyy") & " au " & Format(Date_Fin, "dddd dd mmmm yyyy"), vbOKOnly + vbInformation
        End If
    End If
End Sub
 

Pièces jointes

  • Exemples utilisation en matricielles standard ou dynamiques 365 horizontales ou verticales.xlsm
    75.8 KB · Affichages: 16
  • Exemples utilisation TJF en formules en MFC en détermination de jours fériés.xlsm
    88.5 KB · Affichages: 11
Dernière édition:

Etoto

XLDnaute Accro
Bonjour le forum

Tableau automatisé des jours fériés, nouvelle version 2.0, intègre les jours fériés pour la Belgique, la Suisse et le Luxembourg.

Bien cordialement, @+
Bonjour,

Désolé de t'avoir bien compliqué la chose avec les 26 cantons suisses, mais merci énormément pour ton aide.

Cordialement
 

soan

XLDnaute Barbatruc
Bonjour,

Tableau automatisé des jours fériés, nouvelle version 2.0, intègre les jours fériés pour la Belgique, la Suisse et le Luxembourg.

Désolé de t'avoir bien compliqué la chose avec les 26 cantons suisses, mais merci énormément pour ton aide.

c'est pas grave : tous nos amis belges, suisses, et luxembourgeois (y compris Jacques Brel, Ursula Andress, et Stéphane Bern) seront positivement ravis que Yeahou a eu l'extrême gentillesse de s'occuper de leur cas particulier ! 👍 :)

soan​
 

Etoto

XLDnaute Accro
Re,
Bonjour,





c'est pas grave : tous nos amis belges, suisses, et luxembourgeois (y compris Jacques Brel, Ursula Andress, et Stéphane Bern) seront positivement ravis que Yeahou a eu l'extrême gentillesse de s'occuper de leur cas particulier ! 👍 :)

soan​
Oui et je connais certains membres suisses de ce forum qui vont aimé cette MAJ de la fonction (Dont moi) :).

Merci beaucoup Yeahou
 
Bonjour le fil, le forum

Voici une nouvelle version 3.0, mise à jour sur le post #1. [ édition : version 3.1 mise à jour sur post #1 ]
Cette version rend utilisable la fonction en fonction matricielle horizontale ou verticale, fonction compatible matricielles standard et matricielles dynamiques Excel 365. La gestion des #N/A en calcul matriciel standard est intégrée dans la fonction.
Cette nouvelle fonctionnalité permet de remplacer facilement, dans un fichier existant, un tableau vertical des jours fériés à mise à jour manuelle par un tableau des jours fériés entièrement automatisé.

Bien cordialement, @+
Animation.gif
 
Dernière édition:

Efgé

XLDnaute Barbatruc
Bonjour Yeahou et bravo pour cette belle fonction.👍

Pour ma culture personnelle, ne pourait-on pas supprimer le premier calcul de Paques ?
VB:
Annee = Year(DateDeb)
    'détermine le dimanche de Paques sur DateDeb, simplification du calcul originel du dimanche de Pâques by patricktoulon
    Dim_Paques = CDate(((Round(DateSerial(Annee, 4, (234 - 11 * (Annee Mod 19)) Mod 30) / 7, 0) * 7) - 6))
Comme Annee est vérifiée à chaque boucle, le calcul se fera automatiquement dès la première vérification, sachant que sans calcul préalable Annee = 0

Tu pourrais, je pense, supprimer tous les "Case Else" ; à moins que je n'ai pas compris.

En tous cas Bravo ;)

Cordialement
 
Bonjour Efgé, le forum

Pour ma culture personnelle, ne pourait-on pas supprimer le premier calcul de Paques ?
Possible, j'avais intégré la boucle quand j'ai modifié la fonction pour couvrir plusieurs années, il faut que je vérifie mais comme la nouvelle version 3.3 est prête, j'intégrerai la modification au déploiement si elle ne gêne pas.
Tu pourrais, je pense, supprimer tous les "Case Else" ; à moins que je n'ai pas compris.
C'est une vieille habitude, j'intègre toujours un Case Else, même vide dans un Select Case, il ne gêne en rien. Il est vrai que cela réduirait un peu la taille de la fonction. Pareil, j'intègrerai la modification au déploiement de la nouvelle version.
Merci pour tes retours,

Bien cordialement, @+
 
Bonjour le fil, le forum

Voici une nouvelle version 3.4, mise à jour sur le post #1 , elle intègre en option la possibilité de renvoyer les libellés des jours fériés, les exemples du post 1 ont été modifiés pour intégrer cette nouvelle fonctionnalité.

Bien cordialement, @+

Animation.gif
 
Dernière édition:
Bonjour le fil, le forum

En reprenant la fonction pour la version 3.4, j'ai vu que certaines parties du code, la fonction ayant beaucoup évolué depuis la première version, pouvaient être améliorées. Voici une nouvelle version 3.8, mise à jour sur le post #1 , optimisation du code plus rapide, notamment sur un grand nombre d'années, et qui règle un problème de séparateur de dates par défaut.

Bien cordialement, @+
 
Bonjour le fil, forum

Voici une nouvelle version 4.0, mise à jour sur le post #1 , ajout des jours fériés pour l'Espagne ( dans la langue ), pour le Portugal ( dans la langue ) et pour la Principauté de Monaco. Les régions en Espagne et au Portugal sont gérées par le paramètre régional.
Comme je parle espagnol comme une vache anglaise, n'hésitez pas à me corriger ! ;)

Bien cordialement, @+
Animation.gif
 
Dernière édition:

Statistiques des forums

Discussions
294 449
Messages
1 938 590
Membres
188 943
dernier inscrit
FOFANA ABDOUL AZIZ