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

nb de jours entre 2 dates...

1 réponse
Avatar
mike
Bonjour,

Alor voil=E0 j'ai une table unique avec un fomulaire=20
associ=E9. En fait je recence des =E9cart avec une date de=20
demande et une date de solde.

J'ai donc essay=E9 de faire un compte du nombre de jour=20
entre ces deux dates pour avoir en quelques sorte un=20
_temps de r=E9glement_.

J'ai utilis=E9 ce code trouv=E9 dans la base de connaissance :


Public Function NbreJoursOuvrables(dhDateD=E9but As Date,=20
dhDateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates=20
sans l'aide d'une table
' Utilise la fonction JourF=E9ri=E9Mobile(UneDate As Date)
' Dates entr=E9es en format am=E9ricain: MM/JJ/AAAA
' Entr=E9e:
' dhDateD=E9but:
' Date de d=E9part de l'intervallle de temps d=E9sir=E9 au=20
format europ=E9en entre guillemets.
' dhDateFin:
' Date de fin de l'intervalle de temps d=E9sir=E9 au format=20
europ=E9en entre guillemets.
' (les dates seront invers=E9es si n=E9cessaire)
' Test de validit=E9 des dates
If IsNull(dhDateD=E9but) Or IsNull(dhDateFin) Then
NbreJoursOuvrables =3D 0
Exit Function
ElseIf Not IsDate(dhDateD=E9but) Or Not IsDate(dhDateFin)=20
Then
NbreJoursOuvrables =3D 0
Exit Function
ElseIf dhDateD=E9but > dhDateFin Then
' Inversion des dates si n=E9cessaire.
Dim dhTemp As Date
dhTemp =3D dhDateD=E9but
dhDateD=E9but =3D dhDateFin
dhDateFin =3D dhTemp
End If
'Conversion des dates en valeurs num=E9riques (Double=20
pr=E9cision) format de date interne de la machine
Dim dbldhDateD=E9but As Double
Dim dbldhDateFin As Double
dbldhDateD=E9but =3D CDbl(dhDateD=E9but)
dbldhDateFin =3D CDbl(dhDateFin)
Dim dhDateCourante As Date
Dim R=E9sultat As Integer
Dim intAn As Integer
intAn =3D Year(Date)
' Comptage des jours entre la date de d=E9but et la date de=20
fin de l'intervalle de temps sp=E9cifi=E9
Do Until dbldhDateD=E9but > dbldhDateFin
' Initialisation du jour courant =E0 la date de d=E9but
dhDateCourante =3D CDate(dbldhDateD=E9but)
'Test pour savoir si le jour courant est ouvrable
If Weekday(dhDateCourante) <> 1 And Weekday
(dhDateCourante) <> 7 Then
'Test des jours f=E9ri=E9s avec dates invariables
Select Case dhDateCourante
Case CDate("01/01/" & intAn) 'Jour de l'an
Case CDate("01/05/" & intAn) 'F=EAte du travail
Case CDate("01/08/" & intAn) 'F=EAte nationale=20
suisse
Case CDate("25/12/" & intAn) 'No=EBl
Case CDate("26/12/" & intAn) 'St-Etienne
Case Else
' Totalise les jours ouvrables
R=E9sultat =3D R=E9sultat + 1
End Select
End If
dbldhDateD=E9but =3D dbldhDateD=E9but + 1
Loop
NbreJoursOuvrables =3D R=E9sultat
End Function




*Mon probl=E8me num=E9ro 1 c'est que tous les =E9carts ne sont=20
pas sold=E9s donc comme il ne voit de date de solde il met=20
_#erreur_ dans le champs de "temps de r=E9glement", c'est=20
donc tout =E0 fait normal je voudrais savoir comment peut-on=20
lui faire une condition pour qu'il ne marque pas cette=20
erreur...*

*Mon probl=E8me num=E9ro 2 qui est le plus important c'est que=20
lorsque je tombe sur un =E9cart sold=E9 de mon formulaire=20
Microsoft Visual Basic me fait une erreur en me disant :
ERREUR de compilation :
Projet ou biblioth=E8que introuvable

En m=EAme temps il me surligne _Date_ dans le code suivant :
intAn =3D Year(Date)

J'aimerai bien que l'on m'aide...*

Merci

1 réponse

Avatar
Raymond [mvp]
Bonjour.

sans regarder ta fonction.
il faut passer des dates valides à ta fonction, c'est à dire que si tu n'as
pas de date de fin il faut charger le dhDateFin avec la date du jour (voir
les fonctions Nz et IsDate)

pour l'erreur de compilation, vérifie tes références de librairies.
passe en editeur par alt+F11 , menu outils / références,
décoches les références marquées manquantes
recompile ton code et recorrige tant qu'il y a des erreurs.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"mike" a écrit dans le message de
news: 13d301c4a6c1$c9de3b20$
Bonjour,

Alor voilà j'ai une table unique avec un fomulaire
associé. En fait je recence des écart avec une date de
demande et une date de solde.

J'ai donc essayé de faire un compte du nombre de jour
entre ces deux dates pour avoir en quelques sorte un
_temps de réglement_.

J'ai utilisé ce code trouvé dans la base de connaissance :


Public Function NbreJoursOuvrables(dhDateDébut As Date,
dhDateFin As Date) As Integer
' Calculer le nombre de jours ouvrables entre deux dates
sans l'aide d'une table
' Utilise la fonction JourFériéMobile(UneDate As Date)
' Dates entrées en format américain: MM/JJ/AAAA
' Entrée:
' dhDateDébut:
' Date de départ de l'intervallle de temps désiré au
format européen entre guillemets.
' dhDateFin:
' Date de fin de l'intervalle de temps désiré au format
européen entre guillemets.
' (les dates seront inversées si nécessaire)
' Test de validité des dates
If IsNull(dhDateDébut) Or IsNull(dhDateFin) Then
NbreJoursOuvrables = 0
Exit Function
ElseIf Not IsDate(dhDateDébut) Or Not IsDate(dhDateFin)
Then
NbreJoursOuvrables = 0
Exit Function
ElseIf dhDateDébut > dhDateFin Then
' Inversion des dates si nécessaire.
Dim dhTemp As Date
dhTemp = dhDateDébut
dhDateDébut = dhDateFin
dhDateFin = dhTemp
End If
'Conversion des dates en valeurs numériques (Double
précision) format de date interne de la machine
Dim dbldhDateDébut As Double
Dim dbldhDateFin As Double
dbldhDateDébut = CDbl(dhDateDébut)
dbldhDateFin = CDbl(dhDateFin)
Dim dhDateCourante As Date
Dim Résultat As Integer
Dim intAn As Integer
intAn = Year(Date)
' Comptage des jours entre la date de début et la date de
fin de l'intervalle de temps spécifié
Do Until dbldhDateDébut > dbldhDateFin
' Initialisation du jour courant à la date de début
dhDateCourante = CDate(dbldhDateDébut)
'Test pour savoir si le jour courant est ouvrable
If Weekday(dhDateCourante) <> 1 And Weekday
(dhDateCourante) <> 7 Then
'Test des jours fériés avec dates invariables
Select Case dhDateCourante
Case CDate("01/01/" & intAn) 'Jour de l'an
Case CDate("01/05/" & intAn) 'Fête du travail
Case CDate("01/08/" & intAn) 'Fête nationale
suisse
Case CDate("25/12/" & intAn) 'Noël
Case CDate("26/12/" & intAn) 'St-Etienne
Case Else
' Totalise les jours ouvrables
Résultat = Résultat + 1
End Select
End If
dbldhDateDébut = dbldhDateDébut + 1
Loop
NbreJoursOuvrables = Résultat
End Function




*Mon problème numéro 1 c'est que tous les écarts ne sont
pas soldés donc comme il ne voit de date de solde il met
_#erreur_ dans le champs de "temps de réglement", c'est
donc tout à fait normal je voudrais savoir comment peut-on
lui faire une condition pour qu'il ne marque pas cette
erreur...*

*Mon problème numéro 2 qui est le plus important c'est que
lorsque je tombe sur un écart soldé de mon formulaire
Microsoft Visual Basic me fait une erreur en me disant :
ERREUR de compilation :
Projet ou bibliothèque introuvable

En même temps il me surligne _Date_ dans le code suivant :
intAn = Year(Date)

J'aimerai bien que l'on m'aide...*

Merci