Bon je pense que j'ai une version fonctionnelle de ce que je décris. Si je me trompe préviens moi, ça devrait marcher en l'état.
https://1fichier.com/?9dikx2br0i
J'ai travaillé sur Janvier / Février / Mars.
Les formules que je donne sont à déployer avec la croix spéciale d'excel (en bas à droite de la cellule) pour la colonne.
Pour ce qui est des formules que j'ai changées : Le premier jour du mois est maintenant sous la forme :
Code:
=DATE(Janvier!N2;3;1)
Il faut le répéter pour tous les mois.
La formule d'affichage du numéro de semaine est changée pour :
Code:
=IF(OR(WEEKDAY(B3)=1; EOMONTH(B3;0)=B3); ISOWEEKNUM(B3); "")
Traduction : si on est un dimanche ou le dernier jour du mois en cours, on affiche le numéro de semaine. (Tu remplis ça dans J3 et tu déploies)
Ensuite pour le calcul.
Au mois de Janvier (K3 + déploiement) :
Code:
=IF(EOMONTH(B3;0)=B3;IF(WEEKDAY(B3)=1;SUM(INDEX(G:G;ROW(G3)-6):G3);SUM(INDEX(G:G;ROW(B3)+2-WEEKDAY(B3)):G3));IF(WEEKDAY(B3)=1;IF(DAY(B3)<7;SUM(INDEX(G:G;ROW(G3)+1-DAY(B3)):G3);SUM(INDEX(G:G;ROW(G3)-6):G3));""))
Février :
Code:
=IF(EOMONTH(B3;0)=B3;IF(WEEKDAY(B3)=1;SUM(INDEX(G:G;ROW(G3)-6):G3);SUM(INDEX(G:G;ROW(B3)+2-WEEKDAY(B3)):G3));IF(WEEKDAY(B3)=1;IF(DAY(B3)<7;SUM(INDEX(G:G;ROW(G3)+1-DAY(B3)):G3)+INDIRECT("'Janvier'!K" & COUNTA(Janvier!K:K)+1 );SUM(INDEX(G:G;ROW(G3)-6):G3));""))
Mars :
Code:
=IF(EOMONTH(B3;0)=B3;IF(WEEKDAY(B3)=1;SUM(INDEX(G:G;ROW(G3)-6):G3);SUM(INDEX(G:G;ROW(B3)+2-WEEKDAY(B3)):G3));IF(WEEKDAY(B3)=1;IF(DAY(B3)<7;SUM(INDEX(G:G;ROW(G3)+1-DAY(B3)):G3)+INDIRECT("'Février'!K" & COUNTA(Février!K:K)+1 );SUM(INDEX(G:G;ROW(G3)-6):G3));""))
La seule variable à changer dans la formule est le nom de l'onglet du mois précédent.
Pour les explications :
Je déroule un arbre à partir d'un premier test : suis-je le dernier jour du mois ?
Oui => Suis-je un dimanche ? Oui => Calcul simple (6 jours de moins) Non => Calcul entre le Lundi précédent et ce jour
Non => Suis-je un dimanche ? Oui => Suis-je avant le 7 du mois ? => Oui : on fait la somme des jours avant aujourd'hui + on va chercher la dernière valeur de la colonne K de l'onglet précédent (avec INDIRECT). Non => Calcul avec 6 jours de moins
Edit : ça devrait aussi marcher les années bissextiles.