Comprendre une fonction VBA
J'ai une fonction en VBA que j'utilise pour calculer le nombre de jours ouvrés entre deux dates et j'aurais aimé comprendre l'algorithme. Pourriez-vous me l'expliquer svp ?
Function Minutes(Début, Fin, PlageFériés)
If Fin = "" Then Fin = Now
For i = Début * 1 To Fin * 1 Step TimeValue("0:10")
If Hour(i) >= 8 And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:10")) _
And Application.CountIf([PlageFériés], CDate(Int(i)) * 1) = 0 _
And Weekday(CDate(Int(i)) * 1, 2) < 6 Then x = x + 10
Next
HeureOuvrées = x / 1440
Minutes = HeureOuvrées * 60
End FunctionNormalement, cette fonction doit calculer les jours ouvrés donc hors weekend et hors jours fériés, dans les plages d'heures ouvrées entre 7h et 12h. Le retour doit être en minutes.
A ce que je comprends :
- Weekday prend une date et renvoi le numéro du jour de la semaine
- CDate converti une date en date ?
- TimeValue, je n'ai pas compris...
- Pourquoi diviser par 60*24=1440 à la fin svp ?
Merci de votre aide :)
Bonjour
Function Minutes(Début, Fin, PlageFériés)If Fin = "" Then Fin = Now For i = Début * 1 To Fin * 1 Step TimeValue("0:10") If Hour(i) >= 8 And Hour(i) < 18 And Day(i) = Day(i + TimeValue("0:10")) _ And Application.CountIf([PlageFériés], CDate(Int(i)) * 1) = 0 _ And Weekday(CDate(Int(i)) * 1, 2) < 6 Then x = x + 10 Next HeureOuvrées = x / 1440 Minutes = HeureOuvrées * 60 End FunctionNormalement, cette fonction doit calculer les jours ouvrés donc hors weekend et hors jours fériés, dans les plages d'heures ouvrées entre 7h et 12h. Le retour doit être en minutes.
A ce que je comprends :
- Weekday prend une date et renvoi le numéro du jour de la semaine
- CDate converti une date en date ?
- TimeValue, je n'ai pas compris...
- Pourquoi diviser par 60*24=1440 à la fin svp ?
Merci de votre aide :)
A priori
- ta date est en date/heure ce pourquoi il faut convertir pour ne traiter que la partie date
- il semble y avoir un calcul par 10 minutes d'où TimeValue de "0:10" sous format texte
- pour Excel 1 jour vaut 1, une heure 1/24ème, 1 minute 1/24/60 soit 1/1440
Merci beaucoup de ton aide Chris