Function HeuresOuvr(DateDébut As Date, DateFin As Date, PlagesLM As Range, JoursCongés As Range) As Double
Dim PH, JC, i As Long, j As Long, DaDeb2 As Date, HeureDébut As Double, PlageDeb As Long, DateD As Date
Dim DateF As Date, PlageF As Long, HeureF As Double, DaFin2 As Date, AncPlageDeb As Long
PH = PlagesLM.Value
JC = JoursCongés.Value
For i = 1 To UBound(PH, 1)
For j = 1 To UBound(PH, 2)
If Not (i = UBound(PH, 1) And j = UBound(PH, 2) And PH(i, j) = 1) Then
PH(i, j) = CDate(PH(i, j) - Fix(PH(i, j)))
End If
Next j
Next i
DaDeb = DateDébut
HeureDébut = CDbl(DateDébut) - Fix(CDbl(DateDébut))
PlageDeb = PlageEnCours(HeureDébut, PH, JC)
DaDeb2 = DaDeb
HeureDébut = CDbl(DaDeb2) - Fix(CDbl(DaDeb2))
DateD = Fix(CDbl(DaDeb2))
DaDeb = DateFin
HeureF = CDbl(DateFin) - Fix(CDbl(DateFin))
PlageF = PlageEnCours(HeureF, PH, JC)
DaFin2 = DaDeb
HeureF = CDbl(DaFin2) - Fix(CDbl(DaFin2))
DateF = Fix(CDbl(DaFin2))
If PlageDeb = PlageF And DateD = DateF Then
HeuresOuvr = CDbl(DaFin2 - DaDeb2)
Else
AncPlageDeb = PlageDeb
PlageDeb = PlageDeb + 1
If PlageDeb > UBound(PH, 1) Then
PlageDeb = 1
DaDeb2 = ProchainJourOuvré(CDate(Fix(CDbl(DaDeb2))) + 1, JC) + CDbl(PH(1, 1))
Else
DaDeb2 = CDate(Fix(CDbl(DaDeb2)) + CDbl(PH(PlageDeb, 1)))
End If
HeuresOuvr = PH(AncPlageDeb, 2) - HeureDébut + HeuresOuvr(DaDeb2, DaFin2, PlagesLM, JoursCongés)
End If
End Function