calcul des jours ouvrés en décomptant les week-end fériés
4 réponses
rafael
J'ai un problème : j'ai récupéré un module modDay qui me calcule le
nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est
en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui
est un jour férié, ce jour doit être compté comme jour travaillé.
Il faut créer un autre module qui ressemble à modDay. J'ai fait
quelques tests en vain.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
ze Titi
Bonjour rafael
Si tu nous donnes le module modDay et celui que tu as créé, on pourra essayer de t'aider...
J'ai un problème : j'ai récupéré un module modDay qui me calcule le nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui est un jour férié, ce jour doit être compté comme jour travaillé. Il faut créer un autre module qui ressemble à modDay. J'ai fait quelques tests en vain.
Quelqu'un peux t-il m'aider ?
Merci d'avance.
-- Voilou ! Bon code Cordialement,
Ze Titi
Bonjour rafael
Si tu nous donnes le module modDay et celui que tu as créé, on pourra
essayer de t'aider...
J'ai un problème : j'ai récupéré un module modDay qui me calcule le
nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est
en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui
est un jour férié, ce jour doit être compté comme jour travaillé.
Il faut créer un autre module qui ressemble à modDay. J'ai fait
quelques tests en vain.
Si tu nous donnes le module modDay et celui que tu as créé, on pourra essayer de t'aider...
J'ai un problème : j'ai récupéré un module modDay qui me calcule le nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui est un jour férié, ce jour doit être compté comme jour travaillé. Il faut créer un autre module qui ressemble à modDay. J'ai fait quelques tests en vain.
Quelqu'un peux t-il m'aider ?
Merci d'avance.
-- Voilou ! Bon code Cordialement,
Ze Titi
ze Titi
Bonjour rafael
Regarde la réponse donnée au message de lolo_bob2 ce jour, ça pourrait peut-être t'apporter une réponse...
dans ton message
J'ai un problème : j'ai récupéré un module modDay qui me calcule le nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui est un jour férié, ce jour doit être compté comme jour travaillé. Il faut créer un autre module qui ressemble à modDay. J'ai fait quelques tests en vain.
Quelqu'un peux t-il m'aider ?
Merci d'avance.
-- Voilou ! Bon code Cordialement,
Ze Titi
Bonjour rafael
Regarde la réponse donnée au message de lolo_bob2 ce jour, ça pourrait
peut-être t'apporter une réponse...
dans ton message <C49C4FF4-A776-423F-9D3A-D8E9F2CA2D06@microsoft.com>
J'ai un problème : j'ai récupéré un module modDay qui me calcule le
nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est
en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui
est un jour férié, ce jour doit être compté comme jour travaillé.
Il faut créer un autre module qui ressemble à modDay. J'ai fait
quelques tests en vain.
Regarde la réponse donnée au message de lolo_bob2 ce jour, ça pourrait peut-être t'apporter une réponse...
dans ton message
J'ai un problème : j'ai récupéré un module modDay qui me calcule le nombre de jours ouvrés dans une période. Voilà le HIC. Quand une personne est en arrêt maladie et que durant cet arrêt, il y a un samedi ou un dimanche qui est un jour férié, ce jour doit être compté comme jour travaillé. Il faut créer un autre module qui ressemble à modDay. J'ai fait quelques tests en vain.
Quelqu'un peux t-il m'aider ?
Merci d'avance.
-- Voilou ! Bon code Cordialement,
Ze Titi
rafael
C'est vrai que sans le module, ca va être difficile de m'aider. Voilà le Module modDay:
Option Compare Database
Public Function fPaques(wAn%) As Date 'Pâques est le dimanche qui suit le quatorzième jour de la 'Lune qui tombe le 21 mars ou immédiatement après
Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH% Dim wI%, wJ%, wK%, wL%, wM%, wN%, wP%
wA = wAn Mod 19 'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans wB = wAn 100 'Calcul du siècle wC = wAn Mod 100 'Calcul du rang de l'année dans le siècle wD = wB 4 wE = wB Mod 4 wF = (wB + 8) 25 wG = (wB - wF + 1) 3 wH = (19 * wA + wB - wD - wG + 15) Mod 30 wI = wC 4 wK = wC Mod 4 wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7 wM = (wA + 11 * wH + 22 * wL) 451 wN = (wH + wL - 7 * wM + 114) 31 'détermine le mois wP = (wH + wL - 7 * wM + 114) Mod 31 'détermine le jour
Public Function JourFérié(dtDate As Date) As Boolean
Dim dtPaques As Date dtPaques = fPaques(Year(dtDate)) Select Case dtDate Case CDate("01/01/" & Year(dtDate)) 'Jour de l'an JourFérié = True Case CDate("01/05/" & Year(dtDate)) 'Fête du travail JourFérié = True Case CDate("08/05/" & Year(dtDate)) 'Victoire de 1945 JourFérié = True Case CDate("14/07/" & Year(dtDate)) 'Fête nationale JourFérié = True Case CDate("15/08/" & Year(dtDate)) 'Assomption JourFérié = True Case CDate("01/11/" & Year(dtDate)) 'Toussaint JourFérié = True Case CDate("11/11/" & Year(dtDate)) 'Armistie 1918 JourFérié = True Case CDate("25/12/" & Year(dtDate)) 'Noël JourFérié = True Case dtPaques + 1 'Lundi de Pâques JourFérié = True Case dtPaques + 39 'Ascension JourFérié = True Case dtPaques + 50 'Lundi de pentcôte JourFérié = False Case Else JourFérié = False End Select
End Function
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer ' Calculer le nombre de jours ouvrables entre deux dates ' Utilise la fonction JourFérié(UneDate As Date)
Dim dblDateDeb As Double Dim dblDateFin As Double Dim DateCourante As Date Dim Resultat As Integer
If IsNull(DateDeb) Or IsNull(DateFin) Then NbDayOpen = 0 Exit Function ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then NbDayOpen = 0 Exit Function ElseIf DateDeb > DateFin Then Dim dhTemp As Date dhTemp = DateDeb DateDeb = DateFin DateFin = dhTemp End If
Do Until dblDateDeb > dblDateFin DateCourante = CDate(dblDateDeb) If Weekday(DateCourante) <> 1 And _ Weekday(DateCourante) <> 7 And _ JourFérié(DateCourante) = False Then Resultat = Resultat + 1 End If dblDateDeb = dblDateDeb + 1 Loop NbDayOpen = Resultat
End Function
Merci d'avance pour votre aide.
C'est vrai que sans le module, ca va être difficile de m'aider.
Voilà le Module modDay:
Option Compare Database
Public Function fPaques(wAn%) As Date
'Pâques est le dimanche qui suit le quatorzième jour de la
'Lune qui tombe le 21 mars ou immédiatement après
Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH%
Dim wI%, wJ%, wK%, wL%, wM%, wN%, wP%
wA = wAn Mod 19 'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans
wB = wAn 100 'Calcul du siècle
wC = wAn Mod 100 'Calcul du rang de l'année dans le siècle
wD = wB 4
wE = wB Mod 4
wF = (wB + 8) 25
wG = (wB - wF + 1) 3
wH = (19 * wA + wB - wD - wG + 15) Mod 30
wI = wC 4
wK = wC Mod 4
wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7
wM = (wA + 11 * wH + 22 * wL) 451
wN = (wH + wL - 7 * wM + 114) 31 'détermine le mois
wP = (wH + wL - 7 * wM + 114) Mod 31 'détermine le jour
Public Function JourFérié(dtDate As Date) As Boolean
Dim dtPaques As Date
dtPaques = fPaques(Year(dtDate))
Select Case dtDate
Case CDate("01/01/" & Year(dtDate)) 'Jour de l'an
JourFérié = True
Case CDate("01/05/" & Year(dtDate)) 'Fête du travail
JourFérié = True
Case CDate("08/05/" & Year(dtDate)) 'Victoire de 1945
JourFérié = True
Case CDate("14/07/" & Year(dtDate)) 'Fête nationale
JourFérié = True
Case CDate("15/08/" & Year(dtDate)) 'Assomption
JourFérié = True
Case CDate("01/11/" & Year(dtDate)) 'Toussaint
JourFérié = True
Case CDate("11/11/" & Year(dtDate)) 'Armistie 1918
JourFérié = True
Case CDate("25/12/" & Year(dtDate)) 'Noël
JourFérié = True
Case dtPaques + 1 'Lundi de Pâques
JourFérié = True
Case dtPaques + 39 'Ascension
JourFérié = True
Case dtPaques + 50 'Lundi de pentcôte
JourFérié = False
Case Else
JourFérié = False
End Select
End Function
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)
Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer
If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If
Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat
C'est vrai que sans le module, ca va être difficile de m'aider. Voilà le Module modDay:
Option Compare Database
Public Function fPaques(wAn%) As Date 'Pâques est le dimanche qui suit le quatorzième jour de la 'Lune qui tombe le 21 mars ou immédiatement après
Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH% Dim wI%, wJ%, wK%, wL%, wM%, wN%, wP%
wA = wAn Mod 19 'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans wB = wAn 100 'Calcul du siècle wC = wAn Mod 100 'Calcul du rang de l'année dans le siècle wD = wB 4 wE = wB Mod 4 wF = (wB + 8) 25 wG = (wB - wF + 1) 3 wH = (19 * wA + wB - wD - wG + 15) Mod 30 wI = wC 4 wK = wC Mod 4 wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7 wM = (wA + 11 * wH + 22 * wL) 451 wN = (wH + wL - 7 * wM + 114) 31 'détermine le mois wP = (wH + wL - 7 * wM + 114) Mod 31 'détermine le jour
Public Function JourFérié(dtDate As Date) As Boolean
Dim dtPaques As Date dtPaques = fPaques(Year(dtDate)) Select Case dtDate Case CDate("01/01/" & Year(dtDate)) 'Jour de l'an JourFérié = True Case CDate("01/05/" & Year(dtDate)) 'Fête du travail JourFérié = True Case CDate("08/05/" & Year(dtDate)) 'Victoire de 1945 JourFérié = True Case CDate("14/07/" & Year(dtDate)) 'Fête nationale JourFérié = True Case CDate("15/08/" & Year(dtDate)) 'Assomption JourFérié = True Case CDate("01/11/" & Year(dtDate)) 'Toussaint JourFérié = True Case CDate("11/11/" & Year(dtDate)) 'Armistie 1918 JourFérié = True Case CDate("25/12/" & Year(dtDate)) 'Noël JourFérié = True Case dtPaques + 1 'Lundi de Pâques JourFérié = True Case dtPaques + 39 'Ascension JourFérié = True Case dtPaques + 50 'Lundi de pentcôte JourFérié = False Case Else JourFérié = False End Select
End Function
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer ' Calculer le nombre de jours ouvrables entre deux dates ' Utilise la fonction JourFérié(UneDate As Date)
Dim dblDateDeb As Double Dim dblDateFin As Double Dim DateCourante As Date Dim Resultat As Integer
If IsNull(DateDeb) Or IsNull(DateFin) Then NbDayOpen = 0 Exit Function ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then NbDayOpen = 0 Exit Function ElseIf DateDeb > DateFin Then Dim dhTemp As Date dhTemp = DateDeb DateDeb = DateFin DateFin = dhTemp End If
Do Until dblDateDeb > dblDateFin DateCourante = CDate(dblDateDeb) If Weekday(DateCourante) <> 1 And _ Weekday(DateCourante) <> 7 And _ JourFérié(DateCourante) = False Then Resultat = Resultat + 1 End If dblDateDeb = dblDateDeb + 1 Loop NbDayOpen = Resultat
End Function
Merci d'avance pour votre aide.
Jean-Pierre
Salut Rafael,
Je te propose une autre solution, moins élégante, mais sans doute plus simple à mettre en oeuvre. J'ai une table avec 2 colonnes, "Date" et "Fete" qui contient tous les jours fériés de 2002 jusqu'en 2099 inclus. En 2100, nous serons tous morts, rien à foutre, et de toute façon, y'aura longtemps qu'un p'tit jeune aura décrété que ton appli, c'est de la merde, et aura tout réécrit.
Ton problème devrait être grandement simplifié car une simple jointure sur la date de permettra de savoir si le jour est férié ou pas. Et si nécessaire, un champ supplémentaire dans ta requête convertira la date en un numéro de jour dans la semaine.
Ci-après une copie des premières lignes de la table pour l'année 2002. Si ça t'intéresse, envoie un mail...
J-Pierre
JoursFeries Date Fete 01/01/02 Jour de l'an 31/03/02 Pâques 01/04/02 Lundi de Pâques 01/05/02 Fête du Travail 08/05/02 Armistice de 1945 09/05/02 Ascencion 20/05/02 Pentecôte 14/07/02 Fête nationale 15/08/02 Assomption 01/11/02 Toussaint 11/11/02 Armistice de 1918 25/12/02 Noël
"rafael" a écrit dans le message de news:
C'est vrai que sans le module, ca va être difficile de m'aider. Voilà le Module modDay:
Option Compare Database
Public Function fPaques(wAn%) As Date 'Pâques est le dimanche qui suit le quatorzième jour de la 'Lune qui tombe le 21 mars ou immédiatement après
Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH% Dim wI%, wJ%, wK%, wL%, wM%, wN%, wP%
wA = wAn Mod 19 'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans wB = wAn 100 'Calcul du siècle wC = wAn Mod 100 'Calcul du rang de l'année dans le siècle wD = wB 4 wE = wB Mod 4 wF = (wB + 8) 25 wG = (wB - wF + 1) 3 wH = (19 * wA + wB - wD - wG + 15) Mod 30 wI = wC 4 wK = wC Mod 4 wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7 wM = (wA + 11 * wH + 22 * wL) 451 wN = (wH + wL - 7 * wM + 114) 31 'détermine le mois wP = (wH + wL - 7 * wM + 114) Mod 31 'détermine le jour
Public Function JourFérié(dtDate As Date) As Boolean
Dim dtPaques As Date dtPaques = fPaques(Year(dtDate)) Select Case dtDate Case CDate("01/01/" & Year(dtDate)) 'Jour de l'an JourFérié = True Case CDate("01/05/" & Year(dtDate)) 'Fête du travail JourFérié = True Case CDate("08/05/" & Year(dtDate)) 'Victoire de 1945 JourFérié = True Case CDate("14/07/" & Year(dtDate)) 'Fête nationale JourFérié = True Case CDate("15/08/" & Year(dtDate)) 'Assomption JourFérié = True Case CDate("01/11/" & Year(dtDate)) 'Toussaint JourFérié = True Case CDate("11/11/" & Year(dtDate)) 'Armistie 1918 JourFérié = True Case CDate("25/12/" & Year(dtDate)) 'Noël JourFérié = True Case dtPaques + 1 'Lundi de Pâques JourFérié = True Case dtPaques + 39 'Ascension JourFérié = True Case dtPaques + 50 'Lundi de pentcôte JourFérié = False Case Else JourFérié = False End Select
End Function
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer ' Calculer le nombre de jours ouvrables entre deux dates ' Utilise la fonction JourFérié(UneDate As Date)
Dim dblDateDeb As Double Dim dblDateFin As Double Dim DateCourante As Date Dim Resultat As Integer
If IsNull(DateDeb) Or IsNull(DateFin) Then NbDayOpen = 0 Exit Function ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then NbDayOpen = 0 Exit Function ElseIf DateDeb > DateFin Then Dim dhTemp As Date dhTemp = DateDeb DateDeb = DateFin DateFin = dhTemp End If
Do Until dblDateDeb > dblDateFin DateCourante = CDate(dblDateDeb) If Weekday(DateCourante) <> 1 And _ Weekday(DateCourante) <> 7 And _ JourFérié(DateCourante) = False Then Resultat = Resultat + 1 End If dblDateDeb = dblDateDeb + 1 Loop NbDayOpen = Resultat
End Function
Merci d'avance pour votre aide.
Salut Rafael,
Je te propose une autre solution, moins élégante, mais sans doute plus simple à mettre en oeuvre. J'ai une table avec 2
colonnes, "Date" et "Fete" qui contient tous les jours fériés de 2002 jusqu'en 2099 inclus. En 2100, nous serons tous morts,
rien à foutre, et de toute façon, y'aura longtemps qu'un p'tit jeune aura décrété que ton appli, c'est de la merde, et aura
tout réécrit.
Ton problème devrait être grandement simplifié car une simple jointure sur la date de permettra de savoir si le jour est férié
ou pas. Et si nécessaire, un champ supplémentaire dans ta requête convertira la date en un numéro de jour dans la semaine.
Ci-après une copie des premières lignes de la table pour l'année 2002. Si ça t'intéresse, envoie un mail...
J-Pierre
JoursFeries Date Fete
01/01/02 Jour de l'an
31/03/02 Pâques
01/04/02 Lundi de Pâques
01/05/02 Fête du Travail
08/05/02 Armistice de 1945
09/05/02 Ascencion
20/05/02 Pentecôte
14/07/02 Fête nationale
15/08/02 Assomption
01/11/02 Toussaint
11/11/02 Armistice de 1918
25/12/02 Noël
"rafael" <rafael@discussions.microsoft.com> a écrit dans le message de news:
38D3D078-AAB2-4625-951B-D8EB635576FD@microsoft.com...
C'est vrai que sans le module, ca va être difficile de m'aider.
Voilà le Module modDay:
Option Compare Database
Public Function fPaques(wAn%) As Date
'Pâques est le dimanche qui suit le quatorzième jour de la
'Lune qui tombe le 21 mars ou immédiatement après
Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH%
Dim wI%, wJ%, wK%, wL%, wM%, wN%, wP%
wA = wAn Mod 19 'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans
wB = wAn 100 'Calcul du siècle
wC = wAn Mod 100 'Calcul du rang de l'année dans le siècle
wD = wB 4
wE = wB Mod 4
wF = (wB + 8) 25
wG = (wB - wF + 1) 3
wH = (19 * wA + wB - wD - wG + 15) Mod 30
wI = wC 4
wK = wC Mod 4
wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7
wM = (wA + 11 * wH + 22 * wL) 451
wN = (wH + wL - 7 * wM + 114) 31 'détermine le mois
wP = (wH + wL - 7 * wM + 114) Mod 31 'détermine le jour
Public Function JourFérié(dtDate As Date) As Boolean
Dim dtPaques As Date
dtPaques = fPaques(Year(dtDate))
Select Case dtDate
Case CDate("01/01/" & Year(dtDate)) 'Jour de l'an
JourFérié = True
Case CDate("01/05/" & Year(dtDate)) 'Fête du travail
JourFérié = True
Case CDate("08/05/" & Year(dtDate)) 'Victoire de 1945
JourFérié = True
Case CDate("14/07/" & Year(dtDate)) 'Fête nationale
JourFérié = True
Case CDate("15/08/" & Year(dtDate)) 'Assomption
JourFérié = True
Case CDate("01/11/" & Year(dtDate)) 'Toussaint
JourFérié = True
Case CDate("11/11/" & Year(dtDate)) 'Armistie 1918
JourFérié = True
Case CDate("25/12/" & Year(dtDate)) 'Noël
JourFérié = True
Case dtPaques + 1 'Lundi de Pâques
JourFérié = True
Case dtPaques + 39 'Ascension
JourFérié = True
Case dtPaques + 50 'Lundi de pentcôte
JourFérié = False
Case Else
JourFérié = False
End Select
End Function
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(UneDate As Date)
Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer
If IsNull(DateDeb) Or IsNull(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then
NbDayOpen = 0
Exit Function
ElseIf DateDeb > DateFin Then
Dim dhTemp As Date
dhTemp = DateDeb
DateDeb = DateFin
DateFin = dhTemp
End If
Do Until dblDateDeb > dblDateFin
DateCourante = CDate(dblDateDeb)
If Weekday(DateCourante) <> 1 And _
Weekday(DateCourante) <> 7 And _
JourFérié(DateCourante) = False Then
Resultat = Resultat + 1
End If
dblDateDeb = dblDateDeb + 1
Loop
NbDayOpen = Resultat
Je te propose une autre solution, moins élégante, mais sans doute plus simple à mettre en oeuvre. J'ai une table avec 2 colonnes, "Date" et "Fete" qui contient tous les jours fériés de 2002 jusqu'en 2099 inclus. En 2100, nous serons tous morts, rien à foutre, et de toute façon, y'aura longtemps qu'un p'tit jeune aura décrété que ton appli, c'est de la merde, et aura tout réécrit.
Ton problème devrait être grandement simplifié car une simple jointure sur la date de permettra de savoir si le jour est férié ou pas. Et si nécessaire, un champ supplémentaire dans ta requête convertira la date en un numéro de jour dans la semaine.
Ci-après une copie des premières lignes de la table pour l'année 2002. Si ça t'intéresse, envoie un mail...
J-Pierre
JoursFeries Date Fete 01/01/02 Jour de l'an 31/03/02 Pâques 01/04/02 Lundi de Pâques 01/05/02 Fête du Travail 08/05/02 Armistice de 1945 09/05/02 Ascencion 20/05/02 Pentecôte 14/07/02 Fête nationale 15/08/02 Assomption 01/11/02 Toussaint 11/11/02 Armistice de 1918 25/12/02 Noël
"rafael" a écrit dans le message de news:
C'est vrai que sans le module, ca va être difficile de m'aider. Voilà le Module modDay:
Option Compare Database
Public Function fPaques(wAn%) As Date 'Pâques est le dimanche qui suit le quatorzième jour de la 'Lune qui tombe le 21 mars ou immédiatement après
Dim wA%, wB%, wC%, wD%, wE%, wF%, wG%, wH% Dim wI%, wJ%, wK%, wL%, wM%, wN%, wP%
wA = wAn Mod 19 'Calcul du rang de l'année dans le cycle lunaire qui a 19 ans wB = wAn 100 'Calcul du siècle wC = wAn Mod 100 'Calcul du rang de l'année dans le siècle wD = wB 4 wE = wB Mod 4 wF = (wB + 8) 25 wG = (wB - wF + 1) 3 wH = (19 * wA + wB - wD - wG + 15) Mod 30 wI = wC 4 wK = wC Mod 4 wL = (32 + 2 * wE + 2 * wI - wH - wK) Mod 7 wM = (wA + 11 * wH + 22 * wL) 451 wN = (wH + wL - 7 * wM + 114) 31 'détermine le mois wP = (wH + wL - 7 * wM + 114) Mod 31 'détermine le jour
Public Function JourFérié(dtDate As Date) As Boolean
Dim dtPaques As Date dtPaques = fPaques(Year(dtDate)) Select Case dtDate Case CDate("01/01/" & Year(dtDate)) 'Jour de l'an JourFérié = True Case CDate("01/05/" & Year(dtDate)) 'Fête du travail JourFérié = True Case CDate("08/05/" & Year(dtDate)) 'Victoire de 1945 JourFérié = True Case CDate("14/07/" & Year(dtDate)) 'Fête nationale JourFérié = True Case CDate("15/08/" & Year(dtDate)) 'Assomption JourFérié = True Case CDate("01/11/" & Year(dtDate)) 'Toussaint JourFérié = True Case CDate("11/11/" & Year(dtDate)) 'Armistie 1918 JourFérié = True Case CDate("25/12/" & Year(dtDate)) 'Noël JourFérié = True Case dtPaques + 1 'Lundi de Pâques JourFérié = True Case dtPaques + 39 'Ascension JourFérié = True Case dtPaques + 50 'Lundi de pentcôte JourFérié = False Case Else JourFérié = False End Select
End Function
Public Function NbDayOpen(DateDeb As Date, DateFin As Date) As Integer ' Calculer le nombre de jours ouvrables entre deux dates ' Utilise la fonction JourFérié(UneDate As Date)
Dim dblDateDeb As Double Dim dblDateFin As Double Dim DateCourante As Date Dim Resultat As Integer
If IsNull(DateDeb) Or IsNull(DateFin) Then NbDayOpen = 0 Exit Function ElseIf Not IsDate(DateDeb) Or Not IsDate(DateFin) Then NbDayOpen = 0 Exit Function ElseIf DateDeb > DateFin Then Dim dhTemp As Date dhTemp = DateDeb DateDeb = DateFin DateFin = dhTemp End If
Do Until dblDateDeb > dblDateFin DateCourante = CDate(dblDateDeb) If Weekday(DateCourante) <> 1 And _ Weekday(DateCourante) <> 7 And _ JourFérié(DateCourante) = False Then Resultat = Resultat + 1 End If dblDateDeb = dblDateDeb + 1 Loop NbDayOpen = Resultat