Tellement complexe qu'il a fallu faire une fonction personnalisée à mettre dans une macro
Option Explicit
Function heures(plage As Range, bornes As Range)
Dim depuis As Date, jusque As Date
Application.Volatile
With plage
heures = 0
If .Count <> 2 Or bornes.Count <> 2 Then heures = "nombre de paramètres incorrect": Exit Function
depuis = bornes.Cells(1, 1) + Int(.Cells(1, 1))
jusque = bornes.Cells(2, 1) + Int(.Cells(1, 1))
Select Case True
Case .Cells(1, 1) > depuis And .Cells(1, 2) <= jusque
heures = heures + .Cells(1, 2) - .Cells(1, 1)
Case .Cells(1, 1) <= depuis And .Cells(1, 2) <= jusque
heures = heures + Application.Max(0, .Cells(1, 2) - depuis)
Case .Cells(1, 1) > depuis And .Cells(1, 2) > jusque
heures = heures + Application.Max(0, jusque - .Cells(1, 1))
Case .Cells(1, 1) <= depuis And .Cells(1, 2) > jusque
heures = heures + jusque - depuis
Case Else
End Select
depuis = depuis - 1: jusque = jusque - 1
Select Case True
Case .Cells(1, 1) > depuis And .Cells(1, 2) <= jusque
heures = heures + .Cells(1, 2) - .Cells(1, 1)
Case .Cells(1, 1) <= depuis And .Cells(1, 2) <= jusque
heures = heures + Application.Max(0, .Cells(1, 2) - depuis)
Case .Cells(1, 1) > depuis And .Cells(1, 2) > jusque
heures = heures + Application.Max(0, jusque - .Cells(1, 1))
Case .Cells(1, 1) <= depuis And .Cells(1, 2) > jusque
heures = heures + jusque - depuis
Case Else
End Select
depuis = depuis + 2: jusque = jusque + 2
Select Case True
Case .Cells(1, 1) > depuis And .Cells(1, 2) <= jusque
heures = heures + .Cells(1, 2) - .Cells(1, 1)
Case .Cells(1, 1) <= depuis And .Cells(1, 2) <= jusque
heures = heures + Application.Max(0, .Cells(1, 2) - depuis)
Case .Cells(1, 1) > depuis And .Cells(1, 2) > jusque
heures = heures + Application.Max(0, jusque - .Cells(1, 1))
Case .Cells(1, 1) <= depuis And .Cells(1, 2) > jusque
heures = heures + jusque - depuis
Case Else
End Select
End With
End Function
Il faut appeler 2 fois la fonction, d'abord entre début poste et début pause, ensuite ensuite fin pause et fin poste.
Je n'ai pas affecté les heures du %