Bonjour,
Ce post vient recadrer mon tout dernier faute de précisions.
On se place donc dans le contexte suivant:
On considère une villa qui est surveilée par une sentinelle et une vidéo de surveillance. On admet qu'en cas de tentative de vol une alarme est donnée de façon automatique dès que le cambrioleur est dans le champ d'éclairage de la villa.
Le but est de pouvoir calculer la part du temps d'activité de la sentinelle entre le début et la fin d'une alarme sachant qu'elle pend son service du lundi au vendredi entre 8h30 et 19h00 et les samedis entre 8h30 et 17h00 et est hors services les jours fériés et les dimanches.
Désignons par TAS ce temps d'activité de la sentinelle;
t0 :l'instant où l'alarme sonne
tf : l'instant où l'alarme prend fin
Début: heure de début du service de la sentinelle
Fin:heure de fin de service de la sentinelle
il faut donc que
Code : Sélectionner tout - Visualiser dans une fenêtre à part TAS =0 si l'alarme est donnée hors plage de service c-à-d si t0 n'appartient pas ([8h30; 19h00] ou [8h30;17h00]) (pour lundi à vendredi ou le samedi) ou si elle donnée un jour non ouvré (jour férié ou dimanche)
Code : Sélectionner tout - Visualiser dans une fenêtre à part TAS=(tf-t0 )-(Fin-Début) si l'alarme sonne pendant les heures de service de la sentinelle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Si entre t0 et tf on a k jours ouvrés alors TAS=(tf-t0) -(somme sur j allant 1 à k) (Début_j-Fin_j) où Début_j est l'heure de début de service du jième jour ouvré compris entre t0 et tf et Fin_j l'heure de fin de service du jième jour ouvré compris entre t0 et tf
J'ai pu taper le code suivant mais qui malheusement ne marche pas:
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 Function TAS(ByVal t0 As Date, ByVal t1 As Date) As Variant Dim plagej As Variant Dim k As Integer fini = Int(DateDiff("d", t0, t1)) Dim j(1 To 365) As Date Dim DPC(0 To 366) As Variant hs As Date TAS = 0 For k = 1 To fini j(k) = DateAdd("d", k, t0) If ((t0 < j(k) And t1 > j(k)) And (EstFerie(j(k)) = False)) Or ((Time(j(k) > 8) And (Time(j(k) > 19)))) Then plagej = plageservice(j(k)) DPC(k) = (DateDiff("n", t0, j(k)) + DateDiff("n", j(k), t1)) - plagej TAS = TAS + DPC(k) Else TAS = 0 End If Next k End Function
plageservice est un sous programe qui calcule la durée de service sur la journée et EstFerie détermine si le jour est 1 jour férié ou pas.
Merci d'avance pour votre aide.
N'hésiter pas à me demander des précisions s'il en faut .
Cordialement,
Kedmard.
Partager