Option Explicit
Private TFérié() As Boolean
Private Function EstFérié(ByVal LaDate As Date) As Boolean
Dim An As Integer, A As Integer, B As Integer, C As Integer, D As Integer, _
E As Integer, F As Integer, MPâq As Integer, Pâques As Date
On Error Resume Next
EstFérié = TFérié(LaDate): If Err = 0 Then Exit Function
On Error GoTo 0
An = Year(LaDate)
ReDim TFérié(DateSerial(An, 1, 1) To DateSerial(An + 1, 1, 0))
A = An Mod 19: B = An \ 100: C = (B - 17) \ 25
D = (B - B \ 4 - (B - C) \ 3 + 19 * A + 15) Mod 30
D = D - (D \ 28) * (1 - (D \ 28) * (29 \ (D + 1)) * ((21 - A) \ 11))
E = (An + An \ 4 + D + 2 - B + B \ 4) Mod 7: F = D - E
MPâq = 3 + (F + 40) \ 44: Pâques = DateSerial(An, MPâq, F + 28 - (MPâq \ 4) * 31)
TFérié(Pâques + 1) = True: TFérié(Pâques + 39) = True: TFérié(Pâques + 50) = True
TFérié(DateSerial(An, 1, 1)) = True: TFérié(DateSerial(An, 5, 1)) = True
TFérié(DateSerial(An, 5, 8)) = True: TFérié(DateSerial(An, 7, 14)) = True
TFérié(DateSerial(An, 8, 15)) = True: TFérié(DateSerial(An, 11, 1)) = True
TFérié(DateSerial(An, 11, 11)) = True: TFérié(DateSerial(An, 12, 25)) = True
EstFérié = TFérié(LaDate)
End Function