OVH Cloud OVH Cloud

calcul entre 2dates&heures

10 réponses
Avatar
Aline
non ca ne marche pas voici l'exemple :

A1= 18/12/2003 14:00
B1=19/12/03 16:56
C1=(B1-A1)*24
résultat C1=26,93 alors que je l'aurais voulu en hh:mm
si j'utilise le format que vous m'avez indiqué j'ai un résultat bizare de
646:24
*************************************************************
2ieme probleme entre le 18/12/2003 14h et 19/12/2003 16:56 je ne voudrais
compter que les horaires de bureau à savoir 8h_12h et 14h-18h.
ce qui devrait me donner comme résultat C1=10h56mn
Merci
----- Original Message -----
From: "Daniel.M" <prenom.maher@bigfoot.inutil.com>
Newsgroups: microsoft.public.fr.excel
Sent: Friday, December 26, 2003 2:08 PM
Subject: Re: calculer la durée entre 2dates&heures


> Bonjour Aline,
>
> > 1- quand je calcule la difference entre deux dates&heures j'ai un
résultat
> > en heures alors que je le voudrais en heures et minutes.
>
> Une question de format, il me semble:
> [h]:mm
> devrait convenir.
>
>
> > 2- en calculant je voudrais pouvoir prendre en considération des heures
> > ouvrables
>
> Donne une couple d'exemple (avec les heures ouvrable début et fin) et les
> résultats attendus.
>
> Salutations,
>
> Daniel M.
>
>

10 réponses

Avatar
Philippe.R
Bonjour Aline,
pour la question 1 :
Utilises simplement c1±-a1 avec c1 au format [hh]:mm

PS : il est préférable de rester dans le fil de discussion initial.
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Aline" a écrit dans le message de
news:uc%
non ca ne marche pas voici l'exemple :

A1= 18/12/2003 14:00
B1/12/03 16:56
C1=(B1-A1)*24
résultat C1&,93 alors que je l'aurais voulu en hh:mm
si j'utilise le format que vous m'avez indiqué j'ai un résultat bizare de
646:24
*************************************************************
2ieme probleme entre le 18/12/2003 14h et 19/12/2003 16:56 je ne voudrais
compter que les horaires de bureau à savoir 8h_12h et 14h-18h.
ce qui devrait me donner comme résultat C1h56mn
Merci
----- Original Message -----
From: "Daniel.M"
Newsgroups: microsoft.public.fr.excel
Sent: Friday, December 26, 2003 2:08 PM
Subject: Re: calculer la durée entre 2dates&heures


Bonjour Aline,

1- quand je calcule la difference entre deux dates&heures j'ai un
résultat


en heures alors que je le voudrais en heures et minutes.


Une question de format, il me semble:
[h]:mm
devrait convenir.


2- en calculant je voudrais pouvoir prendre en considération des heures
ouvrables


Donne une couple d'exemple (avec les heures ouvrable début et fin) et les
résultats attendus.

Salutations,

Daniel M.









Avatar
Nicolas B.
Salut Aline,

En C1 :
±-A1
Et applique comme format personnalisé : [h]:mm
Il ne faut pas multiplier par 24 : excel fait tous les calculs de dates et
heures avec le jour pour unité.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


non ca ne marche pas voici l'exemple :

A1= 18/12/2003 14:00
B1/12/03 16:56
C1=(B1-A1)*24
résultat C1&,93 alors que je l'aurais voulu en hh:mm
si j'utilise le format que vous m'avez indiqué j'ai un résultat
bizare de 646:24
*************************************************************
2ieme probleme entre le 18/12/2003 14h et 19/12/2003 16:56 je ne
voudrais compter que les horaires de bureau à savoir 8h_12h et
14h-18h.
ce qui devrait me donner comme résultat C1h56mn
Merci
----- Original Message -----
From: "Daniel.M"
Newsgroups: microsoft.public.fr.excel
Sent: Friday, December 26, 2003 2:08 PM
Subject: Re: calculer la durée entre 2dates&heures


Bonjour Aline,

1- quand je calcule la difference entre deux dates&heures j'ai un
résultat en heures alors que je le voudrais en heures et minutes.


Une question de format, il me semble:
[h]:mm
devrait convenir.


2- en calculant je voudrais pouvoir prendre en considération des
heures ouvrables


Donne une couple d'exemple (avec les heures ouvrable début et fin)
et les résultats attendus.

Salutations,

Daniel M.





Avatar
Daniel.M
Salut Aline,

De préférence, il faut rester dans la même ficelle.

non ca ne marche pas voici l'exemple :
A1= 18/12/2003 14:00
B1/12/03 16:56
C1=(B1-A1)*24



Enlève le *24 (qui te donne des entiers au lieu des fractions de jour).
C1±-A1
et formatte en [h]:mm


2ieme probleme entre le 18/12/2003 14h et 19/12/2003 16:56 je ne voudrais
compter que les horaires de bureau à savoir 8h_12h et 14h-18h.
ce qui devrait me donner comme résultat C1h56mn
Merci
La formule MATRICIELLE suivante (saisir avec Ctrl-Maj-Entrée):


=SOMME((FREQUENCE(MOD(((LIGNE(INDIRECT("1:"&ARRONDI((B1-A1)*1440;0
)))-1)+1440*MOD(A1;1));1440);{8;12;14;18}*60-1)/1440)*{0;1;0;1;0})

Salutations,

Daniel M.

Avatar
Aline
grand merci ca a marché, il me reste le 2ieme probleme.
bon weekend

"Aline" a écrit dans le message de news:
uc#
non ca ne marche pas voici l'exemple :

A1= 18/12/2003 14:00
B1/12/03 16:56
C1=(B1-A1)*24
résultat C1&,93 alors que je l'aurais voulu en hh:mm
si j'utilise le format que vous m'avez indiqué j'ai un résultat bizare de
646:24
*************************************************************
2ieme probleme entre le 18/12/2003 14h et 19/12/2003 16:56 je ne voudrais
compter que les horaires de bureau à savoir 8h_12h et 14h-18h.
ce qui devrait me donner comme résultat C1h56mn
Merci
----- Original Message -----
From: "Daniel.M"
Newsgroups: microsoft.public.fr.excel
Sent: Friday, December 26, 2003 2:08 PM
Subject: Re: calculer la durée entre 2dates&heures


Bonjour Aline,

1- quand je calcule la difference entre deux dates&heures j'ai un
résultat


en heures alors que je le voudrais en heures et minutes.


Une question de format, il me semble:
[h]:mm
devrait convenir.


2- en calculant je voudrais pouvoir prendre en considération des
heures



ouvrables


Donne une couple d'exemple (avec les heures ouvrable début et fin) et
les


résultats attendus.

Salutations,

Daniel M.









Avatar
Aline
c'est génial votre formule les 2 cas marche mais j'ai encore un souci :
comment ne pas compter les weekend et les jours fériés, en plus je voudrais
prendre en considération samedi matin de 8hà 12h.
grand merci
j'apprends bcp avec vous je ne savais pas qu'Excel etait aussi génial que
ca.
Grand Merci
Aline
"Daniel.M" a écrit dans le message de
news:
Salut Aline,

De préférence, il faut rester dans la même ficelle.

non ca ne marche pas voici l'exemple :
A1= 18/12/2003 14:00
B1/12/03 16:56
C1=(B1-A1)*24



Enlève le *24 (qui te donne des entiers au lieu des fractions de jour).
C1±-A1
et formatte en [h]:mm


2ieme probleme entre le 18/12/2003 14h et 19/12/2003 16:56 je ne
voudrais


compter que les horaires de bureau à savoir 8h_12h et 14h-18h.
ce qui devrait me donner comme résultat C1h56mn
Merci
La formule MATRICIELLE suivante (saisir avec Ctrl-Maj-Entrée):


=SOMME((FREQUENCE(MOD(((LIGNE(INDIRECT("1:"&ARRONDI((B1-A1)*1440;0
)))-1)+1440*MOD(A1;1));1440);{8;12;14;18}*60-1)/1440)*{0;1;0;1;0})

Salutations,

Daniel M.





Avatar
Daniel.M
Aline,

c'est génial votre formule les 2 cas marche mais j'ai encore un souci :
comment ne pas compter les weekend et les jours fériés, en plus je voudrais
prendre en considération samedi matin de 8hà 12h.


Un chausson avec ça? :-)

Pas le temps de résoudre ça maintenant.
Mais je vais regarder plus tard si il n'y a pas d'autres volontaires qui t'ont
répondu.

Salutations,

Daniel M.

Avatar
AV
Ca tombe bien car j'ai exactement la même demande mais les jours fériés sont
ceux du calendrier tribal du Burkina Faso et les heures, celles de mon cadran
solaire qui est incliné de 0.3° vers le Nord !
Il y a aussi une autre contrainte que j'ai momentanément oubliée mais que je ne
manquerais pas de te communiquer lorsque tu auras répondu à cette demande !
Dans l'attente de votre prochain post, je vous prie d'agréer ----

;-)
AV
Avatar
AV
Une soluce (pas ultra-rapide !)

Dans le classeur, une liste des jours fériés (nommée "JrsFrs")
Date/heure début en A1
Date/heure fin en B1
Résultat en C1 (cellule au format "[hh]:mm")
Exécution de la macro à partir de la feuille active

Sub zz_Heures_Minutes_Ouvrées()
For x = [A1] To [B1] Step 1 / 1440
'Jour fériés et dimanches
If Not IsError(Application.Match(Int(x * 1), Range("JrsFrs"), 0)) Or _
Weekday(x) = 1 Then
x = Int(x) + 1
GoTo suite
End If
'le samedi
If Weekday(x) = 7 Then
If Hour(x) < 8 Or Hour(x) >= 12 Then
Else: N = N + 1
GoTo suite
End If
End If
'jours ordinaires
If Weekday(x) = 7 Then GoTo suite
If Hour(x) < 8 Or Hour(x) >= 18 Then
ElseIf Hour(x) >= 8 And Hour(x) < 12 _
Or Hour(x) >= 14 And Hour(x) < 18 Then
N = N + 1
End If
suite:
Next
[C1] = N / 1440
End Sub

AV
Avatar
Daniel.M
Salut Aline,

Je te propose 2 manières: Par formule (longue) et par VBA.

A-Par formule
Donne les valeurs de la 2e colonne aux noms suivants (ou nomme les cellules sur
le chiffrier après avoir inscrit ces valeurs, peu importe):
JrDeb 08:00
JrFin 18:00
LDeb 12:00
LFin 14:00
JrsFrs la plage des jours fériés français


Ensuite, en C1, la formule matricielle suivante (à saisir avec Ctrl-Maj-Entrée):

=IF(A1>±,0,ROUND(SUM(ISNA(MATCH(ROW(INDIRECT(INT(A1)&":"&INT(B1))),JrsFrs
,0))*CHOOSE(WEEKDAY(ROW(INDIRECT(INT(A1)&":"&INT(B1)))),0,8,8,8,8,8,4)/24)
-CHOOSE(SUM(0+(WEEKDAY(A1)<{2;7}))+1+3*ISNUMBER(MATCH(INT(A1),JrsFrs,0)),
MAX(0,MIN(LDeb,MOD(A1,1))-JrDeb),MAX(0,MIN(LDeb,MOD(A1,1))-JrDeb)+MAX(0,
MIN(JrFin,MOD(A1,1))-LFin),0,0,0,0)
-CHOOSE(SUM(0+(WEEKDAY(B1)<{2;7}))+1+3*ISNUMBER(MATCH(INT(B1),JrsFrs,0)),
MAX(0,LDeb-MAX(MOD(B1,1),JrDeb)),MAX(0,JrFin-MAX(MOD(B1,1),LFin))+MAX(0,
LDeb-MAX(MOD(B1,1),JrDeb)),0,0,0,0),6))


B-Par VBA:
Tu dois mettre la formule suivante en C1
ÊlcTempsTravaille(A1;B1;JrsFrs)

Dans un module (Alt-F11, Menu Insère/Module), insère le code suivant:
' Daniel M. Dec 2003
' Calcule le temps travaillé entre 2 dates étant donné 2 plages horaires
' les jours de semaines et 1 seule le samedi. Tient compte des JoursFeries
' 3e paramètre (facultatif)
'
Function calcTempsTravaille(Deb As Date, Fin As Date, _
Optional JoursFeries As Range) As Double
Dim J As Date, PremJ As Date, DernJ As Date
Dim t1AM#, t1PM#, t2AM#, t2PM#, N# ' les heures AM, PM, totales
Dim Matin#, DebLunch#, FinLunch#, Soir# ' les constantes (données du problème)
Dim enVacances As Boolean, FeriesExistent As Boolean

Matin = TimeSerial(8, 0, 0): DebLunch = TimeSerial(12, 0, 0)
FinLunch = TimeSerial(14, 0, 0): Soir = TimeSerial(18, 0, 0)

PremJ = Int(Deb): DernJ = Int(Fin)

FeriesExistent = Not JoursFeries Is Nothing
With Application

' Pour chaque jour, compte les heures
For J = PremJ To DernJ
' Determine si J est une journée de repos
enVacances = False
If Weekday(J) = 1 Then
enVacances = True ' Dimanche, on se repose
ElseIf FeriesExistent Then
' repos si jour férié
enVacances = IsNumeric(.Match(J * 1, JoursFeries, 0))
End If

If Not enVacances Then ' Un jour à comptabiliser
' Première journée? : à quelle heure entre-t-on?
If J = PremJ Then
t1AM = .Max(Deb - Int(Deb), Matin)
t1PM = .Max(Deb - Int(Deb), FinLunch)
Else ' sinon, simule les heures minimum
t1AM = Matin
t1PM = FinLunch
End If

' Dernière journée? : à quelle heure quitte-t-on?
If J = DernJ Then
t2AM = .Min(Fin - Int(Fin), DebLunch)
t2PM = .Min(Fin - Int(Fin), Soir)
Else ' sinon, simule les heures maximum
t2AM = DebLunch
t2PM = Soir
End If

N = .Max(0, t2AM - t1AM) ' heures du matin
' heures de l'après-midi (sauf samedi)
If Weekday(J) <> 7 Then N = N + .Max(0, t2PM - t1PM)

'ajout du nombre Heures travaillées au Jour J
calcTempsTravaille = calcTempsTravaille + N

End If
Next J ' toutes les heures sont comptées

End With ' Application
End Function


Salutations,

Daniel M.
Avatar
Daniel.M
Oups. Voici la formule matricielle (Ctrl-Maj-Entrée) traduite:

=SI(A1>B1;0;ARRONDI(SOMME(ESTNA(EQUIV(LIGNE(INDIRECT(ENT(A1)&":"&ENT(B1)));JrsFr
s
;0))*CHOISIR(JOURSEM(LIGNE(INDIRECT(ENT(A1)&":"&ENT(B1))));0;8;8;8;8;8;4)/24)
-CHOISIR(SOMME(0+(JOURSEM(A1)<{2;7}))+1+3*ESTNUM(EQUIV(ENT(A1);JrsFrs;0))
;MAX(0;MIN(LDeb;MOD(A1;1))-JrDeb);MAX(0;MIN(LDeb;MOD(A1;1))-JrDeb)+MAX(0;
MIN(JrFin;MOD(A1;1))-LFin);0;0;0;0)
-CHOISIR(SOMME(0+(JOURSEM(B1)<{2;7}))+1+3*ESTNUM(EQUIV(ENT(B1);JrsFrs;0))
;MAX(0;LDeb-MAX(MOD(B1;1);JrDeb));MAX(0;JrFin-MAX(MOD(B1;1);LFin))
+MAX(0;LDeb-MAX(MOD(B1;1);JrDeb));0;0;0;0);6))

Salutations,

Daniel M.