Re : trouver les dates des week ends et jours fériés
Bonjour Melba,
J'avais déjà vu ce type de question et je viens de retrouver ce qui devrait t'aider.
Il me semble que c'est une solution qui avait été proposé par Laurent Longre.
En espérant que cela répond à ta question 😉
Public Function NbOuvrés&(D1, D2)
Dim Prem As Date, Der As Date, i As Date
If D1 = D2 Then Prem = D1
If TYPEJOUR(Prem) = 0 Then
NbOuvrés = 1
Exit Function
End If
Prem = D1
Der = D2
For i = Prem To Der
NbOuvrés = NbOuvrés + (TYPEJOUR(i) = 0) * -1
Next i
End Function
'Cette fonction renvoie 0 si le jour passé en paramètre est un jour de semaine,
'1 s'il s'agit d'un samedi ou d'un dimanche et 2 s'il s'agit d'un jour férié.
'Valide jusqu'en 2099 et pour les jours fériés français
Public Function TYPEJOUR(D As Date)
Dim A As Integer, t As Integer
Dim LP As Date, LD As Long
Dim Toto As Long
A = Year(D)
If A > 2099 Then
TYPEJOUR = 0
Exit Function
End If
LD = Int(D)
If LD <= 2 Then
If LD = 1 Then
TYPEJOUR = 2
Exit Function
End If
End If
t = (((255 - 11 * (A Mod 19)) - 21) Mod 30) + 21
LP = DateSerial(A, 3, 2) + t + (t > 48) _
+ 6 - ((A + A \ 4 + t + (t > 48) + 1) Mod 7)
Select Case D
' Jours fériés mobiles
Case Is = LP, Is = LP + 38, Is = LP + 49
TYPEJOUR = 2
' Jours fériés fixes
Case Is = DateSerial(A, 1, 1), Is = DateSerial(A, 5, 1), _
Is = DateSerial(A, 5, 8), Is = DateSerial(A, 7, 14), _
Is = DateSerial(A, 8, 15), Is = DateSerial(A, 11, 1), _
Is = DateSerial(A, 11, 11), Is = DateSerial(A, 12, 25)
TYPEJOUR = 2
Case Else
' Samedi ou dimanche
If Weekday(D, vbMonday) >= 6 Then
TYPEJOUR = 1
End If
End Select
End Function
' utilistation de la fonction
NbOuvrés& (date_début, date_fin)
Bonne chance.