1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| Function Calcul(Deb As Range, Fin As Range, Jour As Range, bareme As Single, Optional F As String) As Date
Dim h25 As Date, h50 As Date, h100 As Date, Teste As Date
Application.Volatile
If Fin.Value < Deb.Value Then
Teste = Fin.Value + 1
Else
Teste = Fin.Value
End If
'jours fériés
If UCase(F) = "F" Then
h100 = Teste - Deb.Value
If Deb.Value <= #12:00:00 PM# And Teste >= #1:00:00 PM# Then h100 = h100 - #1:00:00 AM#
If Deb.Value <= #7:00:00 PM# And Teste >= #8:00:00 PM# Then h100 = h100 - #1:00:00 AM#
If Jour.Value = "VENDREDI" Then
If Deb.Value <= #12:00:00 PM# And Teste >= #1:00:00 PM# Then h100 = h100 - #1:00:00 AM#
End If
Else
Select Case Jour.Value
Case "SAMEDI"
Select Case Deb.Value
Case Is <= #6:00:00 AM#
h50 = h50 + Application.Min(Teste, #6:00:00 AM#) - Deb.Value
h25 = h25 + Application.Min(Teste, #9:00:00 PM#) - #6:00:00 AM#
h50 = h50 + Application.Min(Teste, #6:00:00 AM# + 1) - #9:00:00 PM#
Case Is <= #9:00:00 PM#
h25 = h25 + Application.Min(Teste, #9:00:00 PM#) - Deb.Value
h50 = h50 + Application.Min(Teste, #6:00:00 AM# + 1) - #9:00:00 PM#
h25 = h25 + Application.Min(Teste, #6:00:00 AM# + 1) - #6:00:00 AM# - 1
End Select
If Deb.Value <= #12:00:00 PM# And Teste >= #1:00:00 PM# Then h25 = h25 - #1:00:00 AM#
If Deb.Value <= #7:00:00 PM# And Teste >= #8:00:00 PM# Then h25 = h25 - #1:00:00 AM#
Case "DIMANCHE"
Select Case Deb.Value
Case Is <= #6:00:00 AM#
h100 = h100 + Application.Min(Teste, #6:00:00 AM#) - Deb.Value
h50 = h50 + Application.Min(Teste, #9:00:00 PM#) - #6:00:00 AM#
h100 = h100 + Application.Min(Teste, #6:00:00 AM# + 1) - #9:00:00 PM#
Case Is <= #9:00:00 PM#
h50 = h50 + Application.Min(Teste, #9:00:00 PM#) - Deb.Value
h100 = h100 + Application.Min(Teste, #6:00:00 AM# + 1) - #9:00:00 PM#
h50 = h50 + Application.Min(Teste, #6:00:00 AM# + 1) - #6:00:00 AM# - 1
End Select
If Deb.Value <= #12:00:00 PM# And Teste >= #1:00:00 PM# Then h50 = h50 - #1:00:00 AM#
If Deb.Value <= #7:00:00 PM# And Teste >= #8:00:00 PM# Then h50 = h50 - #1:00:00 AM#
Case Else
If Deb.Value <= #7:00:00 PM# And Teste >= #8:00:00 PM# Then h25 = h25 - #1:00:00 AM#
Select Case Deb.Value
Case Is <= #6:00:00 AM#
h50 = h50 + Application.Min(Teste, #6:00:00 AM#) - Deb
h25 = h25 + Application.Min(Teste, #8:00:00 AM#) - #6:00:00 AM#
If Fin.Value > #6:00:00 PM# Then
h25 = h25 + Application.Min(#9:00:00 PM#, Teste) - #6:00:00 PM#
End If
Case Is < #8:00:00 AM#
h25 = h25 + Application.Min(Teste, #8:00:00 AM#) - Deb.Value
If Teste > #9:00:00 PM# Then
h50 = h50 + Teste - #9:00:00 PM#
h25 = h25 + #3:00:00 AM#
ElseIf Teste <= #9:00:00 PM# Then
h25 = h25 + Teste - #6:00:00 PM#
End If
Case Is < #6:00:00 PM#
If Teste >= #6:00:00 AM# + 1 Then
h25 = h25 + Application.Min(Teste, #6:00:00 AM# + 1) - #6:00:00 AM# + 1
ElseIf Teste > #9:00:00 PM# Then
h50 = h50 + Application.Min(Teste, #6:00:00 AM# + 1) - #9:00:00 PM#
h25 = h25 + #3:00:00 AM#
ElseIf Teste <= #9:00:00 PM# Then
h25 = h25 + Teste - #6:00:00 PM#
End If
Case Is < #9:00:00 PM#
If Teste >= #6:00:00 AM# + 1 Then
h25 = h25 + Application.Min(#8:00:00 AM# + 1, Teste) - #6:00:00 AM# - 1
h50 = h50 + #9:00:00 AM#
ElseIf Teste <= #6:00:00 AM# + 1 And Teste > #9:00:00 PM# Then
h50 = h50 + #9:00:00 AM#
ElseIf Teste < #9:00:00 PM# Then
h25 = h25 + Teste - #6:00:00 PM#
End If
Case Is >= #9:00:00 PM#
If Teste >= #6:00:00 AM# + 1 Then
h25 = h25 + Application.Min(#8:00:00 AM# + 1, Teste) - #6:00:00 AM# - 1
h50 = h50 + #9:00:00 AM#
h25 = h25 + #3:00:00 AM#
ElseIf Teste <= #6:00:00 AM# + 1 And Teste > #9:00:00 PM# Then
h50 = h50 + #9:00:00 AM#
h25 = h25 + #3:00:00 AM#
ElseIf Teste < #9:00:00 PM# Then
h25 = h25 + Teste - #6:00:00 PM#
End If
End Select
End Select
End If
If bareme = 0.25 Then
Calcul = h25
ElseIf bareme = 0.5 Then
Calcul = h50
ElseIf bareme = 1 Then
Calcul = h100
End If
End Function |
Partager