Bonjour,
Voici mon problème :
Je dois calculer un délai entre 2 dates en heures et jours ouvrés, entre 09h00 et 18h00 en otant les weekend et jours fériés.
Par exemple entre le 04/04/2008 13:45 et le 07/04/2008 17h45, il faut que je ressorte 13h (04h15 le 04, 5et6 weekend et 8h45 le 07).
J'ai trouvé ducode sur le forum mais je n'arrive pas à l' adapter.
Voici mon code qui donne un résultat aléatoir :
Il y a plusieurs choses que je ne comprend pas dans ce code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 'Parcour mon tab Excel For p = 2 To Cells(65535, 1).End(xlUp).Row 'Stock des dates et heures dans variables Dt_Clos = Format(Range("D" & p).Value, "dd/mm/yy") Dt_Ouvert = Format(Range("C" & p).Value, "dd/mm/yy") H_Clos = Format(Range("D" & p).Value, "hh:mm") H_Ouvert = Format(Range("C" & p).Value, "hh:mm") Heures = 1 / 24 '0.041666666667 (N° de série) DateDemande = Dt_Ouvert DateTraitement = Dt_Clos HeureDemande = H_Clos HeureTraitement = H_Ouvert 'Calcul horaire entre heure de la demande et heure du traitement 'Ici je ne comprend pas bien le calcul :-)) If TimeValue(HeureTraitement) > TimeValue(HeureDemande) Then TpsHeureTraitement = TimeValue(HeureTraitement) - TimeValue(HeureDemande) Else TpsHeureTraitement = (9 * Heures) - (TimeValue(HeureDemande) - TimeValue(HeureTraitement)) End If JourFérié = Array("01/01/2008") ' etc n = 0 For i = DateValue(DateDemande) + 1 To DateValue(DateTraitement) If CStr(Application.WorksheetFunction.Weekday(i)) Like ("[2-6]") Then For n = 0 To UBound(JourFérié) Férié = i = DateValue(JourFérié(n)) ''si vrai, Férié = -1 If Férié Then Exit For Next 'si on a un jour férié, on le retranche NbJoursOuvrés = NbJoursOuvrés + 1 + Férié 'Si férié = true, férié = -1 End If Next If TimeValue(HeureTraitement) < TimeValue(HeureDemande) Then NbJoursOuvrés = NbJoursOuvrés - 1 If TpsHeureTraitement >= (9 * Heures) Then NbreJrs = Int((TpsHeureTraitement / (9 * Heures)) + 0.0000001) 'ROUNDUP/ARRONDI.SUP NbJoursOuvrés = NbJoursOuvrés + NbreJrs TpsHeureTraitement = TpsHeureTraitement - (9 * Heures * NbreJrs) End If délaiH = Format(TpsHeureTraitement, "hh:nn") 'MsgBox "Délai d'intervention" & vbCr & "Nbre de jours ouvrés " & NbJoursOuvrés & vbCr & "Nombre d'heures " & délaiH Cellule_Result = NbJoursOuvrés & "jours" & " " & délaiH Range("E" & p) = Cellule_Result NbJoursOuvrés = 1 délaiH = 0 Next End Sub
Il calcul déjà les jours fériès, et test si les jours sont des jours de semaines.
Merci d'avance.
Partager