Liste des jours feries de 4 dernieres annees

Accueil – Le CFO masqué Forums Power Query Liste des jours feries de 4 dernieres annees

  • Ce sujet contient 2 réponses, 2 participants et a été mis à jour pour la dernière fois par Lamia Zumsteg, le il y a 1 mois.
3 sujets de 1 à 3 (sur un total de 3)
  • Auteur
    Articles
  • #136908
    Lamia Zumsteg
    Participant

    Salut à tous,
    J’aimerais créer une liste des jours fériés des 4 dernières années.
    Le but final est de calculer le nombre de jours ouvrés.
    Ma table de fait peut aller jusqu’en 2021.
    Ne sachant pas faire de boucle j’ai du fait un travail d’amateur dont j’ai vraiment honte.
    Pourriez-vous SVP m’aider à créer cette boucle ?
    Vous trouverez ci-joint un fichier Excel.
    Merci encore pour votre soutien !!!

    Attachments:
    You must be logged in to view attached files.
    #136965
    Antoine Fixary
    Participant

    Bonjour,

    désolé, j’ai ouvert votre fichier et ça ma paru bien compliquié. J’ai une solution “clé en main” qui existe :

    Elle utilise 2 fonctions qui calcule le nombre de jours ouvrés soit pour une année civile soit pour plusieurs années civiles (jusqu’à 3 ans).

    Fonction fnJoursOuvresAnnee

    A utiliser si l’on est certain que la période ne concerne toujours qu’une seule année :

    // Calcul le nombre de jours ouvrées (hors week-end et jours fériés)

    (DATE_DEBUT as date, DATE_FIN as date) as number =>
    let
    annee = Date.Year(DATE_DEBUT),

    ////////////////////////////////
    // Calcul du jour du dimanche de Pâques (nécessaire pour calcul des jours fériés)
    ////////////////////////////////
    g = Number.Mod(annee,19),
    c = Number.IntegerDivide(annee,100),
    c4 = Number.IntegerDivide(c,4),
    e=Number.IntegerDivide((8*c+13),25),
    h=Number.Mod((19*g+ c-c4-e+15),30),
    h2 = if (h=29) then 28 else if (h=28 and g>10) then h-1 else h,
    k=Number.IntegerDivide(h2,28),
    p=Number.IntegerDivide(29,(h2+1)),
    q=Number.IntegerDivide((21-g),11),
    i=(k*p*q-1)*k+h2,
    b=Number.IntegerDivide(annee,4)+annee,
    j1=b+i+2+c4-c,
    j2=Number.Mod(j1,7),
    r=28+i-j2,
    paques=Date.AddDays(#date(annee,3,1), r-1),

    ////////////////////////////////
    // Création de la liste des jours fériés
    ////////////////////////////////
    joursFeries = {#date(annee,1,1), // Jour de l’an
    Date.AddDays(paques, -2), // Vendredi saint (férié en Alsace Moselle)
    paques, // Dimanche de Pâques
    Date.AddDays(paques, 1), // Lundi de Pâques
    #date(annee,5,1), // Fête du travail
    #date(annee,5,8), // Victoire 1945
    Date.AddDays(paques, 39), // Ascension
    Date.AddDays(paques, 49), // Pentecote
    Date.AddDays(paques, 50), // Lundi de pentecote
    #date(annee,7,14), // Fête nationale
    #date(annee,8,15), // Assomption
    #date(annee,11,1), // La Toussaint
    #date(annee,11,11), // Armistice 1918
    #date(annee,12,25), // Noel
    #date(annee,12,26)}, // Saint-Etienne (férié en Alsace Moselle)

    ////////////////////////////////
    // Calcul du nombre de jours ouvrés entre 2 dates d’une même année
    ////////////////////////////////
    liste_De_Date = List.Dates(DATE_DEBUT, Number.From(DATE_FIN – DATE_DEBUT)+1, #duration(1, 0, 0, 0)),
    weekend = List.Select(liste_De_Date, each Date.DayOfWeek(_, Day.Monday) >= 5),
    supprimer_Weekend = List.RemoveItems(liste_De_Date, weekend),
    supprimer_JoursFeriés = List.RemoveItems(supprimer_Weekend, joursFeries),
    nombre_De_Jours = List.Count(supprimer_JoursFeriés)
    in
    nombre_De_Jours

    Fonction fnJoursOuvresMultiAnnee à utiliser si la période peut courir sur 1 ou
    2 ans (nécessite fnJoursOuvresAnnee)

    // Calcul le nombre de jours ouvrées (hors week-end et jours feriés) jusqu’a des dates espacées de 2 ans.

    (DATE_DEBUT as date, DATE_FIN as date) as number =>
    let
    anneeDebut = Date.Year(DATE_DEBUT),
    anneeFin = Date.Year(DATE_FIN),
    nombre_De_Jours = if anneeFin – anneeDebut = 0 then
    fnJoursOuvresAnnee(DATE_DEBUT,DATE_FIN)
    else if anneeFin – anneeDebut = 1 then
    fnJoursOuvresAnnee(DATE_DEBUT,#date(anneeDebut,12,31)) + fnJoursOuvresAnnee(#date(anneeFin,1,1),DATE_FIN)
    else if anneeFin – anneeDebut = 2 then
    fnJoursOuvresAnnee(DATE_DEBUT,#date(anneeDebut,12,31)) + fnJoursOuvresAnnee(#date(anneeDebut+1,1,1),#date(anneeDebut+1,12,31)) + fnJoursOuvresAnnee(#date(anneeFin,1,1),DATE_FIN)
    else
    error “Ecart de plus de 2 ans entre les dates”
    in
    nombre_De_Jours

    #136966
    Lamia Zumsteg
    Participant

    Bonjour Antoine,
    Merci d’avoir pris la peine de regarder mon problème.
    Le code parait compliqué car il est repliqué 2 fois pour avoir 3 ans de jours féries. J’aurais même besoin des 4 dernières années 🙁

    Je n’arrive pas à créer une boucle sur power query pour cela.
    Merci et bonne journée

3 sujets de 1 à 3 (sur un total de 3)
  • Vous devez être connecté pour répondre à ce sujet.