Bonjour
Pour ceux que cela intéresse ou qui auront besoin de modifier ma dernière proposition, j'explique un peu la méthode utilisée dans mon dernier fichier.
Dans H2, on n'utilise pas une formule avec un truc du style SI(condition 1; heure x - heure y ;SI(condition 2;Heure w - heure y ou du style SI(ET(condition 1 ; condition 2); heure g - heure f;...
mais :
* On crée une matrice listant toutes les minutes de la période de travail avec
périodeenminutes=LIGNE(INDIRECT($B2*60*24+1&":"&SI($C2<$B2;$C2+1;$C2)*60*24))
ce qui donne par exemple {321;322;323;....1200} pour B2 = 5:00 et C2 = 20:00
* On élimine les minutes ne convenant pas en imposant des conditions . Par exemple, pour n'avoir que les minutes du premier jour entre 6:00 (=B$11) et 22:00 (=B$12) de périodeenminutes, on écrit (B$11*24*60<périodeenminutes)*(périodeenminutes<=B$12*24*60) ce qui donne une matrice de 0 et de 1, du style {0;0;0;0;.......;1;1;1;1......;1;1;1;0;0;.....;0} pour une période commençant le matin avant 6:00 et finissant avant 22:00, les 1 correspondant aux minutes de périodeenminutes comprises entre 6:00 et 22:00. (Cf. remarque à la fin de ce post)
* Si on doit garder une autre période, on l'additionne. Par exemple, pour garder les minutes de la deuxième journée (en supposant que la période ne déborde jamais après les 22:00 du second jour : (B$11+1 donne le début des heures de jour de la seconde journée)
(B$11*24*60<périodeenminutes)*(périodeenminutes<=B$12*24*60)+((B$11+1)*24*60<périodeenminutes)
ce qui donne aussi une matrice de 0 et de 1.
* Si on doit imposer une autre condition, on multiplie la formule précédente par cette condition, ce qui donne par exemple, pour déterminer les heures normales, avec dans B$13 le nombre d'heures normales journalières maximales (7,5 dans le fichier, écrit sous la forme 7:30).
((B$11*24*60<périodeenminutes)*(périodeenminutes<=B$12*24*60)+((B$11+1)*24*60<périodeenminutes))*(périodeenminutes<=((B2+B$13)*24*60))
ce qui donne aussi une matrice de 0 et de 1.
Autrement dit, il faut "jouer" avec des * et des + entre des inégalités, suivant qu'il s'agit d'un ET ou d'un OU.
Finalement, il ne reste plus qu'à faire le total des 1 avec SOMMEPROD et à diviser cela par 60 et par 24 pour avoir cela en durée utilisant le jour comme unité, mis au format heure à l'affichage.
Pour avoir les heures de travail de jour, mais sup, on prend presque la même formule, en changeant un peu le dernier terme (puisqu'on ne veut plus garder les heures avant la durée B$13, mais après), ce qui donne
((B$11*24*60<périodeenminutes)*(périodeenminutes<=B$12*24*60)+((B$11+1)*24*60<périodeenminutes))*((B2+B$13)*24*60< périodeenminutes)
Pour avoir les heures de travail de nuit, normales, on fait avec
((périodeenminutes<=B$11*24*60)+(B$12*24*60<périodeenminutes))*(périodeenminutes<=(B$11+1)*24*60)*(périodeenminutes<=((B2+B$13)*24*60))
On voit bien que c'est le même genre de formule, mais l'ordre des inégalités ayant été modifié, certaines parenthèses ayant été déplacées, des * remplaçant des +, etc...
@ plus
Rem : Si on n'a pas beaucoup de conditions, on doit pouvoir faire plus court avec un FREQUENCE car on a
SOMMEPROD((B$11*24*60<périodeenminutes)*(périodeenminutes<=B$12*24*60)) = INDEX(FREQUENCE(périodeenminutes;B$11:B$12*24*60);2). Dans le cas présent, je ne vois pas comment rajouter simplement la condition pour faire la différence entre les heures normales et les heures sup avec la formule utilisant la fonction FREQUENCE.