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 :
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 y a plusieurs choses que je ne comprend pas dans ce code.
Il calcul déjà les jours fériès, et test si les jours sont des jours de semaines.

Merci d'avance.