J'avais besoin de savoir pour chaque mois de n'importe quelle année le nombre de jours ouvrables y compris en déduisant les jours fériés. Pour les dates fixes c'est facile (14/07 25/12 etc...) et pour les jours variables je me suis inspiré d'une source d'ici.
c'est un module qui fait tout ça. utilisation :
msgbox NbJoursOuvrables(2003,04) donnera... suspense..21 !
Dans le zip la version ASP est incluse (prèsque pareil a part quelques modifs)
Source / Exemple :
Option Explicit
'Ce module renvoie le nombre de jours Ouvrables dans un mois en tenant compte des jours fériés
'utilisation : NbJoursOuvrables(2003,04) renvoit 21 !
'ATTENTION : ne tient pas compte des jours fériés concordataires en Alsace (et moselle)
' - le Vendredi Saint (vendredi juste avant le dimanche de paques)
' - la St Etienne (26 décembre)
'mais ce serait facile à rajouter en cas de besoin
Public Function NbJoursOuvrables(nAnne As Integer, nMois As Integer) As Integer
'nombre de jours ouvrable le mois. Tient compte des jours fériés !
Dim i As Integer
Dim Ret As Integer
i = Day(DateSerial(nAnne, nMois + 1, 0))
While i > 0
If Weekday(DateSerial(nAnne, nMois, i), vbMonday) < 6 Then
Ret = Ret + 1
End If
i = i - 1
Wend
NbJoursOuvrables = Ret - GetJoursFeries(nAnne, nMois)
End Function
Private Function GetJoursFeries(nAnne As Integer, nMois As Integer) As Integer
'retourne le nombre de jours fériés d'un mois d'une année, sauf ceux qui tombent un samedi-dimanche
Dim JF(10) As Date 'la tableau de tous les jours fériés de l'année
Dim Ret As Integer
Dim i As Integer
Dim DatePaques As Date
'ces jours fériés là sont à dates fixes
JF(0) = "01/01/" & nAnne 'Jour de l'an
JF(1) = "01/05/" & nAnne 'Fête du travail
JF(2) = "08/05/" & nAnne 'Victoire 1945
JF(3) = "14/07/" & nAnne 'Fête Nationnale
JF(4) = "15/08/" & nAnne 'Assomption
JF(5) = "01/11/" & nAnne 'La toussaint
JF(6) = "11/11/" & nAnne 'Armistice
JF(7) = "25/12/" & nAnne 'Noël
'on récupère la date du jour du dimanche de paques
'mais on ne la met pas dans le tableau puisque ça tombe forcément un dimanche
DatePaques = fPaques(nAnne)
'ceux à date variable
JF(8) = Format(DateAdd("d", 1, DatePaques), "dd/mm/yyyy") 'Lundi de paques
JF(9) = Format(DateAdd("d", 39, DatePaques), "dd/mm/yyyy") 'Ascension (39 jours après paques)
JF(10) = Format(DateAdd("d", 50, DatePaques), "dd/mm/yyyy") 'Pentecôte (50 jours après paques)
'on compte le nombre de jour féries normalement ouvrable du mois voulu
For i = 0 To 10
If Month(JF(i)) = nMois Then 'ci ce jour corresponbd à notre mois
If Weekday(JF(i), vbMonday) < 6 Then 'et en plus ce n'est pas un samedi dimanche
Ret = Ret + 1
End If
End If
Next i
GetJoursFeries = Ret
End Function
Private Function fPaques(nAnnne As Integer) As Date
'retourne la date du dimanche de paques
'La date du dimanche de Pâques est le premier dimanche qui suit la première pleine
'lune qui suit l'équinoxe de printemps.
'(C)Patrick MOIRE, trouvé sur VBFrance.com , modifié par Olivier Risacher
Dim a As Integer, b As Integer, c As Integer
Dim g As Integer, h As Integer, l As Integer
Dim m As Integer, n As Integer, p As Integer
a = nAnnne Mod 19
b = nAnnne \ 100
c = nAnnne Mod 100
g = (b - Int((b + 8) \ 25) + 1) \ 3
h = (19 * a + b - Int(b \ 4) - g + 15) Mod 30
l = (32 + 2 * (b Mod 4) + 2 * Int(c \ 4) - h - Int(c Mod 4)) Mod 7
m = (a + 11 * h + 22 * l) \ 451
n = (h + l - 7 * m + 114) \ 31
p = (h + l - 7 * m + 114) Mod 31
fPaques = DateSerial(nAnnne, n, p + 1)
End Function
Conclusion :
voila
http://www.rature.com
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.