Bonjour,

Je cherche à calculer le temps de rétablissement d'un incident sous certaines contraintes, qui me posent quelques problèmes.
On doit prendre en compte 4 arguments :
dateIncident : date à laquelle l'incident a été signalé
dateCloture : Date à laquelle l'incident a été clôturé
hOuverture : heure à partir de laquelle on ne peut intervenir
hFermeture : heure à partir de laquelle on peut de nouveau intervenir

(Pour info, hFermeture-hOuverture = 3h)
La date est au format J/M/A h/m/s

Les contraintes sont : Si l'incident est signalé pendant la plage où il n'est pas possible d'intervenir alors on retranche cette plage ie :
La plage de non-intervention est entre 2h et 5h du matin, si l'incident est signalé à 2h01 et résolu à 5h30, la durée de rétablissement est de 30 minutes.
De même si l'incident est signalé à 1h et résolu à 5h30, la durée de rétablissement est de 1h30

Donc le code ci-dessous est censé faire ça, seulement il ne prend pas en compte le jour. C'est à dire que si l'incident est à 23h et qu'il est résolu à 1h -> ne fonctionne pas.
Aussi, si l'incident est signalé à 23h le 5 du mois et est résolu à 23h30 le 6 du mois, il va donner une durée de rétablissement de 30 minutes (bien sûr si je donne une heure de rétablissement avant 23h il ne fonctionne pas non plus )

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
Public Function dureeIncident(dateIncident, dateCloture, hOuverture, hFermeture)
 
Dim hIncident, hCloture, dureeJour, debugage As Double
 
hIncident = dateIncident - Int(dateIncident)
hCloture = dateCloture - Int(dateCloture)
 
If Day(dateIncident) < Day(dateCloture) Then
dureeIncident = (24 - (hFermeture - hOuverture)) + (hCloture - hIncident)
Else
If hIncident < hOuverture And hCloture > hFermeture Then
dureeIncident = (hCloture - hIncident) - (hFermeture - hOuverture)
 
Else
If hIncident > hOuverture And hIncident < hFermeture And dateCloture > hFermeture Then
dureeIncident = hCloture - hFermeture
 
 
Else: dureeIncident = hCloture - hIncident
End If
End If
End If
End Function
Voilà mon problème, j'aimerai que mon code prenne correctement en compte ces contraintes simples mais je suis un grand débutant en info...
Merci pour votre aide éventuelle.

Bien cordialement.