Power Query Ajouter nombre de jours ouvrés à une date

redflowers90

XLDnaute Nouveau
Bonjour,

J'ai un tableau dans lequel je souhaite calculer une date d'échéance à partir d'une colonne de la table et un nombre de jours ouvrés.
J'aimerai faire ça en Power Query.
Je suis sûre qu'il y a une façon simple de le faire ....
 

Pièces jointes

  • exemple.xlsx
    19.7 KB · Affichages: 17

sgomesA

XLDnaute Nouveau
Bonjour,

D'abords je vous remercie pour ce fichier m'a été bien utile aussi.
J'aurais une question par rapport à la fonction "FnListeJoursOuvrés", vous appelez une fonction if en demandant de regarder s'il y a quelque chose dans la liste "Exclusions" pour définir les vacances, mais à aucun moment je ne vois comment rajouter cette liste manuellement ?

Pouvez-vous m'éclairer svp ?
Cordialement.
 

sgomesA

XLDnaute Nouveau
Je vous en remercie.

D'ailleurs entre temps j'ai fouillé, et finalement je suis arrivé à rajouter une liste d'exclusion (en passant par "Choisir une colonne").
Sauf qu'elle ne reste pas prise en compte, lorsqu'on change d'affichage sur une autre requête par exemple, lorsqu'on revient sur la fonction, la sélection de l'exclusion a disparu.
Cordialement.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

En reprenant le fichier j'ai vu ce que vous vouliez dire : c'est de cette partie de l'interface dont vous parliez :

1641829487042.png


Une fois que vous avez choisi votre colonne, il faut cliquer sur le bouton "Appeler".
PQ vous créera une requête nommée "Fonction appelée" qui produira le résultat de l'appel à la fonction.
Vous pouvez vous en servir de modèle en copiant son étape source (dans la barre de formule PQ) et en la collant dans la barre de formule d'une autre requête.

Cordialement
 

sgomesA

XLDnaute Nouveau
Re,

Je vous remercie pour votre retour rapide.
Mais je suis vraiment désolé mais j'ai du mal à comprendre, sur quelle requête vous collez la formule.

Dans le fichier ci-joint, j'ai l'Open Time qui est à la date d'aujourd'hui, j'ai modifié le calcul pour que le résultat soit à +2 jours ouvrés. Du coup pour le moment j'ai un "Due Date" = 12/01/2022.
La "Fonction appelé" a été crée et représente mes vacances j'y ai mis le 12 et le 13 janvier, je cherche donc comme résultat final le 14/01/2021.

Pourriez-vous s'il vous plait me montrer sur le fichier ci-joint à quel endroit vous colleriez l'étape Source de la fonction appelée pour obtenir ce que je recherche ?

Cordialement
 

Pièces jointes

  • PQ-Jours fériés.xlsx
    26.8 KB · Affichages: 13

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Exemple à partir du fichier du post#10.

voyez :
1 - la construction dans une feuille excel d'un tableau de dates à exclure
2 - la requête 'Liste_Exclusions' qui transforme l'unique colonne de ce tableau en liste de date à exclure
3 - la requête 'Tableau1 (2)' (non affichée dans feuille excel)
4 - son étape 'Personnalisée ajoutée1'. Le paramètre 'Exclusions' de la fonction 'fnListeJoursOuvrés' concatène la liste des fériés de chaque ligne avec la liste des dates à exclure.

= Table.AddColumn(#"Fériés Ajoutés", "Due Date", each fnListeJoursOuvrés([Open Time],Date.AddDays([Open Time],60),[Fériés]&Liste_Exclusions){30}, type date)

5 - voyez que le résultats de la 30ème date renvoyée dans chaque ligne est différent de celui de la première requête.

Cordialement

[Edition] Nous avons posté à peu près au même moment. Dites moi si l'exemple ici est suffisant
 

vieri28

XLDnaute Nouveau
Bonjour à tous,

Merci pour ce code, c'est exactement ce que je cherchais. Comme je découvre juste le langage M, j'essaye de comprendre le fonctionnement du code suivant :

= Table.AddColumn(#"Fériés Ajoutés", "Due Date", each fnListeJoursOuvrés([Open Time],Date.AddDays([Open Time],60),[Fériés]&Liste_Exclusions){30}, type date)

La partie que je ne comprends pas, c'est le 30 entre accolades. Quel est son rôle, comment ça fonctionne ? En changeant cette valeur, je vois que ça correspond au nombre de jours ouvrés ajouté, effectivement. Je l'interprète comme un paramètre de la fonction, mais je vois qu'il n'est pas compris entre les parenthèses de la fonction, et ça me perturbe. Une déformation de mon VBA, sans doute...

Aussi, je vois dans la référence du langage que les accolades sont utilisées pour noter les listes. Donc {30} désigne une liste contenant uniquement la valeur 30, c'est ça ?

Je vois que ça fonctionne mais je ne comprends pas comment, et ça m'agace 😅...

Merci d'avance à ceux qui pourront éclairer ma lanterne.

François
 
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

La fonction fnListeJoursOuvrés renvoie une liste de dates. Comme toutes les listes renvoyées par le language M on peut en atteindre un élément par son index dans la liste, exprimé entre accolade.
Les listes sont indexées à partir de 0.

fnListeJoursOuvrés(.....){30} = 31ième date de la liste des jours ouvrés.

Ne me demandez pas pourquoi 31 et pas la 25, je ne me rappelle plus du contexte :) et n'ai pas envie pour le moment de m'y replonger.

Cordialement
 

vieri28

XLDnaute Nouveau
Bonjour Hasco, et merci d'avoir pris le temps de me répondre 👍.

D'accord, je comprends maintenant. J'ai dû zappé cette notation de l'index dans la liste entre accolades lorsque j'ai lu les explications sur le site de MS. Je note aussi l'index à partir de 0. Et je dois penser à considérer la fonction en tant que son résultat (la liste) et pas en tant que fonction seulement. En faisant ça, cette notation {30} prend tout son sens effectivement.

Cordialement,

François
 

matt91SEK

XLDnaute Nouveau
Re,

Petite rectification : Pour les dates en fin d'années, il faut rajouter les fériés de l'année suivante.

L'étape 'Fériés Ajoutés' devient donc :


cordialement

Bonjour,
Votre code est top!
J'aurai une demande supplémentaire.
Pour ma part, j'aurai besoin de connaitre la date de 15 jours ouvrés avant.
Exemple:
02/03/2023 la "Due date" sera au 09/02/203
Mais mon entreprise ferme tous les ans entre le 23 décembre et le 1 janvier donc une date du 10/01/2023 devrait avoir une "Due date" au 12/12/2022 mais le résultat m'affiche le 20/12/2022

J'ai changé le code de cette manière:

= Table.AddColumn(#"Fériés Ajoutés", "Due Date", each fnListeJoursOuvrés([Open Time],Date.AddDays([Open Time],-60),List.Union({[Fériés],Liste_Exclusions})){27}, type date)

Sans être vraiment sur de ce que j'ai fait, j'ai pris exemple sur une date lambda sans jour férié et sans jour de congé pour trouver les -15 jours ouvrés demandé (18/10/2022 → 27/09/2022)

Par contre tout marche bien pour ajouter 15 jours avec les dates de fermeture de l'entreprise (21/12/2022 → 19/01/2023)

Merci
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
543
Réponses
5
Affichages
497
Réponses
14
Affichages
528

Statistiques des forums

Discussions
312 198
Messages
2 086 144
Membres
103 129
dernier inscrit
Atruc81500