bonjour,
une proposition via une fonction personnalisée
splitplage(debut,fin,numerodeplage)
Fonction qui répartit les heures prestées entre debut et fin en 3 plages horaires (5 à 13, 13 à 21 et 21 à 5) et retourne les heures prestées pour la plage correspondant au numéro de plage (s'il n'y a pas de numéro de plage mentionné, la fonction renvoie les heures prestées pour chacune des plages)
Function splitplage(debut, fin, Optional plagenum = 0)
Dim pl(1 To 1, 1 To 3)
h = debut - Int(debut)
Select Case h
Case Is < 5 / 24
plage = 1: pl(1, 3) = Application.Min(5 / 24 - h, fin - debut): debut = debut + pl(1, 3)
Case Is < 13 / 24
plage = 2: pl(1, 1) = Application.Min(13 / 24 - h, fin - debut): debut = debut + pl(1, 1)
Case Is < 21 / 24
plage = 3: pl(1, 2) = Application.Min(21 / 24 - h, fin - debut): debut = debut + pl(1, 1)
Case Is <= 1
plage = 3: pl(1, 3) = Application.Min(1 - h, fin - debut): debut = debut + pl(1, 3)
Case Else
End Select
Do While debut < fin
pl(1, plage) = pl(1, plage) + Application.Min(8 / 24, fin - debut)
debut = debut + 8 / 24
plage = plage + 1
If plage > 3 Then plage = 1
Loop
If plagenum = 0 Then
splitplage = pl
Else
splitplage = pl(1, plagenum)
End If
End Function