Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Formule matricielle dynamique : Utilisation de OU

Efgé

XLDnaute Barbatruc
Bonjour à toutes et tous

Une question sur l'utilisation de OU dans une formule 365 matricielle dynamique.
J'extrait les jours d'école sur une période.
J'enlève les Week-ends, les fériés, les congés scolaires.
La formule fonctionne mais je la trouve "laborieuse".
Avez-vous une idée pour la réduire (utilisation de OU par exemple) ?
La formule :
VB:
=LET(
   An;SEQUENCE(B2-B1+1;;B1);
   JoursSem;SI.MULTIPLE(JOURSEM(An;2);6;"";7;"";3;"";An);
   Fer;SI(JoursSem<>"";SI(NB.SI(TabFerDates;JoursSem)<>0;"";JoursSem);JoursSem);
   CNG;SI(Fer<>"";SI(NB.SI.ENS(A_Deb;"<="&Fer;A_Fin;">="&Fer);"";Fer);Fer);
FILTRE(CNG;CNG<>"")
)
Le fichier exemple en pièce jointe.

Merci par avance de vos idées.
Cordialement
 

Pièces jointes

  • ExtractJoursScolaires_XLD.xlsx
    22.1 KB · Affichages: 11

ALS35

XLDnaute Impliqué
Bonjour,
Une proposition légèrement différente et plus courte, mais qui reste de toutes façons complexe.
VB:
=LET(
d;SEQUENCE(B2-B1+1;;B1);
j;JOURSEM(d;2);
s;(j<6)*(j<>3);
f;NB.SI(TabFer[Date];d)=0;
v;BYROW(d;LAMBDA(p;SOMME((p>=DataZoneA[Zone_A_Debut])*(p<=DataZoneA[Zone_A_Fin]))=0));
FILTRE(d;s*f*v))
Cordialement
 

JFL_XLD

XLDnaute Junior
Bonjour à tous !
Une autre approche ?
L'idée étant de construire un vecteur (jours fériés et vacances) puis de l'intégrer dans la fonction NB.JOURS.OUVRES.INTL.
VB:
=LET(
    a; SEQUENCE(B2 - B1 + 1; ; B1);
    n; ASSEMB.V(TabFerDates; FRACTIONNER.TEXTE(JOINDRE.TEXTE(";"; ; MAP(A_Deb; A_Fin; LAMBDA(d; f; JOINDRE.TEXTE(";"; ; SEQUENCE(f - d + 1; ; d))))); ; ";"));
    FILTRE(a; NB.JOURS.OUVRES.INTL(a; a; "0010011"; n))
)

Note : le tableau "vacances zone" doit être préalablement modifié, certaines dates de fin étant antérieures aux dates début.
 

ALS35

XLDnaute Impliqué
Bonjour à tous,
En faisant plus simple que ma première proposition, une autre version :
VB:
=LET(
a;B1;b;B2;
d;SEQUENCE(b-a+1;;a);
j;JOURSEM(d;2);s;(j<6)*(j<>3);
f;NB.SI(TabFerDates;d)=0;
v;NB.SI.ENS(A_Deb;"<="&d;A_Fin;">="&d)=0;
FILTRE(d;s*f*v))
Cordialement
 

Efgé

XLDnaute Barbatruc
Bonjour à tous,
Bonjour @JFL_XLD , Bonjour @ALS35
Merci de vos propositions.
@JFL_XLD je dois me plonger dans la proposition, le côté MAP / SEQUENCE m'est pour l'instant obscure mais je vais m'y plonger.
@ALS35 Merci de cette nouvelle proposition, il est vrai plus courte.

Merci à vous, et si certains ont d'autres idées, je reste à l'écoute.

Cordialement
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…