VBA : S’agit-il d’un jour ouvré non chômé ?

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

Public Function EstJourOuvreNonChome(ByVal laDate As Date, Optional ByVal EstPentecoteChome As Boolean = True) As Boolean
'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).

Public Function TestEstJourOuvreNonChome()
   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

2 réflexions au sujet de « VBA : S’agit-il d’un jour ouvré non chômé ? »

Laisser un commentaire