additionner des heures

a10

XLDnaute Impliqué
Bonjour

comment additionner des heures et des minutes

par exemple
1h 30 minutes +1h 5minutes soit égale à 2h35 minutes
 

job75

XLDnaute Barbatruc
Re : additionner des heures

Bonjour a10, CHALET53, Jean-Claude, Patrick,

Plutôt tordu comme problème mais bon, voyez le fichier joint.

Les colonnes A et B sont au format Standard.

Colonne C au format [h]:mm, formule en C2 :

Code:
=SUBSTITUE(TEXTE(SI(ESTNUM(-SUBSTITUE(A2;".";","));SUBSTITUE(A2;".";",");SUBSTITUE(A2;",";"."));GAUCHE(1/1000;4));STXT(1/10;2;1);":")+SUBSTITUE(TEXTE(SI(ESTNUM(-SUBSTITUE(B2;".";","));SUBSTITUE(B2;".";",");SUBSTITUE(B2;",";"."));GAUCHE(1/1000;4));STXT(1/10;2;1);":")
Colonne D au format Standard, formule en D2 :

Code:
=--SUBSTITUE(TEXTE(SUBSTITUE(TEXTE(SI(ESTNUM(-SUBSTITUE(A2;".";","));SUBSTITUE(A2;".";",");SUBSTITUE(A2;",";"."));GAUCHE(1/1000;4));STXT(1/10;2;1);":")+SUBSTITUE(TEXTE(SI(ESTNUM(-SUBSTITUE(B2;".";","));SUBSTITUE(B2;".";",");SUBSTITUE(B2;",";"."));GAUCHE(1/1000;4));STXT(1/10;2;1);":");"[h]:mm");":";STXT(1/10;2;1))
Ces formules fonctionnent quel que soit le séparateur décimal de l'ordi.

Edit pour Patrick : utiliser VBA n'est pas simple car VBA ne reconnaît pas le format [h]:mm.

A+
 

Pièces jointes

  • Heures bizarroïdes(1).xls
    25 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
Re : additionner des heures

Re,

Les formules précédentes ne permettent pas de traiter les heures négatives.

On y parvient en utilisant le Calendrier depuis 1904 et ces formules en C2 et D2 :

Code:
=(-1)^(GAUCHE(A2)="-")*SUBSTITUE(TEXTE(ABS(SI(ESTNUM(-SUBSTITUE(A2;".";","));SUBSTITUE(A2;".";",");SUBSTITUE(A2;",";".")));GAUCHE(1/1000;4));STXT(1/10;2;1);":")+(-1)^(GAUCHE(B2)="-")*SUBSTITUE(TEXTE(ABS(SI(ESTNUM(-SUBSTITUE(B2;".";","));SUBSTITUE(B2;".";",");SUBSTITUE(B2;",";".")));GAUCHE(1/1000;4));STXT(1/10;2;1);":")
Code:
=--SUBSTITUE(TEXTE((-1)^(GAUCHE(A2)="-")*SUBSTITUE(TEXTE(ABS(SI(ESTNUM(-SUBSTITUE(A2;".";","));SUBSTITUE(A2;".";",");SUBSTITUE(A2;",";".")));GAUCHE(1/1000;4));STXT(1/10;2;1);":")+(-1)^(GAUCHE(B2)="-")*SUBSTITUE(TEXTE(ABS(SI(ESTNUM(-SUBSTITUE(B2;".";","));SUBSTITUE(B2;".";",");SUBSTITUE(B2;",";".")));GAUCHE(1/1000;4));STXT(1/10;2;1);":");"[h]:mm");":";STXT(1/10;2;1))
Fichier (2).

A+
 

Pièces jointes

  • Heures bizarroïdes(2).xls
    25.5 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re : additionner des heures

Re,


Les formules précédentes renvoient des valeurs d'erreur si des cellules sont vides en colonnes A ou B.

On peut facilement l'éviter mais pour la version (2) c'est possible seulement avec un fichier .xlsx (Excel 2007) car il y a plus de 8 niveaux d'imbrication.

Fichiers (1 bis) et (2 bis).

A+
 

Pièces jointes

  • Heures bizarroïdes(1 bis).xls
    36 KB · Affichages: 32
  • Heures bizarroïdes(2 bis).xlsx
    11.3 KB · Affichages: 36

job75

XLDnaute Barbatruc
Re : additionner des heures

Re,

En passant noter que l'aide Excel 2003 n'est pas claire sur les niveaux d'imbrication.

Elle parle d'un maximum de 7 niveaux (en comptant la 1ère fonction).

Or =SI(1;SI(1;SI(1;SI(1;SI(1;SI(1;SI(1;SI(1;1)))))))) a 8 niveaux et passe bien sur Excel 2003.

A+
 

job75

XLDnaute Barbatruc
Re : additionner des heures

Bonjour a10, le forum,

cela semble trop compliqué.

Compliqué oui mais trop non.

Il faut nécessairement jongler avec les formats et les virgules, points, 2 points.

Pour la solution (2 bis) on peut l'avoir en .xls en calculant la colonne D à partir de la colonne C.

Voir fichier joint.

A+
 

Pièces jointes

  • Heures bizarroïdes(2 bis).xls
    25.5 KB · Affichages: 39

job75

XLDnaute Barbatruc
Re : additionner des heures

Re,

Peut-être qu'une solution VBA vous plaira davantage :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, h#
Set r = Intersect(Target, Range("A2:B" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
For Each r In r 'si entrées multiples
  Cells(r.Row, 3).Resize(, 2) = "" 'RAZ
  If Cells(r.Row, 1) & Cells(r.Row, 2) <> "" Then
    h = Heure(Cells(r.Row, 1)) + Heure(Cells(r.Row, 2))
    Cells(r.Row, 3) = h
    Cells(r.Row, 4) = Heure(h, True)
  End If
Next
End Sub

Function Heure(v, Optional op As Boolean = False)
Dim sg, p
sg = IIf(Left(CStr(v), 1) = "-", -1, 1)
v = Abs(Val(Replace(CStr(v), ",", ".")))
If op Then
  v = sg * (Int(v * 24) + (Round(v * 1440) - 60 * Int(v * 24)) / 100)
Else
  v = Format(v, "0.00")
  p = InStr(v, Mid(0.1, 2, 1)) 'position du séparateur décimal
  v = sg * (Left(v, p - 1) / 24 + Mid(v, p + 1) / 1440)
End If
Heure = v
End Function
C'est en effet plus simple à comprendre que les formules :rolleyes:

Fichier joint.

A+
 

Pièces jointes

  • Heures bizarroïdes par VBA(1).xls
    37 KB · Affichages: 34

Discussions similaires

Réponses
9
Affichages
399
Réponses
6
Affichages
315