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 102 103 104 105 106 107 108 109 110 111 112
| Option Explicit
Public Function Astr(d1 As Date, d2 As Date)
Dim v As Single, d As Date, j As Integer, samedi As Boolean, rT As Range
Dim dJF As Date, rJF As Range
v = 0
samedi = False
Set rT = Range("Tarif") '--- tarifs --- attention, ne pas changer l'ordre !
If Hour(d2) = 0 Then d2 = d2 - 1 '--- fin à minuit = fin à la date précédente
'--- astreinte
For d = d1 To d2 '--- parcourir les dates
j = Weekday(d, vbMonday) '--- lundi = 1
If j < 6 Then
v = v + rT.Cells(1, 1) '--- prime Lu-Ven
ElseIf j = 6 Then
v = v + rT.Cells(2, 1) '--- prime Samedi
samedi = True
Else
If samedi Then '--- déjà en astreinte le samedi
v = v - rT.Cells(2, 1) '--- retire la prime du samedi
v = v + rT.Cells(4, 1) '--- ajoute la prime weekend
samedi = False '--- pour éviter double comptage sur dimanche à dimanche
Else '--- pas en astreinte le samedi
v = v + rT.Cells(3, 1) '--- ajout prime dimanche seul
End If
End If
Next d
'--- jours fériés
With Range("Tableau_JF")
For j = 1 To .Count
dJF = .Cells(j, 1)
If dJF >= d1 And dJF <= d2 Then
v = v + 96 '--- majoration jour férié
End If
Next j
End With
Astr = v
End Function
Public Function Interv(d1 As Date, d2 As Date)
Dim nbH As Double, nbHJ As Double, nbHN As Double
Dim d1hN As Date, d1hJ As Date, d2hN As Date, d2hJ As Date
'---
If d2 < d1 Then
Interv = "d2 < d1 !" '--- non admis
Exit Function
End If
nbH = d2 - d1
If nbH > 1 Then
Interv = "> 24h !" '--- non admis --- entrer 2 interventions
Exit Function
End If
nbHJ = 0
nbHN = 0
d1hJ = Int(d1) + Range("Tarif").Cells(9, 1) '--- date1-heure début jour
d1hN = Int(d1) + Range("Tarif").Cells(8, 1) '--- date1-heure début nuit
d2hJ = Int(d2) + Range("Tarif").Cells(9, 1) '--- date2-heure début jour
d2hN = Int(d2) + Range("Tarif").Cells(8, 1) '--- date2-heure début nuit
'Debug.Print d1hJ, d1hN, d2hJ, d2hN
'---
If d1 < d1hJ Then
'--- commence entre minuit et 6h du jour 1
If d2 < d1hJ Then
nbHN = d2 - d1
d1 = d2
Else
nbHN = nbHN + d1hJ - d1
d1 = d1hJ
End If
End If
If d1 < d1hN Then
'--- commence entre 6h et 22h du jour 1
If d2 < d1hN Then
nbHJ = nbHJ + d2 - d1
d1 = d2
Else
nbHJ = d1hN - d1
d1 = d1hN
End If
End If
If d2 <= Int(d1) + 1 Then
'--- intervention se termine à minuit ou avant
nbHN = nbHN + d2 - d1
Else
'--- intervention sur 2 jours (dates) consécutifs
If d1 < d2hJ Then
'--- commence entre 22h et 6h du jour 2
If d2 < d2hJ Then
nbHN = nbHN + d2 - d1
d1 = d2
Else
nbHN = nbHN + d2hJ - d1
d1 = d2hJ
End If
End If
If d1 < d2hN Then
'--- commence entre 6h et 22h du jour 2
If d2 < d2hN Then
nbHJ = nbHJ + d2 - d1
d1 = d2
Else
nbHJ = nbHJ + d2hN - d1
d1 = d2hJ
End If
End If
End If
'Debug.Print "Jour: "; nbHJ * 24, "Nuit: "; nbHN * 24
nbHJ = Hour(nbHJ) + IIf(Minute(nbHJ) > 0, 0.5, 0) + IIf(Minute(nbHJ) > 30, 0.5, 0)
nbHN = Hour(nbHN) + IIf(Minute(nbHN) > 0, 0.5, 0) + IIf(Minute(nbHN) > 30, 0.5, 0)
'Debug.Print "Jour: "; nbHJ, "Nuit: "; nbHN
Interv = (nbHJ + nbHN * (1 + Range("Tarif").Cells(7, 1))) * Range("Tarif").Cells(6, 1)
End Function |
Partager