La fonction VBA présentée dans ce billet permet de savoir si la date passée en argument correspond à un jour ouvré (du lundi au vendredi) non chômé (non férié) en France.
Dépendances de la fonction
Nécessite la fonction EstJourFerie() et la fonction Paques().
Le code de la fonction
'Retourne Vrai si la date est un jour ouvré (du lundi au vendredi) NON férié (non chômé)
'philben - free to use
If Weekday(laDate, vbMonday) < 6 Then
If Not EstJourFerie(laDate, EstPentecoteChome) Then EstJourOuvreNonChome = True
End If
End Function
Explications
La fonction retourne Vrai si la date passée en argument correspond à un jour ouvré non chômé.
Cette fonction admet un deuxième paramètre qui permet de définir si le jour de la Pentecôte est chômé (Vrai par défaut) ou non.
La ligne de code ‘If Weekday(…)’ filtre les jours de semaine pour ne conserver que les jours ouvrés (du lundi au vendredi). On utilise ensuite la fonction EstJourFerie(…) qui retourne Vrai s’il s’agit d’un jour férié.
Vérification des résultats
La fonction suivante compte les jours ouvrés non chômés pour différentes années puis compare le résultat avec la valeur attendue (données issues de ce site).
Dim v() As Variant, d As Date, l As Integer, i As Integer, NbErr As Integer
v = Array(2010, 254, 2011, 253, 2012, 253, 2013, 251, 2014, 251, 2015, 252, 2016, 253, 2021, 254)
For i = LBound(v) To UBound(v) Step 2
d = DateSerial(v(i), 1, 1)
While Year(d) = v(i)
If EstJourOuvreNonChome(d) Then l = l + 1
d = d + 1
Wend
If l <> v(i + 1) Then NbErr = NbErr + 1
Debug.Print "Nb jours ouvrés non chômés en " & v(i), " -> Attendu : " & v(i + 1), " -> Obtenu : " & l, IIf(l <> v(i + 1), "*** ERREUR ***", "")
l = 0
Next i
Debug.Print "Nombre d'erreur(s) : " & NbErr
End Function
Remarque : Le lundi de Pentecôte est considéré comme chômé ici.
@+
Philippe
bonjour, je voudrais utiliser ce code mais ça serait pour une entreprise. Ce code est-il protégé par une licence? laquelle? merci
Bonjour, pas de problème pour l’utiliser dans une entreprise.
Cordialement