XL 2013 Décaler fériés et fins de semaine

delaroch12

XLDnaute Nouveau
Bonjour,

Je ne suis pas une experte en Excel, loin de là, mais je réussi à faire certains documents grâce à Internet et bien sûr à votre forum et je vous en remercie. Par contre, dans un document que je suis en train de produire j'ai un gros problème que je ne peux résoudre seule, j'ai essayé, fouillé et réessayer sans succès.

Je souhaite que la cellule F3 à F32 calcule la date prévue avec nombre de jours plus tard cellule H1, soit 42 jours dans l'exemple.

Jusque là tout va bien, sauf qu'il ne faut pas que la date calculée tombe un samedi, dimanche ou jours fériés (plage jours fériés = Fer incluant les 2 semaines entre Noël et Jour de l'an. Si c'est le cas, afficher la date du prochain jours ouvrés, sachant que les jours ouvrés sont du Lundi au Vendredi inclus (sans jours fériés).

Petite précision qui a son importance, il faut que la date calculée inclus les jours fériés, samedi et dimanche, donc exit les formules de type SERIE.JOUR.OUVRE

Si quelqu'un peut m'aider, ce serait grandement apprécié. Je joint mon fichier test pour plus de compréhension.

Jésusrockstar a eu une demande un peu similaire mais sa formule ne fonctionne pas dans mon fichier.

Merci beaucoup!
 

Pièces jointes

  • Date prévue.xlsx
    11 KB · Affichages: 18
Dernière édition:

delaroch12

XLDnaute Nouveau
Bonjour @delaroch12
Je pense que c'est parce que j'utilise une fonction de microsoft365 (et excel2021) pour concaténer les 2 tableaux a exclure.
A la place, crée un seul tableau structuré qui contient Jours fériés et jours fermés, et remplace _Jours_Exclus par le nom de ce Tableau structuré, tu peux supprimer les 4 noms que j'ai créé pour obtenir la liste des jours à exclure.
Bon courage
Alain
 

JHA

XLDnaute Barbatruc
Bonjour à tous,


Mettre cette formule en "F3" puis copier vers le bas et la droite.

VB:
=SI(ESTNUM(EQUIV((($E3+F$1)+SI(JOURSEM($E3+F$1;2)>5;8-JOURSEM($E3+F$1;2);0));vacances;0));Fériés!$C$13+1;(($E3+F$1)+SI(JOURSEM($E3+F$1;2)>5;8-JOURSEM($E3+F$1;2);0))+SI(ESTNUM(EQUIV((($E3+F$1)+SI(JOURSEM($E3+F$1;2)>5;8-JOURSEM($E3+F$1;2);0));Feries;0));-1))

Mais la solution proposée par @GALOUGALOU que je salue :) te donne les mêmes résultats avec une formule beaucoup plus simple qui en plus utilise ta plage "DateExclues"


JHA
 

delaroch12

XLDnaute Nouveau
Merci AtTheOne j'ai réussi grâce à vous et si je peux me permettre j'aimerais encore abuser de votre très grande gentillesse car dans mon fichier, j'ai certains endroits où la date prévue en plus des conditions énumérés plus haut, je dois prendre cette date et la renvoyé au lundi, ou mardi ou mercredi, ou jeudi ou vendredi seulement dépendamment de l'endroit ou la rencontre a lieu.

J'avais comme formule =C1+E1+CHOISIR(JOURSEM(AUJOURDHUI();2);3;2;1;0;6;5;4) *** les chiffres de la fin de ma formule changeait dépendamment de la journée *** mais si j'ajoute +CHOISIR(JOURSEM à votre formule, je n'arrive plus du tout au même jour que j'avais précédemment.
 

AtTheOne

XLDnaute Occasionnel
Supporter XLD
Bonsoir @delaroch12

Si j'ai bien compris le jour renvoyé doit être en plus un jour particulier de la semaine.

Essaie cette formule :
Code:
=SERIE.JOUR.OUVRE.INTL($C4+I$1-1;1;CHOISIR(EQUIV(I$2;{"Lundi"."Mardi"."Mercredi"."Jeudi"."Vendredi"};0);"0111111";"1011111";"1101111";"1110111";"1111011");Tb_J_Exclus)

  • $C4 : Cellule contenant la date (colonne fixe ligne variable)
  • I$1 : Cellule contenant le délai (ligne fixe colonne variable)
  • I$2 : Cellule contenant le jour de la semaine à renvoyer (ligne fixe colonne variable)
  • Tb_J_Exclus : le tableau contenant les jours à exclure (Fériés + Fermés)

(en choisissant le jour de la semaine on impose un jour ouvré correspondant à ce jour)

Fais des essais colonne i du fichier joint.

Bon courage
Alain
 

Pièces jointes

  • Date prévue AtTheOne 2.xlsx
    17.3 KB · Affichages: 4

delaroch12

XLDnaute Nouveau
Bonsoir @delaroch12

Si j'ai bien compris le jour renvoyé doit être en plus un jour particulier de la semaine.

Essaie cette formule :
Code:
=SERIE.JOUR.OUVRE.INTL($C4+I$1-1;1;CHOISIR(EQUIV(I$2;{"Lundi"."Mardi"."Mercredi"."Jeudi"."Vendredi"};0);"0111111";"1011111";"1101111";"1110111";"1111011");Tb_J_Exclus)

  • $C4 : Cellule contenant la date (colonne fixe ligne variable)
  • I$1 : Cellule contenant le délai (ligne fixe colonne variable)
  • I$2 : Cellule contenant le jour de la semaine à renvoyer (ligne fixe colonne variable)
  • Tb_J_Exclus : le tableau contenant les jours à exclure (Fériés + Fermés)

(en choisissant le jour de la semaine on impose un jour ouvré correspondant à ce jour)

Fais des essais colonne i du fichier joint.

Bon courage
Alain
Bonjour AtTheOne @Alain

Tu es mon champion, un ÉNORME merci pour tout ton temps, il me reste 2 petites formules à trouver mon que mon fichier soit nickel mais j'ai déjà assez abusé de ta bonté.

Merci encore!!!!
 

delaroch12

XLDnaute Nouveau
Bonjour AtTheOne @Alain

Tu es mon champion, un ÉNORME merci pour tout ton temps, il me reste 2 petites formules à trouver mon que mon fichier soit nickel mais j'ai déjà assez abusé de ta bonté.

Merci encore!!!!
Bonjour AtTheOne @Alain

Hey oui, c'est encore moi, j'ai réussi à trouver une de mes 2 formules manquantes mais pas l'autre et si tu veux bien, j'abuserais encore une fois de tes très honorables connaissances.

Il me reste à créer une formule avec conditions suivantes

Date du jour + 6 semaines (incluant tous les jours sur le calendrier mais mon résultat doit afficher le lundi seulement mais le mardi si le lundi est férié et si le mardi est un jour de vacances (dates exclues) afficher le lundi suivant

Voir feuille 2 du fichier

J'espère être claire.

Merci pour ta précieuse aide.
 

AtTheOne

XLDnaute Occasionnel
Supporter XLD
Bonjour @delaroch12

Je réponds à ta demande mais comme il faut bien s'amuser, j'ai repris l'idée de 2 tableaux de jours non travaillés, un pour les jours fériés et un pour les jours de fermeture.

Les jour fériés s'étendent sur 2 années, les fêtes mobiles sont calculées automatiquement en fonction de l'année de référence (juste au dessus du tableau).​
D'une année sur l'autre tu n'as qu'à changer l'année de référence, et mettre à jour le tableau séparé des jours de fermeture.​
Une fonction personnalisée se charge de concaténer les 2 tableaux (en faisant le ménage sur les doublons et en triant par ordre chronologique le résultat).​
Si tu veux reprendre cette fonctionnalité sur un autre classeur, mets en référence la bibliothèque "Microsoft Scripting Runtime" dans le projet VBA (Alt F11 Outils, Références pour voir tout cela) et recopie le code (attention au nom VBA de la feuille contenant les 2 tableaux)​

Voir la feuille Mémo pour plus d'informations

Bon je reformule ta demande maintenant :
Si le 1er lundi décalé de 41 j n'est pas travaillé ou que le délai trouvé est <42 j
Alors prendre le 1er lundi ou mardi travaillé suivant​
Sinon prendre ce 1er lundi décaler de 41 j (donc avec un délai trouvé d'au moins 42 j)​

La formule est un peu plus alambiquée (la colonne C contenant les dates de départ):
Code:
=SI(OU(ESTNUM(EQUIV(SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111");_Jours_Exclus;0));(SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111")-$C4)<42);
       SERIE.JOUR.OUVRE.INTL(SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111");1;"0011111";_Jours_Exclus);
       SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111"))

J'ai rajouté des exemples dans la feuille Démo.

Bon courage, et à bientôt !
Alain
 

Pièces jointes

  • Date prévue AtTheOne 3.xlsm
    33.4 KB · Affichages: 3

delaroch12

XLDnaute Nouveau
Bonjour @delaroch12

Je réponds à ta demande mais comme il faut bien s'amuser, j'ai repris l'idée de 2 tableaux de jours non travaillés, un pour les jours fériés et un pour les jours de fermeture.

Les jour fériés s'étendent sur 2 années, les fêtes mobiles sont calculées automatiquement en fonction de l'année de référence (juste au dessus du tableau).​
D'une année sur l'autre tu n'as qu'à changer l'année de référence, et mettre à jour le tableau séparé des jours de fermeture.​
Une fonction personnalisée se charge de concaténer les 2 tableaux (en faisant le ménage sur les doublons et en triant par ordre chronologique le résultat).​
Si tu veux reprendre cette fonctionnalité sur un autre classeur, mets en référence la bibliothèque "Microsoft Scripting Runtime" dans le projet VBA (Alt F11 Outils, Références pour voir tout cela) et recopie le code (attention au nom VBA de la feuille contenant les 2 tableaux)​

Voir la feuille Mémo pour plus d'informations

Bon je reformule ta demande maintenant :
Si le 1er lundi décalé de 41 j n'est pas travaillé ou que le délai trouvé est <42 j
Alors prendre le 1er lundi ou mardi travaillé suivant​
Sinon prendre ce 1er lundi décaler de 41 j (donc avec un délai trouvé d'au moins 42 j)​

La formule est un peu plus alambiquée (la colonne C contenant les dates de départ):
Code:
=SI(OU(ESTNUM(EQUIV(SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111");_Jours_Exclus;0));(SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111")-$C4)<42);
       SERIE.JOUR.OUVRE.INTL(SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111");1;"0011111";_Jours_Exclus);
       SERIE.JOUR.OUVRE.INTL($C4+41;1;"0111111"))

J'ai rajouté des exemples dans la feuille Démo.

Bon courage, et à bientôt !
Alain
Bonjour AtTheOne @Alain

Tu es vraiment trop fort, tu as bien ciblé ma demande et mon fichier est maintenant complet grâce à toi, jamais je n'aurais pu y arriver seule.

Un gros gros MERCI, tu es un champion. Je me prosterne bien bas devant tout ton talent.

Merci encore et encore!!!