Datediff
coin
Messages postés
50
Statut
Membre
-
teebo Messages postés 33570 Date d'inscription Statut Modérateur Dernière intervention -
teebo Messages postés 33570 Date d'inscription Statut Modérateur Dernière intervention -
bonjour, voila ma question:
ss VB, j'utilise la fonction datediff pour faire une différence entre 2 dates: ok. Ce que je voudrais faire c'est une différence entre 2 dates sans tenir compte des week end, c'est a dire qu'il me donne le nb de jours de travail effectif.
y'aurait moyen?
ss VB, j'utilise la fonction datediff pour faire une différence entre 2 dates: ok. Ce que je voudrais faire c'est une différence entre 2 dates sans tenir compte des week end, c'est a dire qu'il me donne le nb de jours de travail effectif.
y'aurait moyen?
3 réponses
Salut, jer crois pas qu'il y ait de fonction toute faite. Mais tu peux la créer très facilement.
J'ai ecris cela, c'est un peu grossier, mais ca marche, y'a surement mieux...
NombJourOuvert c'est la fonction qui te calcule comme son nom l'indique, le nombre de jours ouvers. Donc à la place de Datediff, tu ecris NombJourOuvert
La 2eme fonction calcule le nombre de jour identique entre 2 dates (le nombre de dimanche, le nombre de lundi...)
Pour info, le dimanche a la valeur 1, le samedi a la valeur 7, c'est comme cela dans access.
Public Function NombJourOuvert(MaVieilleDate As Date, MaDateRecente As Date) As Integer
NombJourOuvert = DateDiff("d", MaVieilleDate, MaDateRecente) - NombDuJourEntreDeuxDates(MaVieilleDate, MaDateRecente, 1) - NombDuJourEntreDeuxDates(MaVieilleDate, MaDateRecente, 7)
End Function
Public Function NombDuJourEntreDeuxDates(MaVieilleDate As Date, MaDateRecente As Date, LeJour As Integer) As Integer
Dim NombreJour As Integer, i As Integer, DateCourante As Date
NombDuJourEntreDeuxDates= 0
NombreJour = DateDiff("d", MaVieilleDate, MaDateRecente)
DateCourante = MaDateRecente
For i = 0 To NombreJour
ValeurJour = Weekday(DateCourante)
If ValeurJour = LeJour Then
NombDuJourEntreDeuxDates= NombDuJourEntreDeuxDates + 1
End If
DateCourante = DateAdd("d", 1, DateCourante)
Next i
J'ai ecris cela, c'est un peu grossier, mais ca marche, y'a surement mieux...
NombJourOuvert c'est la fonction qui te calcule comme son nom l'indique, le nombre de jours ouvers. Donc à la place de Datediff, tu ecris NombJourOuvert
La 2eme fonction calcule le nombre de jour identique entre 2 dates (le nombre de dimanche, le nombre de lundi...)
Pour info, le dimanche a la valeur 1, le samedi a la valeur 7, c'est comme cela dans access.
Public Function NombJourOuvert(MaVieilleDate As Date, MaDateRecente As Date) As Integer
NombJourOuvert = DateDiff("d", MaVieilleDate, MaDateRecente) - NombDuJourEntreDeuxDates(MaVieilleDate, MaDateRecente, 1) - NombDuJourEntreDeuxDates(MaVieilleDate, MaDateRecente, 7)
End Function
Public Function NombDuJourEntreDeuxDates(MaVieilleDate As Date, MaDateRecente As Date, LeJour As Integer) As Integer
Dim NombreJour As Integer, i As Integer, DateCourante As Date
NombDuJourEntreDeuxDates= 0
NombreJour = DateDiff("d", MaVieilleDate, MaDateRecente)
DateCourante = MaDateRecente
For i = 0 To NombreJour
ValeurJour = Weekday(DateCourante)
If ValeurJour = LeJour Then
NombDuJourEntreDeuxDates= NombDuJourEntreDeuxDates + 1
End If
DateCourante = DateAdd("d", 1, DateCourante)
Next i
Par contre, gaffe au jours feries...
ö,ö
\_/
ö,ö
\_/
oui, on est dans la même boite à croissy sur seine. 2 pinces en VB .
Bon, sinon le code ne plante pas .Par contre ca donne des résultats bizarres: comme s'il n'y avait qu'un seul we dans le mois. C'est le patron qui va etre content!
Allez, je replonge en sous marin dans l'enfer de la correction des erreurs de frappe que j'ai du faire :-(
Bon, sinon le code ne plante pas .Par contre ca donne des résultats bizarres: comme s'il n'y avait qu'un seul we dans le mois. C'est le patron qui va etre content!
Allez, je replonge en sous marin dans l'enfer de la correction des erreurs de frappe que j'ai du faire :-(
En tous cas merci pour ton coup de main
La fonction te renvoie un entier, donc tu peux en faire ce que tu veux, Label, MsgBox, memoire etc...
ö,ö
\_/