Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Calcul du nombre de jours ouvrables

3 réponses
Avatar
Jeff
Bonjour à tous,

J'ai trouvé à l'adresse ci-dessous ce qui devrait m'aider mais je ne
parviens pas à l'utiliser.

http://access.seneque.free.fr/dates1.htm#Jours_Ouvrables

J'ai ajouté la référence dans VB Editor et repris le code ci-dessous. Les
valeurs à traiter dans mon formulaire sont date1=05/05/2004 et
date2=06/06/2004 (pour tester et éviter les problèmes du type dateus).

Private Sub Commande7_Click()
Dim Jours As New RS_Temps
Dim nbj As Integer
nbj = Jours.JoursOuvrables(date1, date2)
End Sub

Rien ne se passe. Merci pour votre aide.

3 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Je ne connais pas la solution de notre ami Raymond, mais à défaut,
tu peux essayer le code qui suit, il te suffit de le copier dans un
module standard de la base de donnée et ensuite d'appeler la fonction :

-NbOpenDay()

***************************************************
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

fPaques = DateSerial(wAn, wN, wP + 1)

'** A titre d'info :************'
'** dtVenSaint = fPaques - 2****'
'** dtLunPaq = fPaques + 1******'
'** dtAscension = fPaques + 39**'
'** dtDimPent = fPaques + 49****'
'** dtLunPent = fPaques + 50****'

End Function

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é = True
Case Else
JourFérié = False
End Select

End Function

Public Function NbOpenDay(dtDeb As Date, dtFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
' Utilise la fonction JourFérié(dtDate As Date)

Dim dblDateDeb As Double
Dim dblDateFin As Double
Dim DateCourante As Date
Dim Resultat As Integer

If IsNull(dtDeb) Or IsNull(dtFin) _
Or IsEmpty(dtDeb) Or IsEmpty(dtFin) Then
NbOpenDay = 0
Exit Function
ElseIf Not IsDate(dtDeb) Or Not IsDate(dtFin) Then
NbOpenDay = 0
Exit Function
ElseIf dtDeb > dtFin Then
Dim dhTemp As Date
dhTemp = dtDeb
dtDeb = dtFin
dtFin = dhTemp
End If

dblDateDeb = CDbl(dtDeb)
dblDateFin = CDbl(dtFin)

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
NbOpenDay = Resultat

End Function
***************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Jeff" a écrit dans le message news:
c7fhil$ig5$
Bonjour à tous,

J'ai trouvé à l'adresse ci-dessous ce qui devrait m'aider mais je ne
parviens pas à l'utiliser.

http://access.seneque.free.fr/dates1.htm#Jours_Ouvrables

J'ai ajouté la référence dans VB Editor et repris le code ci-dessous. Les
valeurs à traiter dans mon formulaire sont date1/05/2004 et
date2/06/2004 (pour tester et éviter les problèmes du type dateus).

Private Sub Commande7_Click()
Dim Jours As New RS_Temps
Dim nbj As Integer
nbj = Jours.JoursOuvrables(date1, date2)
End Sub

Rien ne se passe. Merci pour votre aide.




Avatar
Raymond [mvp]
Bonjour Jeff.

je te fais des misères ?

je viens de tester avec la dll en téléchargement et ça fonctionne (dates
françaises dans un contrôle de formulaire ou variable)
modifie le test comme ceci:
Dim Jours As New RS_Temps
MsgBox Jours.JoursOuvrables(Me.Madate, Me.Ladate)
tu indiques 06/05/2004 dans madate
tu indiques 09/05/2004 dans ladate
le msgbox doit afficher 2
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Jeff" a écrit dans le message de
news:c7fhil$ig5$
Bonjour à tous,

J'ai trouvé à l'adresse ci-dessous ce qui devrait m'aider mais je ne
parviens pas à l'utiliser.

http://access.seneque.free.fr/dates1.htm#Jours_Ouvrables

J'ai ajouté la référence dans VB Editor et repris le code ci-dessous. Les
valeurs à traiter dans mon formulaire sont date1/05/2004 et
date2/06/2004 (pour tester et éviter les problèmes du type dateus).

Private Sub Commande7_Click()
Dim Jours As New RS_Temps
Dim nbj As Integer
nbj = Jours.JoursOuvrables(date1, date2)
End Sub

Rien ne se passe. Merci pour votre aide.




Avatar
Jeff
Merci

Je devais simplement remplacer
nbj = Jours.JoursOuvrables(date1, date2)
par
me.nbj = Jours.JoursOuvrables(date1, date2)

tellement gros que je l'avais pas vu 1000000 excuses et merci à tous.


"Jeff" a écrit dans le message de
news:c7fhil$ig5$
Bonjour à tous,

J'ai trouvé à l'adresse ci-dessous ce qui devrait m'aider mais je ne
parviens pas à l'utiliser.

http://access.seneque.free.fr/dates1.htm#Jours_Ouvrables

J'ai ajouté la référence dans VB Editor et repris le code ci-dessous. Les
valeurs à traiter dans mon formulaire sont date1/05/2004 et
date2/06/2004 (pour tester et éviter les problèmes du type dateus).

Private Sub Commande7_Click()
Dim Jours As New RS_Temps
Dim nbj As Integer
nbj = Jours.JoursOuvrables(date1, date2)
End Sub

Rien ne se passe. Merci pour votre aide.