| Public Function IsHoliday(ByVal vdInput As Date) As Boolean
Dim nDelta As Long
If Weekday(vdInput, vbMonday) >= 6 Then
IsHoliday = True '# Ici, on considère que Samedi et Dimanche sont des jours non ouvrés...
ElseIf InStr(1, "01/01 01/05 08/05 14/07 15/08 01/11 11/11 25/12", Format$(vdInput, "DD\/MM")) Then
IsHoliday = True
Else
nDelta = DateDiff("D", Easter(Year(vdInput)), vdInput)
IsHoliday = (nDelta = 0 Or _
nDelta = 1 Or _
nDelta = 39 Or _
nDelta = 49 Or _
nDelta = 50)
End If
End Function |
Public Property Get Easter(ByVal vnYear As Integer) As Date
Dim nE As Integer
Dim nH As Integer
Dim nK As Integer
Dim nP As Integer
Dim nQ As Integer
Dim nI As Integer
Dim nJ As Integer
Dim nGolden As Integer
Dim nCentury As Integer
Dim nCenturyQ As Integer
nGolden = vnYear Mod 19
nCentury = vnYear \ 100
nCenturyQ = nCentury \ 4
nE = (8 * nCentury + 13) \ 25
nH = (19 * nGolden + nCentury - nCenturyQ - nE + 15) Mod 30
nK = nH \ 28
nP = 29 \ (nH + 1)
nQ = (21 - nGolden) \ 11
nI = (nK * nP * nQ - 1) * nK + nH
nJ = ((vnYear \ 4 + vnYear) + nI + 2 + nCenturyQ - nCentury) Mod 7
nJ = 28 + nI - nJ
If nJ <= 31 Then
Easter = DateSerial(vnYear, 3, nJ)
Else
Easter = DateSerial(vnYear, 4, nJ - 31)
End If
End Property