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.