Formule Excel: compter le jour de la semaine entre les dates -

Table des matières

Formule générique

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(start&":"&end)))=dow))

Sommaire

Pour compter les jours de la semaine (lundi, vendredi, dimanche, etc.) entre deux dates, vous pouvez utiliser une formule matricielle qui utilise plusieurs fonctions: SUMPRODUCT, WEEKDAY, ROW et INDIRECT. Dans l'exemple illustré, la formule de la cellule E6 est

=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(B6&":"&C6)))=D6))

Dans la version générique de la formule, start = date de début, fin = date de fin et dow = jour de la semaine.

Explication

À la base, cette formule utilise la fonction WEEKDAY pour tester un certain nombre de dates pour voir si elles atterrissent un jour donné de la semaine (dow) et la fonction SUMPRODUCT pour additionner le total.

Lorsqu'on lui donne une date, WEEKDAY renvoie simplement un nombre entre 1 et 7 qui correspond à un jour particulier de la semaine. Avec les paramètres par défaut, 1 = dimanche et 7 = samedi. Donc, 2 = lundi, 6 = vendredi, et ainsi de suite.

L'astuce de cette formule consiste à comprendre que les dates dans Excel ne sont que des numéros de série commençant le 1er janvier 1900. Par exemple, le 1er janvier 2016 est le numéro de série 42370 et le 8 janvier est 42377. Les dates dans Excel ne ressemblent qu'à des dates lorsque un format de numéro de date est appliqué.

Alors, la question devient - comment pouvez-vous construire un tableau de dates que vous pouvez alimenter dans la fonction WEEKDAY pour trouver les jours correspondants de la semaine?

La réponse est d'utiliser ROW avec des fonctions INDIRECT comme ceci:

ROW(INDIRECT(date1&":"&date2))

INDIRECT permet aux dates concaténées «42370: 42377» d'être interprétées comme des numéros de ligne. Ensuite, la fonction ROW renvoie un tableau comme celui-ci:

(42370;42371;42372;42373;42374;42375;42376;42377)

La fonction WEEKDAY évalue ces nombres comme des dates et renvoie ce tableau:

(6;7;1;2;3;4;5;6)

qui est testé par rapport au jour de la semaine donné (6 dans ce cas, à partir de J6). Une fois les résultats du test convertis en 1 et 0 avec le double tiret, ce tableau est traité par SUMPRODUCT:

(1;0;0;0;0;0;0;1)

Ce qui renvoie 2.

Avec SEQUENCE

Avec la nouvelle fonction SEQUENCE, cette formule peut être simplifiée un peu comme ceci:

=SUMPRODUCT(--(WEEKDAY(SEQUENCE(end-start+1,1,start,1))=dow))

Dans cette version, nous utilisons SEQUENCE pour générer directement le tableau des dates, sans avoir besoin d'INDIRECT ou de ROW.

Articles intéressants...