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

  • Initiateur de la discussion Initiateur de la discussion Efgé
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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.
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…