Dates et jours ouvrables
Étiquetté : SharePoint
-
Dates et jours ouvrables
Posté par Mick sur 27 mars 2023 à 15h53Bonjour la commu,
Je cherche à calculer un délais de réponse sur une LSP, ( ça ça fonctionne) mais en tenant compte des jours ouvrables.
Par exemple une demande le vendredi soir nécessite une réponse avant le mardi soir et pas le dimanche.
Je n’ai rien trouvé sur internet pour gérer cette situation. Avez vous trouvé quelques chose pour tenir compte des weekends et jours fériés ?
Merci d’avance.
PostID=JOkQBIMfO7SBtxA
Mick a répondu Il y a 11 mois, 4 semaines 1 Membre · 8 Réponses -
8 Réponses
-
Souvent la réponse est dans la question.
Si on est vendredi, j’ajoute deux jours a une variable.
Pour les jours fériés, c’est moins facile.
Il faudrait les lister et regarder les dates entre les différents délai pour ajouter des jours supplémentaires. 🤔
CommentID=dBaagkhRnqQtG9e, PostID=JOkQBIMfO7SBtxA
-
Bonjour,
Pour les jours ouvrables, tu peux utiliser la formule ci-après (Dans l’exemple on calcule le nombre de jours entre deux date pickers, qui ne sont ni des samedi, ni des dimanches ) :
With(n {n // Table of all dates between start and end daten DateRange: ForAll(n Sequence(DatePickerFin.SelectedDate - DatePickerDebut.SelectedDate + 1),n DatePickerDebut.SelectedDate + Value - 1n )n },n If(n And(n IsBlank(DatePickerDebut.SelectedDate),n IsBlank(DatePickerFin.SelectedDate)n ),n // show nothing if any date pickers are blankn 0,n // Count if Week day is from Monday to Fridayn CountIf(n DateRange,n Weekday(Value,11) < 6n )n )n)
Pour les jours fériés, le plus simple est de créer une liste sharepoint avec deux colonnes : ‘Titre’ et ‘Date’, et d’ajouter une condition dans le countIf à la fin :
With(n {n // Table of all dates between start and end daten DateRange: ForAll(n Sequence(DatePickerFin.SelectedDate - DatePickerDebut.SelectedDate + 1),n DatePickerDebut.SelectedDate + Value - 1n )n },n If(n And(n IsBlank(DatePickerDebut.SelectedDate),n IsBlank(DatePickerFin.SelectedDate)n ),n // show nothing if any date pickers are blankn 0,n // Count if Week day is from Monday to Fridayn CountIf(n DateRange,n Weekday(Value,11) < 6n Not(Value in 'Liste Jours Fériés'.Date)n )n )n)
CommentID=naN6Vm7ZLrwpwtR, PostID=JOkQBIMfO7SBtxA
-
J’avais trouvé il y a quelque temps une commande pas très simple qui est censé répondre à cette question. Je vous la vends comme je l’ai achetée, sans vérification exhaustive, ni garantie de résultat.
En tout cas, elle ne cause pas de bug (c’est déjà ça) mais ne me demandez pas de vous l’expliquer 😉If(DateDiff(DateValue(Text(Today();”dd/mm/yyyy”;”Fr-fr”));DateValue(lbl_Date_Courante.Text;”Fr-fr”);TimeUnit.Days)>=-1;
With(
{
dateMin:DateValue(Text(Today();”dd/mm/yyyy”;”Fr-fr”));// la date la plus ancienne
dateMax:DateValue(lbl_Date_Courante.Text;”Fr-fr”) // la date la plus récente
};
CountIf(
//Tous les jours de la période considérée
ForAll(
Sequence(
DateDiff( dateMin ; dateMax ; TimeUnit.Days )+1;
0;
1
);
{jour:DateAdd(dateMin;Value;TimeUnit.Days)}
);
//on y retire…
!Or(
//…les weekends
Weekday(jour;StartOfWeek.Monday) >= 6;
//..et les jours fériés
jour in
//constitution de la totalité des congés sur les années couvertes par la période
With(
{
outputTable: Ungroup(
ForAll(
Sequence( DateDiff(dateMin;DateAdd(dateMax;1;TimeUnit.Days);TimeUnit.Years)+1 ;Year(dateMin) ) As an;
With(
{
Paques:
22+Mod((19*Mod(an.Value;19))+24;30)+Mod((Mod(an.Value;4)*2)+(Mod(an.Value;7)*4)+(Mod((19*Mod(an.Value;19))+24;30)*6)+5;7)-1+Date(an.Value;3;1)
};
Table(
{name:”Jour de l’an”;date:Date(an.Value;1;1)};
//{name:”Pâques”;date:Paques};
{name:”Lundi de Pâques”;date:Paques+1};
{name:”Fête du travail”;date:Date(an.Value;5;1)};
{name:”Victoire 1945″;date:Date(an.Value;5;8)};
{name:”Ascension”;date:Paques+39};
//{name:”Pentecôte”;date:Paques+49};
{name:”Lundi de Pentecôte”;date:Paques+49+1};
{name:”Fête Nationale”;date:Date(an.Value;7;14)};
{name:”Assomption”;date:Date(an.Value;8;15)};
{name:”Toussaint”;date:Date(an.Value;11;1)};
{name:”Armistice 1918″;date:Date(an.Value;11;11)};
{name:”Noël”;date:Date(an.Value;12;25)}
)
)
);
“Value”
)/* Fusionne les tables en une unique sans suppression des doublons */
};
ShowColumns( //Affiche seulement les colonnes nécessaires
GroupBy(
outputTable;
“date”;
“Grouped”//Le dernier paramètre peut avoir n’importe quel nom, celui de la table enfant avec les données groupées
);
//les mêmes colonnes utilisées par le groupBy excepté celle de la table enfant
“date”
)
)
)
)
)
)
CommentID=N79N4H2OhEboySj, PostID=JOkQBIMfO7SBtxA
-
Ca ressemble à usine à gaz, mais qui mérite d’être étudiée. Il faudra de toute façon gérer ce cas courant d’une manière ou d’une autre.
Merci je vous tiens au courant.
CommentID=whrj9UAYLzX9rZn, PostID=JOkQBIMfO7SBtxA
-
Mais non ce n’est pas une usine à gaz (en tous cas quand je l’ai écrite ca ne l’était pas 😛 )
Par contre j’ai eut aussi le besoin de calculer X jours ouvrés à partir d’une date et je m’y suis cassé les dents. Je n’ai pas réussi à trouvé un moyen de le faire… Mais je suis persuadé que c’est faisable alors courage !SubCommentID=EzkimxXUBnO0EUM, CommentID=whrj9UAYLzX9rZn, PostID=JOkQBIMfO7SBtxA
-
Bonjour Alexandre Perret,
Du coup, sur la gestion des jours ouvrés, j’ai trouvé cette méthode ingénieuse qui fonctionne plutôt pas mal. Attention toutefois à la gestion au delà du nombre de jours ouvrés du tableau.
ys to a date in a Power Automate Flow (tachytelic.net)
J’ai testé, et j’approuve.
Pour la liste des jours féries j’ai crée une Liste Sharepoint.
Je ne sais pas si c’est la meilleur solution. Il est possible qu’un code complet faisant le calcul directement doit être plus efficace.
Effectivement la difficulté réside dans la transposition de la formule de calcul bien connu dans Excel. Je vais étudier votre proposition qui semble fonctionner. A quel endroit faut-il la déposer pour qu’elle fonctionne ? J’ai tenté dans un message, mais bien qu’il ne me donner pas d’alerte, il calcule pas grand chose. 🤔Merci d’avance.
SubCommentID=7b8pTCYCWdXmAAV, CommentID=whrj9UAYLzX9rZn, PostID=JOkQBIMfO7SBtxA
-
Cela commence à dater 🙂 mais je dirais de mémoire qu’il vous suffit de renseigner dateMin et dateMax dans le premier with, et que l’ensemble doit retourner le nombre de jours ouvrés ( https://ppfc.fr/bdc/post/compter-le-nombre-de-jours-ouvres-sur-une-periode-powerapps-V9o6ifeeaZrbsDP )
SubCommentID=DmSQbhMPLfdM7EZ, CommentID=whrj9UAYLzX9rZn, PostID=JOkQBIMfO7SBtxA
-
-
C’est ce que je pensais c’est une approche PowerApps.
Plutôt instructive au demeurant. J’avais dans l’idée de tenir à jour une LSP avec les dates des jours féries pour les exclure des calcules de délais de résolution. Je réfléchis à la manière dont je pourrai traduire ça en PowerAutomat.
Ceci étant dit si le calcul se fait dans l’interface PowerAutomat directement ça évide de charger Automat inutilement.
A réfléchir.Merci de ce lien.
CommentID=fMc7mpzXFtHs2cY, PostID=JOkQBIMfO7SBtxA
Connectez-vous pour répondre.