Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

calcul de delais entre de date suivant des criteres

8 réponses
Avatar
bastientot
BOnjour,


alors je cherche a calculer un ecart entre 2 dates mais avec des
criteres qui sont

pour les journ=E9e :
du 7 jours sur 7 =3D=3D> code 7
du 6 jours sur 7 ( lundi au samedi) =3D=3D> code 6
du 5 jours sur 7 ( lundi au vendredi) =3D=3D> code 5
+
une plage horraire :
24 heures sur 24 =3D=3D>c
07:00 19:30 =3D=3D> a
06:00 22:00 =3D=3D> b

le tout ce decompose en code du style :
5a
5b
5c
6a
6b
6c
7a
7b
7c


je cherche a avoir dans une colonne le temps pass=E9 dans la plage
horraire et dans une autre colonne le temps pass=E9 hors plage horraire:

exemple :

date de debut :07/04/2009 05:07:47
date de fin : 28/04/2009 16:14:16

merci de votre aide car la je galere vraiment.

8 réponses

Avatar
bastientot
Bonjour,

personne ? snifff....

plizzzzzzzz

On 12 mai, 11:36, wrote:
BOnjour,

alors je cherche a calculer un ecart entre 2 dates mais avec des
criteres qui sont

pour les journée :
 du 7 jours sur 7 ==> code 7
du 6 jours sur 7 ( lundi au samedi) ==> code 6
du 5  jours sur 7 ( lundi au vendredi) ==> code 5
+
une plage horraire :
24 heures sur 24 ==>c
07:00 19:30 ==> a
06:00 22:00 ==> b

le tout ce decompose en code du style :
5a
5b
5c
6a
6b
6c
7a
7b
7c

je cherche a avoir dans une colonne le temps passé  dans la plage
horraire et dans une autre colonne le temps passé hors plage horraire:

exemple :

date de debut :07/04/2009  05:07:47
date de fin : 28/04/2009  16:14:16

merci de votre aide car la je galere vraiment.


Avatar
FxM
Bonsoir Bastien,

En A2 -> date et heure de début (format date-heure)
En B2 -> date et heure de fin (format date-heure)
C2 -> code du style (5 6 ou 7 suivi de a, b ou c)

Calcul du temps dans la plage :
D2 -> =temps_plage(A2;B2;C2) (format j hh:mm:ss)

Calcul du temps hors plage :
E2 -> ²-A2-D2 (format j hh:mm:ss)

Calcul du temps total pour vérification :
F2 -> Ò+E2

La fonction temps_plage est la suivante :
* Alt-F11 puis insérer un module
* Y copier ce qui suit : (attention aux coupures de ligne)

'---- copier d'ici ----
Public Function temps_plage(debut, fin, code_temps)
Application.Volatile True

'code_temps
'5=Lu-Ve 6=Lu-Sa 7=TLJ
'a=7h-19h30 b=6h-22h c$h24

Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
Dim tempsmin, tempsmax, result As Double, jour As Long, part As Double
Dim wd As Integer, heuredeb As Double, heurefin As Double

deb2 = debut.Value2
fin2 = fin.Value2
cod1 = CInt(Mid(code_temps.Value2, 1, 1)) '5, 6 ou 7
cod2 = UCase(Mid(code_temps.Value2, 2, 1)) 'A, B ou C

'heures de début / fin
Select Case cod2
Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue("19:30")
Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue("22:00")
Case "C": tempsmin = 0: tempsmax = 1
Case Else: Exit Function
End Select

result = 0 'cumul de temps dans plage

For jour = Int(deb2) To Int(fin2)
part = 0 'calcul pour chacun des jours

wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

If wd = cod1 Then
If jour = Int(deb2) Then 'jour de début
heuredeb = deb2 - Int(deb2)
If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
ElseIf jour = Int(fin2) Then 'jour de fin
heurefin = fin2 - Int(fin2)
If heurefin > tempsmin Then part =
Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
Else 'autre jour
part = tempsmax - tempsmin
End If
heuredeb = 0: heurefin = 0

result = result + part

End If
Next jour

temps_plage = result
End Function
'---- copier jusque là ----

Comme je suis trop bon, un fichier exemple ici :
http://www.cijoint.fr/cjlink.php?file=cj200905/cij4k2qXBl.xls
Testé sous Excel 2002.

@+
FxM qui passe ...



a écrit :
Bonjour,

personne ? snifff....

plizzzzzzzz

On 12 mai, 11:36, wrote:
BOnjour,

alors je cherche a calculer un ecart entre 2 dates mais avec des
criteres qui sont

pour les journée :
du 7 jours sur 7 ==> code 7
du 6 jours sur 7 ( lundi au samedi) ==> code 6
du 5 jours sur 7 ( lundi au vendredi) ==> code 5
+
une plage horraire :
24 heures sur 24 ==>c
07:00 19:30 ==> a
06:00 22:00 ==> b

le tout ce decompose en code du style :
5a
5b
5c
6a
6b
6c
7a
7b
7c

je cherche a avoir dans une colonne le temps passé dans la plage
horraire et dans une autre colonne le temps passé hors plage horraire:

exemple :

date de debut :07/04/2009 05:07:47
date de fin : 28/04/2009 16:14:16

merci de votre aide car la je galere vraiment.





Avatar
bastientot
Bonjour,

grand merci a toi je regarde mais vraiment merci.


On 14 mai, 21:55, FxM wrote:
Bonsoir Bastien,

En A2 -> date et heure de début (format date-heure)
En B2 -> date et heure de fin   (format date-heure)
C2 -> code du style             (5 6 ou 7 suivi de a, b ou c)

Calcul du temps dans la plage :
D2 -> =temps_plage(A2;B2;C2)    (format j hh:mm:ss)

Calcul du temps hors plage :
E2 -> ²-A2-D2                 (format j hh:mm:ss)

Calcul du temps total pour vérification :
F2 -> Ò+E2

La fonction temps_plage est la suivante :
* Alt-F11 puis insérer un module
* Y copier ce qui suit : (attention aux coupures de ligne)

'---- copier d'ici ----
Public Function temps_plage(debut, fin, code_temps)
  Application.Volatile True

  'code_temps
  '5=Lu-Ve       6=Lu-Sa     7=TLJ
  'a=7h-19h30    b=6h-22h    c$h24

  Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
  Dim tempsmin, tempsmax, result As Double, jour As Long, part As Doubl e
  Dim wd As Integer, heuredeb As Double, heurefin As Double

  deb2 = debut.Value2
  fin2 = fin.Value2
  cod1 = CInt(Mid(code_temps.Value2, 1, 1))     '5, 6 ou 7
  cod2 = UCase(Mid(code_temps.Value2, 2, 1))    'A, B ou C

'heures de début / fin
  Select Case cod2
   Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue(" 19:30")
   Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue(" 22:00")
   Case "C": tempsmin = 0: tempsmax = 1
   Case Else: Exit Function
  End Select

  result = 0     'cumul de temps dans plage

  For jour = Int(deb2) To Int(fin2)
   part = 0      'calcul pour chacun des jours

   wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

   If wd = cod1 Then
    If jour = Int(deb2) Then       'jour de début
     heuredeb = deb2 - Int(deb2)
     If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
    ElseIf jour = Int(fin2) Then   'jour de fin
     heurefin = fin2 - Int(fin2)
     If heurefin > tempsmin Then part =
Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
    Else                           'autre j our
     part = tempsmax - tempsmin
    End If
    heuredeb = 0: heurefin = 0

    result = result + part

   End If
  Next jour

  temps_plage = result
End Function
'---- copier jusque là ----

Comme je suis trop bon, un fichier exemple ici :http://www.cijoint.fr/cjl ink.php?file=cj200905/cij4k2qXBl.xls
Testé sous Excel 2002.

@+
FxM qui passe ...

a écrit :



> Bonjour,

> personne ? snifff....

> plizzzzzzzz

> On 12 mai, 11:36, wrote:
>> BOnjour,

>> alors je cherche a calculer un ecart entre 2 dates mais avec des
>> criteres qui sont

>> pour les journée :
>>  du 7 jours sur 7 ==> code 7
>> du 6 jours sur 7 ( lundi au samedi) ==> code 6
>> du 5  jours sur 7 ( lundi au vendredi) ==> code 5
>> +
>> une plage horraire :
>> 24 heures sur 24 ==>c
>> 07:00 19:30 ==> a
>> 06:00 22:00 ==> b

>> le tout ce decompose en code du style :
>> 5a
>> 5b
>> 5c
>> 6a
>> 6b
>> 6c
>> 7a
>> 7b
>> 7c

>> je cherche a avoir dans une colonne le temps passé  dans la plage
>> horraire et dans une autre colonne le temps passé hors plage horrair e:

>> exemple :

>> date de debut :07/04/2009  05:07:47
>> date de fin : 28/04/2009  16:14:16

>> merci de votre aide car la je galere vraiment.- Masquer le texte des m essages précédents -

- Afficher le texte des messages précédents -


Avatar
bastientot
re Bonjour FxM,

j'ai une seconde etape apres ce calcul :

donc dans une autre colonne par exemple a D j'ai un code :
1 ==> 01:00
2 ==> 02:00
4 ==> 04:00
8 ==> 08:00
qui correspond a une durée max qui se decline toujours par rapport a
mon code 5a 5b etc.....
le calcul a faire est, si j'ai 02:00 de durée et que mon heure
d'ouverture commence a 18:00 je prends
18:00 -19:30 = 01:30 - mes 02:00 les 00:30 restante multipliée par 2
( c toujours le meme coeff multiplicateur) = 01:00 ce qui me donne en
duree reelle 02:30.

merci de ton aide.

@bientot.




On 18 mai, 08:57, wrote:
Bonjour,

grand merci a toi je regarde mais vraiment merci.

On 14 mai, 21:55, FxM wrote:



> Bonsoir Bastien,

> En A2 -> date et heure de début (format date-heure)
> En B2 -> date et heure de fin   (format date-heure)
> C2 -> code du style             (5 6 ou 7 suivi de a, b ou c)

> Calcul du temps dans la plage :
> D2 -> =temps_plage(A2;B2;C2)    (format j hh:mm:ss)

> Calcul du temps hors plage :
> E2 -> ²-A2-D2                 (format j hh:mm:ss)

> Calcul du temps total pour vérification :
> F2 -> Ò+E2

> La fonction temps_plage est la suivante :
> * Alt-F11 puis insérer un module
> * Y copier ce qui suit : (attention aux coupures de ligne)

> '---- copier d'ici ----
> Public Function temps_plage(debut, fin, code_temps)
>   Application.Volatile True

>   'code_temps
>   '5=Lu-Ve       6=Lu-Sa     7=TLJ
>   'a=7h-19h30    b=6h-22h    c$h24

>   Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
>   Dim tempsmin, tempsmax, result As Double, jour As Long, part As Dou ble
>   Dim wd As Integer, heuredeb As Double, heurefin As Double

>   deb2 = debut.Value2
>   fin2 = fin.Value2
>   cod1 = CInt(Mid(code_temps.Value2, 1, 1))     '5, 6 ou 7
>   cod2 = UCase(Mid(code_temps.Value2, 2, 1))    'A, B ou C

> 'heures de début / fin
>   Select Case cod2
>    Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue ("19:30")
>    Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue ("22:00")
>    Case "C": tempsmin = 0: tempsmax = 1
>    Case Else: Exit Function
>   End Select

>   result = 0     'cumul de temps dans plage

>   For jour = Int(deb2) To Int(fin2)
>    part = 0      'calcul pour chacun des jours

>    wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

>    If wd = cod1 Then
>     If jour = Int(deb2) Then       'jour de début
>      heuredeb = deb2 - Int(deb2)
>      If heuredeb < tempsmax Then part = tempsmax -
> Application.WorksheetFunction.Max(tempsmin, heuredeb)
>     ElseIf jour = Int(fin2) Then   'jour de fin
>      heurefin = fin2 - Int(fin2)
>      If heurefin > tempsmin Then part =
> Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
>     Else                           'autre jour
>      part = tempsmax - tempsmin
>     End If
>     heuredeb = 0: heurefin = 0

>     result = result + part

>    End If
>   Next jour

>   temps_plage = result
> End Function
> '---- copier jusque là ----

> Comme je suis trop bon, un fichier exemple ici :http://www.cijoint.fr/c jlink.php?file=cj200905/cij4k2qXBl.xls
> Testé sous Excel 2002.

> @+
> FxM qui passe ...

> a écrit :

> > Bonjour,

> > personne ? snifff....

> > plizzzzzzzz

> > On 12 mai, 11:36, wrote:
> >> BOnjour,

> >> alors je cherche a calculer un ecart entre 2 dates mais avec des
> >> criteres qui sont

> >> pour les journée :
> >>  du 7 jours sur 7 ==> code 7
> >> du 6 jours sur 7 ( lundi au samedi) ==> code 6
> >> du 5  jours sur 7 ( lundi au vendredi) ==> code 5
> >> +
> >> une plage horraire :
> >> 24 heures sur 24 ==>c
> >> 07:00 19:30 ==> a
> >> 06:00 22:00 ==> b

> >> le tout ce decompose en code du style :
> >> 5a
> >> 5b
> >> 5c
> >> 6a
> >> 6b
> >> 6c
> >> 7a
> >> 7b
> >> 7c

> >> je cherche a avoir dans une colonne le temps passé  dans la plag e
> >> horraire et dans une autre colonne le temps passé hors plage horra ire:

> >> exemple :

> >> date de debut :07/04/2009  05:07:47
> >> date de fin : 28/04/2009  16:14:16

> >> merci de votre aide car la je galere vraiment.- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
bastientot
re moi,

j'ai un petit souci avec la function,

dans le cas ou la date d'ouverture est par exemple 14/04/2009 11:10 et
la date de fermeture 14/04/2009 15:00 il me calcul une presence dans
la palge de 11:10 jusqu'a 19h30 pour un code 5a par exemple et non par
rapport a la dte de fin ? est possible de modifier la fonction.

en gros il me faut la presence dans la palge et hors plage entre la
date de debut et la date de fin .

merci de ton aide.


On 14 mai, 21:55, FxM wrote:
Bonsoir Bastien,

En A2 -> date et heure de début (format date-heure)
En B2 -> date et heure de fin   (format date-heure)
C2 -> code du style             (5 6 ou 7 suivi de a, b ou c)

Calcul du temps dans la plage :
D2 -> =temps_plage(A2;B2;C2)    (format j hh:mm:ss)

Calcul du temps hors plage :
E2 -> ²-A2-D2                 (format j hh:mm:ss)

Calcul du temps total pour vérification :
F2 -> Ò+E2

La fonction temps_plage est la suivante :
* Alt-F11 puis insérer un module
* Y copier ce qui suit : (attention aux coupures de ligne)

'---- copier d'ici ----
Public Function temps_plage(debut, fin, code_temps)
  Application.Volatile True

  'code_temps
  '5=Lu-Ve       6=Lu-Sa     7=TLJ
  'a=7h-19h30    b=6h-22h    c$h24

  Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
  Dim tempsmin, tempsmax, result As Double, jour As Long, part As Doubl e
  Dim wd As Integer, heuredeb As Double, heurefin As Double

  deb2 = debut.Value2
  fin2 = fin.Value2
  cod1 = CInt(Mid(code_temps.Value2, 1, 1))     '5, 6 ou 7
  cod2 = UCase(Mid(code_temps.Value2, 2, 1))    'A, B ou C

'heures de début / fin
  Select Case cod2
   Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue(" 19:30")
   Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue(" 22:00")
   Case "C": tempsmin = 0: tempsmax = 1
   Case Else: Exit Function
  End Select

  result = 0     'cumul de temps dans plage

  For jour = Int(deb2) To Int(fin2)
   part = 0      'calcul pour chacun des jours

   wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

   If wd = cod1 Then
    If jour = Int(deb2) Then       'jour de début
     heuredeb = deb2 - Int(deb2)
     If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
    ElseIf jour = Int(fin2) Then   'jour de fin
     heurefin = fin2 - Int(fin2)
     If heurefin > tempsmin Then part =
Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
    Else                           'autre j our
     part = tempsmax - tempsmin
    End If
    heuredeb = 0: heurefin = 0

    result = result + part

   End If
  Next jour

  temps_plage = result
End Function
'---- copier jusque là ----

Comme je suis trop bon, un fichier exemple ici :http://www.cijoint.fr/cjl ink.php?file=cj200905/cij4k2qXBl.xls
Testé sous Excel 2002.

@+
FxM qui passe ...

a écrit :



> Bonjour,

> personne ? snifff....

> plizzzzzzzz

> On 12 mai, 11:36, wrote:
>> BOnjour,

>> alors je cherche a calculer un ecart entre 2 dates mais avec des
>> criteres qui sont

>> pour les journée :
>>  du 7 jours sur 7 ==> code 7
>> du 6 jours sur 7 ( lundi au samedi) ==> code 6
>> du 5  jours sur 7 ( lundi au vendredi) ==> code 5
>> +
>> une plage horraire :
>> 24 heures sur 24 ==>c
>> 07:00 19:30 ==> a
>> 06:00 22:00 ==> b

>> le tout ce decompose en code du style :
>> 5a
>> 5b
>> 5c
>> 6a
>> 6b
>> 6c
>> 7a
>> 7b
>> 7c

>> je cherche a avoir dans une colonne le temps passé  dans la plage
>> horraire et dans une autre colonne le temps passé hors plage horrair e:

>> exemple :

>> date de debut :07/04/2009  05:07:47
>> date de fin : 28/04/2009  16:14:16

>> merci de votre aide car la je galere vraiment.- Masquer le texte des m essages précédents -

- Afficher le texte des messages précédents -


Avatar
FxM
Hello Bastien,

Pour la correction du calcul si les deux dates concernent le même jour,
la fonction corrigée est ci-dessous.
Attention aux coupures de lignes !
NB : il n'y a pas de vérification si les dates sont inversées.
Lien : http://www.cijoint.fr/cjlink.php?file=cj200905/cij8NmERaN.xls

Pour ce qui est de la seconde étape, un classeur exemple serait bienvenu
car je n'ai pas tout compris dans ton exemple.
Installe dans ce classeur tous les cas possibles de ce que tu peux
rencontrer, les résultats attendus ainsi que le mode de calcul.
Si tu as d'autres calculs à effectuer, profites-en pour les inscrire
afin d'avoir une vue globale de ce qui est à réaliser.

@+
FxM qui repasse ...


Public Function temps_plage(debut, fin, code_temps)
Application.Volatile True
'20090518 = v2 - correction calcul si même jour
'ne vérifie pas si temps inversés

'code_temps
'5=Lu-Ve 6=Lu-Sa 7=TLJ
'a=7h-19h30 b=6h-22h c$h24

Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
Dim tempsmin, tempsmax, result As Double, jour As Long, part As Double
Dim wd As Integer, heuredeb As Double, heurefin As Double
Dim tempsdeb As Double, tempsfin As Double ''ajout ici

deb2 = debut.Value2
fin2 = fin.Value2
cod1 = CInt(Mid(code_temps.Value2, 1, 1))
cod2 = UCase(Mid(code_temps.Value2, 2, 1))

Select Case cod2
Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue("19:30")
Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue("22:00")
Case "C": tempsmin = 0: tempsmax = 1
Case Else: Exit Function
End Select

'ajout d'ici
If Int(deb2) = Int(fin2) Then
tempsdeb = deb2 - Int(deb2)
tempsfin = fin2 - Int(fin2)
If (tempsdeb <= tempsmin) And (tempsfin <= tempsmin) Or (tempsdeb >=
tempsmax) And (tempsfin >= tempsmax) Then
temps_plage = 0
Else
temps_plage = Application.WorksheetFunction.Min(tempsfin, tempsmax)
- Application.WorksheetFunction.Max(tempsdeb, tempsmin)
End If
Exit Function
End If
'jusque là

result = 0

For jour = Int(deb2) To Int(fin2)
part = 0

wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

If wd = cod1 Then
If jour = Int(deb2) Then
heuredeb = deb2 - Int(deb2)
If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
ElseIf jour = Int(fin2) Then
heurefin = fin2 - Int(fin2)
If heurefin > tempsmin Then part =
Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
Else
part = tempsmax - tempsmin
End If
heuredeb = 0: heurefin = 0

result = result + part

End If
Next jour

temps_plage = result
End Function




a écrit :
re moi,

j'ai un petit souci avec la function,

dans le cas ou la date d'ouverture est par exemple 14/04/2009 11:10 et
la date de fermeture 14/04/2009 15:00 il me calcul une presence dans
la palge de 11:10 jusqu'a 19h30 pour un code 5a par exemple et non par
rapport a la dte de fin ? est possible de modifier la fonction.

en gros il me faut la presence dans la palge et hors plage entre la
date de debut et la date de fin .

merci de ton aide.


On 14 mai, 21:55, FxM wrote:
Bonsoir Bastien,

En A2 -> date et heure de début (format date-heure)
En B2 -> date et heure de fin (format date-heure)
C2 -> code du style (5 6 ou 7 suivi de a, b ou c)

Calcul du temps dans la plage :
D2 -> =temps_plage(A2;B2;C2) (format j hh:mm:ss)

Calcul du temps hors plage :
E2 -> ²-A2-D2 (format j hh:mm:ss)

Calcul du temps total pour vérification :
F2 -> Ò+E2

La fonction temps_plage est la suivante :
* Alt-F11 puis insérer un module
* Y copier ce qui suit : (attention aux coupures de ligne)

'---- copier d'ici ----
Public Function temps_plage(debut, fin, code_temps)
Application.Volatile True

'code_temps
'5=Lu-Ve 6=Lu-Sa 7=TLJ
'a=7h-19h30 b=6h-22h c$h24

Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
Dim tempsmin, tempsmax, result As Double, jour As Long, part As Double
Dim wd As Integer, heuredeb As Double, heurefin As Double

deb2 = debut.Value2
fin2 = fin.Value2
cod1 = CInt(Mid(code_temps.Value2, 1, 1)) '5, 6 ou 7
cod2 = UCase(Mid(code_temps.Value2, 2, 1)) 'A, B ou C

'heures de début / fin
Select Case cod2
Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue("19:30")
Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue("22:00")
Case "C": tempsmin = 0: tempsmax = 1
Case Else: Exit Function
End Select

result = 0 'cumul de temps dans plage

For jour = Int(deb2) To Int(fin2)
part = 0 'calcul pour chacun des jours

wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

If wd = cod1 Then
If jour = Int(deb2) Then 'jour de début
heuredeb = deb2 - Int(deb2)
If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
ElseIf jour = Int(fin2) Then 'jour de fin
heurefin = fin2 - Int(fin2)
If heurefin > tempsmin Then part >> Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
Else 'autre jour
part = tempsmax - tempsmin
End If
heuredeb = 0: heurefin = 0

result = result + part

End If
Next jour

temps_plage = result
End Function
'---- copier jusque là ----

Comme je suis trop bon, un fichier exemple ici :http://www.cijoint.fr/cjlink.php?file=cj200905/cij4k2qXBl.xls
Testé sous Excel 2002.

@+
FxM qui passe ...

a écrit :



Bonjour,
personne ? snifff....
plizzzzzzzz
On 12 mai, 11:36, wrote:
BOnjour,
alors je cherche a calculer un ecart entre 2 dates mais avec des
criteres qui sont
pour les journée :
du 7 jours sur 7 ==> code 7
du 6 jours sur 7 ( lundi au samedi) ==> code 6
du 5 jours sur 7 ( lundi au vendredi) ==> code 5
+
une plage horraire :
24 heures sur 24 ==>c
07:00 19:30 ==> a
06:00 22:00 ==> b
le tout ce decompose en code du style :
5a
5b
5c
6a
6b
6c
7a
7b
7c
je cherche a avoir dans une colonne le temps passé dans la plage
horraire et dans une autre colonne le temps passé hors plage horraire:
exemple :
date de debut :07/04/2009 05:07:47
date de fin : 28/04/2009 16:14:16
merci de votre aide car la je galere vraiment.- Masquer le texte des messages précédents -




- Afficher le texte des messages précédents -





Avatar
bastientot
Bonjour,

grand merci je regarde le resultat et te prepare le fichier mais pas
avant demain je pense.

merci encore


On 18 mai, 21:37, FxM wrote:
Hello Bastien,

Pour la correction du calcul si les deux dates concernent le même jour,
la fonction corrigée est ci-dessous.
Attention aux coupures de lignes !
NB : il n'y a pas de vérification si les dates sont inversées.
Lien :http://www.cijoint.fr/cjlink.php?file=cj200905/cij8NmERaN.xls

Pour ce qui est de la seconde étape, un classeur exemple serait bienven u
car je n'ai pas tout compris dans ton exemple.
Installe dans ce classeur tous les cas possibles de ce que tu peux
rencontrer, les résultats attendus ainsi que le mode de calcul.
Si tu as d'autres calculs à effectuer, profites-en pour les inscrire
afin d'avoir une vue globale de ce qui est à réaliser.

@+
FxM qui repasse ...

Public Function temps_plage(debut, fin, code_temps)
  Application.Volatile True
  '20090518 = v2 - correction calcul si même jour
  'ne vérifie pas si temps inversés

  'code_temps
  '5=Lu-Ve       6=Lu-Sa     7=TLJ
  'a=7h-19h30    b=6h-22h    c$h24

  Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
  Dim tempsmin, tempsmax, result As Double, jour As Long, part As Doubl e
  Dim wd As Integer, heuredeb As Double, heurefin As Double
  Dim tempsdeb As Double, tempsfin As Double         ''ajout ic i

  deb2 = debut.Value2
  fin2 = fin.Value2
  cod1 = CInt(Mid(code_temps.Value2, 1, 1))
  cod2 = UCase(Mid(code_temps.Value2, 2, 1))

  Select Case cod2
   Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue(" 19:30")
   Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue(" 22:00")
   Case "C": tempsmin = 0: tempsmax = 1
   Case Else: Exit Function
  End Select

'ajout d'ici
  If Int(deb2) = Int(fin2) Then
   tempsdeb = deb2 - Int(deb2)
   tempsfin = fin2 - Int(fin2)
   If (tempsdeb <= tempsmin) And (tempsfin <= tempsmin) Or (temps deb >=
tempsmax) And (tempsfin >= tempsmax) Then
    temps_plage = 0
   Else
    temps_plage = Application.WorksheetFunction.Min(tempsfin, temps max)
- Application.WorksheetFunction.Max(tempsdeb, tempsmin)
   End If
   Exit Function
  End If
'jusque là

  result = 0

  For jour = Int(deb2) To Int(fin2)
   part = 0

   wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

   If wd = cod1 Then
    If jour = Int(deb2) Then
     heuredeb = deb2 - Int(deb2)
     If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
    ElseIf jour = Int(fin2) Then
     heurefin = fin2 - Int(fin2)
     If heurefin > tempsmin Then part =
Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
    Else
     part = tempsmax - tempsmin
    End If
    heuredeb = 0: heurefin = 0

    result = result + part

   End If
  Next jour

  temps_plage = result
End Function

a écrit :



> re moi,

> j'ai un petit souci avec la function,

> dans le cas ou la date d'ouverture est par exemple 14/04/2009 11:10 et
> la date de fermeture 14/04/2009 15:00 il me calcul une presence dans
> la palge de 11:10 jusqu'a 19h30 pour un code 5a par exemple et non par
> rapport a la dte de fin ? est possible de modifier la fonction.

> en gros il me faut la presence dans la palge et hors plage entre la
> date de debut et la date de fin .

> merci de ton aide.

> On 14 mai, 21:55, FxM wrote:
>> Bonsoir Bastien,

>> En A2 -> date et heure de début (format date-heure)
>> En B2 -> date et heure de fin   (format date-heure)
>> C2 -> code du style             (5 6 ou 7 suivi de a, b ou c)

>> Calcul du temps dans la plage :
>> D2 -> =temps_plage(A2;B2;C2)    (format j hh:mm:ss)

>> Calcul du temps hors plage :
>> E2 -> ²-A2-D2                 (format j hh:mm:ss)

>> Calcul du temps total pour vérification :
>> F2 -> Ò+E2

>> La fonction temps_plage est la suivante :
>> * Alt-F11 puis insérer un module
>> * Y copier ce qui suit : (attention aux coupures de ligne)

>> '---- copier d'ici ----
>> Public Function temps_plage(debut, fin, code_temps)
>>   Application.Volatile True

>>   'code_temps
>>   '5=Lu-Ve       6=Lu-Sa     7=TLJ
>>   'a=7h-19h30    b=6h-22h    c$h24

>>   Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As Strin g
>>   Dim tempsmin, tempsmax, result As Double, jour As Long, part As Do uble
>>   Dim wd As Integer, heuredeb As Double, heurefin As Double

>>   deb2 = debut.Value2
>>   fin2 = fin.Value2
>>   cod1 = CInt(Mid(code_temps.Value2, 1, 1))     '5, 6 ou 7
>>   cod2 = UCase(Mid(code_temps.Value2, 2, 1))    'A, B ou C

>> 'heures de début / fin
>>   Select Case cod2
>>    Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValu e("19:30")
>>    Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValu e("22:00")
>>    Case "C": tempsmin = 0: tempsmax = 1
>>    Case Else: Exit Function
>>   End Select

>>   result = 0     'cumul de temps dans plage

>>   For jour = Int(deb2) To Int(fin2)
>>    part = 0      'calcul pour chacun des jours

>>    wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

>>    If wd = cod1 Then
>>     If jour = Int(deb2) Then       'jour de début
>>      heuredeb = deb2 - Int(deb2)
>>      If heuredeb < tempsmax Then part = tempsmax -
>> Application.WorksheetFunction.Max(tempsmin, heuredeb)
>>     ElseIf jour = Int(fin2) Then   'jour de fin
>>      heurefin = fin2 - Int(fin2)
>>      If heurefin > tempsmin Then part =
>> Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
>>     Else                           'autr e jour
>>      part = tempsmax - tempsmin
>>     End If
>>     heuredeb = 0: heurefin = 0

>>     result = result + part

>>    End If
>>   Next jour

>>   temps_plage = result
>> End Function
>> '---- copier jusque là ----

>> Comme je suis trop bon, un fichier exemple ici :http://www.cijoint.fr/ cjlink.php?file=cj200905/cij4k2qXBl.xls
>> Testé sous Excel 2002.

>> @+
>> FxM qui passe ...

>> a écrit :

>>> Bonjour,
>>> personne ? snifff....
>>> plizzzzzzzz
>>> On 12 mai, 11:36, wrote:
>>>> BOnjour,
>>>> alors je cherche a calculer un ecart entre 2 dates mais avec des
>>>> criteres qui sont
>>>> pour les journée :
>>>>  du 7 jours sur 7 ==> code 7
>>>> du 6 jours sur 7 ( lundi au samedi) ==> code 6
>>>> du 5  jours sur 7 ( lundi au vendredi) ==> code 5
>>>> +
>>>> une plage horraire :
>>>> 24 heures sur 24 ==>c
>>>> 07:00 19:30 ==> a
>>>> 06:00 22:00 ==> b
>>>> le tout ce decompose en code du style :
>>>> 5a
>>>> 5b
>>>> 5c
>>>> 6a
>>>> 6b
>>>> 6c
>>>> 7a
>>>> 7b
>>>> 7c
>>>> je cherche a avoir dans une colonne le temps passé  dans la plag e
>>>> horraire et dans une autre colonne le temps passé hors plage horra ire:
>>>> exemple :
>>>> date de debut :07/04/2009  05:07:47
>>>> date de fin : 28/04/2009  16:14:16
>>>> merci de votre aide car la je galere vraiment.- Masquer le texte des messages précédents -
>> - Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -

- Afficher le texte des messages précédents -


Avatar
bastientot
Bonjour,

bon pour l'exemple je pense pouvoir te le fournir lundi matin désolé.




On 18 mai, 21:37, FxM wrote:
Hello Bastien,

Pour la correction du calcul si les deux dates concernent le même jour,
la fonction corrigée est ci-dessous.
Attention aux coupures de lignes !
NB : il n'y a pas de vérification si les dates sont inversées.
Lien :http://www.cijoint.fr/cjlink.php?file=cj200905/cij8NmERaN.xls

Pour ce qui est de la seconde étape, un classeur exemple serait bienven u
car je n'ai pas tout compris dans ton exemple.
Installe dans ce classeur tous les cas possibles de ce que tu peux
rencontrer, les résultats attendus ainsi que le mode de calcul.
Si tu as d'autres calculs à effectuer, profites-en pour les inscrire
afin d'avoir une vue globale de ce qui est à réaliser.

@+
FxM qui repasse ...

Public Function temps_plage(debut, fin, code_temps)
  Application.Volatile True
  '20090518 = v2 - correction calcul si même jour
  'ne vérifie pas si temps inversés

  'code_temps
  '5=Lu-Ve       6=Lu-Sa     7=TLJ
  'a=7h-19h30    b=6h-22h    c$h24

  Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As String
  Dim tempsmin, tempsmax, result As Double, jour As Long, part As Doubl e
  Dim wd As Integer, heuredeb As Double, heurefin As Double
  Dim tempsdeb As Double, tempsfin As Double         ''ajout ic i

  deb2 = debut.Value2
  fin2 = fin.Value2
  cod1 = CInt(Mid(code_temps.Value2, 1, 1))
  cod2 = UCase(Mid(code_temps.Value2, 2, 1))

  Select Case cod2
   Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValue(" 19:30")
   Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValue(" 22:00")
   Case "C": tempsmin = 0: tempsmax = 1
   Case Else: Exit Function
  End Select

'ajout d'ici
  If Int(deb2) = Int(fin2) Then
   tempsdeb = deb2 - Int(deb2)
   tempsfin = fin2 - Int(fin2)
   If (tempsdeb <= tempsmin) And (tempsfin <= tempsmin) Or (temps deb >=
tempsmax) And (tempsfin >= tempsmax) Then
    temps_plage = 0
   Else
    temps_plage = Application.WorksheetFunction.Min(tempsfin, temps max)
- Application.WorksheetFunction.Max(tempsdeb, tempsmin)
   End If
   Exit Function
  End If
'jusque là

  result = 0

  For jour = Int(deb2) To Int(fin2)
   part = 0

   wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

   If wd = cod1 Then
    If jour = Int(deb2) Then
     heuredeb = deb2 - Int(deb2)
     If heuredeb < tempsmax Then part = tempsmax -
Application.WorksheetFunction.Max(tempsmin, heuredeb)
    ElseIf jour = Int(fin2) Then
     heurefin = fin2 - Int(fin2)
     If heurefin > tempsmin Then part =
Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
    Else
     part = tempsmax - tempsmin
    End If
    heuredeb = 0: heurefin = 0

    result = result + part

   End If
  Next jour

  temps_plage = result
End Function

a écrit :



> re moi,

> j'ai un petit souci avec la function,

> dans le cas ou la date d'ouverture est par exemple 14/04/2009 11:10 et
> la date de fermeture 14/04/2009 15:00 il me calcul une presence dans
> la palge de 11:10 jusqu'a 19h30 pour un code 5a par exemple et non par
> rapport a la dte de fin ? est possible de modifier la fonction.

> en gros il me faut la presence dans la palge et hors plage entre la
> date de debut et la date de fin .

> merci de ton aide.

> On 14 mai, 21:55, FxM wrote:
>> Bonsoir Bastien,

>> En A2 -> date et heure de début (format date-heure)
>> En B2 -> date et heure de fin   (format date-heure)
>> C2 -> code du style             (5 6 ou 7 suivi de a, b ou c)

>> Calcul du temps dans la plage :
>> D2 -> =temps_plage(A2;B2;C2)    (format j hh:mm:ss)

>> Calcul du temps hors plage :
>> E2 -> ²-A2-D2                 (format j hh:mm:ss)

>> Calcul du temps total pour vérification :
>> F2 -> Ò+E2

>> La fonction temps_plage est la suivante :
>> * Alt-F11 puis insérer un module
>> * Y copier ce qui suit : (attention aux coupures de ligne)

>> '---- copier d'ici ----
>> Public Function temps_plage(debut, fin, code_temps)
>>   Application.Volatile True

>>   'code_temps
>>   '5=Lu-Ve       6=Lu-Sa     7=TLJ
>>   'a=7h-19h30    b=6h-22h    c$h24

>>   Dim deb2 As Double, fin2 As Double, cod1 As Integer, cod2 As Strin g
>>   Dim tempsmin, tempsmax, result As Double, jour As Long, part As Do uble
>>   Dim wd As Integer, heuredeb As Double, heurefin As Double

>>   deb2 = debut.Value2
>>   fin2 = fin.Value2
>>   cod1 = CInt(Mid(code_temps.Value2, 1, 1))     '5, 6 ou 7
>>   cod2 = UCase(Mid(code_temps.Value2, 2, 1))    'A, B ou C

>> 'heures de début / fin
>>   Select Case cod2
>>    Case "A": tempsmin = TimeValue("7:00"): tempsmax = TimeValu e("19:30")
>>    Case "B": tempsmin = TimeValue("6:00"): tempsmax = TimeValu e("22:00")
>>    Case "C": tempsmin = 0: tempsmax = 1
>>    Case Else: Exit Function
>>   End Select

>>   result = 0     'cumul de temps dans plage

>>   For jour = Int(deb2) To Int(fin2)
>>    part = 0      'calcul pour chacun des jours

>>    wd = Weekday(jour, vbMonday): If wd < 5 Then wd = 5

>>    If wd = cod1 Then
>>     If jour = Int(deb2) Then       'jour de début
>>      heuredeb = deb2 - Int(deb2)
>>      If heuredeb < tempsmax Then part = tempsmax -
>> Application.WorksheetFunction.Max(tempsmin, heuredeb)
>>     ElseIf jour = Int(fin2) Then   'jour de fin
>>      heurefin = fin2 - Int(fin2)
>>      If heurefin > tempsmin Then part =
>> Application.WorksheetFunction.Min(tempsmax, heurefin) - tempsmin
>>     Else                           'autr e jour
>>      part = tempsmax - tempsmin
>>     End If
>>     heuredeb = 0: heurefin = 0

>>     result = result + part

>>    End If
>>   Next jour

>>   temps_plage = result
>> End Function
>> '---- copier jusque là ----

>> Comme je suis trop bon, un fichier exemple ici :http://www.cijoint.fr/ cjlink.php?file=cj200905/cij4k2qXBl.xls
>> Testé sous Excel 2002.

>> @+
>> FxM qui passe ...

>> a écrit :

>>> Bonjour,
>>> personne ? snifff....
>>> plizzzzzzzz
>>> On 12 mai, 11:36, wrote:
>>>> BOnjour,
>>>> alors je cherche a calculer un ecart entre 2 dates mais avec des
>>>> criteres qui sont
>>>> pour les journée :
>>>>  du 7 jours sur 7 ==> code 7
>>>> du 6 jours sur 7 ( lundi au samedi) ==> code 6
>>>> du 5  jours sur 7 ( lundi au vendredi) ==> code 5
>>>> +
>>>> une plage horraire :
>>>> 24 heures sur 24 ==>c
>>>> 07:00 19:30 ==> a
>>>> 06:00 22:00 ==> b
>>>> le tout ce decompose en code du style :
>>>> 5a
>>>> 5b
>>>> 5c
>>>> 6a
>>>> 6b
>>>> 6c
>>>> 7a
>>>> 7b
>>>> 7c
>>>> je cherche a avoir dans une colonne le temps passé  dans la plag e
>>>> horraire et dans une autre colonne le temps passé hors plage horra ire:
>>>> exemple :
>>>> date de debut :07/04/2009  05:07:47
>>>> date de fin : 28/04/2009  16:14:16
>>>> merci de votre aide car la je galere vraiment.- Masquer le texte des messages précédents -
>> - Afficher le texte des messages précédents -- Masquer le texte de s messages précédents -

- Afficher le texte des messages précédents -