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
| Sub Test()
MsgBox Total(#1/1/2004#, #5/6/2004#)
End Sub
Function Total(ByVal date_debut As Date, ByVal date_fin As Date) As Single
Dim TotalHeures As Single
Dim D As Date
Total = 0
D = date_debut
Do While D <= date_fin
If EstFerié(D) Then
TotalHeures = TotalHeures + 0
Else
Select Case Weekday(D)
Case 2 To 5 'Lundi à Jeudi
TotalHeures = TotalHeures + 8.5
Case 6 'Vendredi
TotalHeures = TotalHeures + 5
Case 1, 7
TotalHeures = TotalHeures + 0
End Select
End If
D = D + 1
Loop
Total = TotalHeures
End Function
Function EstFerié(ByVal QuelleDate As Date) As Boolean
Dim anneeDate As Integer
Dim joursFeries(1 To 11) As Date
Dim I As Integer
anneeDate = Year(QuelleDate)
joursFeries(1) = CDate("01/01/" & anneeDate)
joursFeries(2) = CDate("01/05/" & anneeDate)
joursFeries(3) = CDate("08/01/" & anneeDate)
joursFeries(4) = CDate("14/07/" & anneeDate)
joursFeries(5) = CDate("15/08/" & anneeDate)
joursFeries(6) = CDate("01/11/" & anneeDate)
joursFeries(7) = CDate("11/11/" & anneeDate)
joursFeries(8) = CDate("25/12/" & anneeDate)
' Lundi de Pâques = Paques + 1
' Ascension = Paques + 39
' Lundi Pentecôte = Paques + 50
joursFeries(9) = JourDePaques(anneeDate)
joursFeries(10) = joursFeries(1) + 39
joursFeries(11) = joursFeries(1) + 50
For I = 1 To 11
If QuelleDate = joursFeries(I) Then
EstFerié = True
Exit For
End If
Next
End Function
Public Function JourDePaques(Annee) As Date
Dim a, b, c, d, e, f, g, h, I, k, l, m, n, p As Integer
a = Int(Annee Mod 19)
b = Int(Annee \ 100)
c = Int(Annee Mod 100)
d = b \ 4
e = b Mod 4
f = (b + 8) \ 25
g = (b - f + 1) \ 3
h = (19 * a + b - d - g + 15) Mod 30
I = c \ 4
k = c Mod 4
l = (32 + 2 * e + 2 * I - h - k) Mod 7
m = (a + 11 * h + 22 * l) \ 451
n = (h + l - 7 * m + 114) \ 31
p = (h + l - 7 * m + 114) Mod 31
JourDePaques = DateSerial(Annee, n, p + 1)
End Function |
Partager