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 année.
-
AuteurMessages
-
27 janvier 2024 à 0 h 17 min #136908
Lamia Zumsteg
ParticipantSalut à 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.29 janvier 2024 à 4 h 42 min #136965Antoine Fixary
ParticipantBonjour,
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_JoursFonction 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_Jours29 janvier 2024 à 6 h 31 min #136966Lamia Zumsteg
ParticipantBonjour 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 -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.