Faire une moyenne sur un format particulier "temps"

Bonjour à tous,

J'ai un fichier en présence de temps chronométrique de type 17'15"58, 18'45"46, Etc...

Pour entrer ces temps plus rapidement dans ma base de données, je tape 171558 et celui-ci le met en forme grâce au format de cellule [>10000]0'00''00;[>1000]00''00;

Mon problème : Lorsque je veux faire une moyenne de plusieurs temps, et si ceux ci ne font pas partis de la même minute, la moyenne ne se fait pas. Est ce que quelqu'un aurait une astuce svp, sans passer par le format de cellule standard mm:ss,00 qui me prendrait beaucoup trop de temps pour entrer ces chronos...

Merci de me venir en aide!

Bonjour touny39,

ce fichier Excel pourra peut-être t'aider :

580exo-touny39.xlsx (10.13 Ko)

je n'ai pas d'autre solution à proposer

dhany

Bonjour Dhany,

D'abord merci pour ton aide et ton fichier. Ta formule est très interessante.

Malheureusement j'ai du mal m'exprimer mais je n'ai pas besoin de convertir mon temps en centième.

J'ai simplement besoin d'avoir la moyenne de mes temps tels qu'ils le sont (17'15"58, 18'45"46, Etc...).

Je sais que si je les rentre sous cette forme : 17:15,58 je pourrai faire toutes sortes de calculs, mais ceci prend énormément de temps à les rentrer.

J'ai donc choisi de les rentrer tel quel 171558 et grâce à [>10000]0'00''00;[>1000]00''00; ils se convertissent en 17'15"58. Par contre je ne peux pas faire ma moyenne. Peut être avez vous une solution pour que je puisse continuer à entrer mes temps sous ce format et pouvoir faire tout de même des moyennes de ceux ci...?

Tu a écrit :

je n'ai pas besoin de convertir mon temps en centièmes

J'avais bien compris cela, mais malheureusement, c'est d'après moi un passage obligé pour pouvoir calculer la moyenne des temps : de la même façon qu'on ne peut pas « additionner des pommes et des oranges » (car on ne peut comparer que ce qui est comparable et ça doit être la même unité), je ne vois pas comment on pourrait faire la moyenne de temps qui sont faits de 3 parties non homogènes : minutes, secondes, et centièmes de secondes ; c'est pourquoi je n'ai toujours pas d'autre solution à proposer.

Pourtant, dans la solution que je t'ai proposée, tu saisis dans la colonne A tes temps selon ton mode de saisie préféré : entrer uniquement les chiffres ; la colonne B calculée ne sert que pour le calcul de la moyenne, et comme je l'ai indiqué dans mes notes du fichier, c'est préférable que tu masques cette colonne ; je l'ai laissée affichée seulement pour que tu la voies, afin que que tu puisses comprendre le « mécanisme » utilisé.


ATTENTION !

Même si un temps de la colonne A est affiché par exemple 17'15"58 ça reste le nombre 171558 c'est à dire 171 mille 5 cent 58 : quand tu es sur cette cellule, il te suffit de regarder ce qu'il y a dans la barre de formule pour t'en convaincre ; voilà pourquoi tu ne peux pas calculer de moyenne dessus ! c'est impossible !!! je parle d'une moyenne de temps, bien sûr, car la moyenne de plusieurs nombres est toujours possible.

dhany

J'ai donc choisi de les rentrer tel quel 171558 et grâce à [>10000]0'00''00;[>1000]00''00; ils se convertissent en 17'15"58. Par contre je ne peux pas faire ma moyenne. Peut être avez vous une solution pour que je puisse continuer à entrer mes temps sous ce format et pouvoir faire tout de même des moyennes de ceux ci...?

17'15"58 fait 0,0119858796296296 ... ensuite tu pourra faire des calculs

Nous sommes en base 60 et non en base 100, la transformation s'impose avant de calculer

si tu ne veux pas séparer par : et , les valeurs rentrées, tu as une autre solution = mettre 3 zones de saisie (mais je ne vois pas l'intérêt par rapport au fait de taper les : et ,)

dernière solution : faire une macro événementielle

dernière solution : faire une macro événementielle

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
txt = CStr(Target.Value)
minutes = Mid(txt, 1, 2)
secondes = Mid(txt, 3, 2)
centiemes = Mid(txt, 5, 2)
'Debug.Print minutes & "'" & secondes & "''" & centiemes
Target.Value = 1 / 24 / 60 * (minutes + secondes / 60 + centiemes / 60 / 100)
Target.NumberFormat = "mm:ss.00"
Application.EnableEvents = True
End Sub

à blinder un peu (faire un contrôle sur ce qui est entré !)

Bonjour Dhany

Bonjour,

Je propose une 2ème version :

64exo-touny39.xlsm (15.57 Ko)
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .Count > 1 Then Exit Sub
    If .Column > 1 Then Exit Sub
    Dim chn$: chn = .Value: If Len(chn) <> 6 Then Exit Sub
    Application.EnableEvents = False
    .Value = (Val(Left$(chn, 2)) + Val(Mid$(chn, 3, 2)) / 60 _
      + Val(Right$(chn, 2)) / 6000) / 1440
    Application.EnableEvents = True
  End With
End Sub

dhany

Hello !

j'ai amélioré le code

l'intérêt est que si tu tapes directement en heurs:minutes:secondes,centièmes cela restera en l'état

le code prend en compte aussi le cas où il y a moins de 6 chiffres

et tu pourras le faire partout sur la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not IsNumeric(Target.Value) Then Exit Sub
If Target.Value < 1 Or Target.Value > 595999 Then Exit Sub
Application.EnableEvents = False
txt = Right("000000" + CStr(Target.Value), 6)
minutes = Mid(txt, 1, 2)
secondes = Mid(txt, 3, 2)
centiemes = Mid(txt, 5, 2)
Target.Value = 1 / 24 / 60 * (minutes + secondes / 60 + centiemes / 60 / 100)
Target.NumberFormat = "mm:ss.00"
Application.EnableEvents = True
End Sub
111saisie-compteur.xlsm (14.73 Ko)

Hello Dhany,

je vois que mon idée fait des émules ...

bonne journée

Bonjour Steelson,

C'est vraiment excellent, merci beaucoup pour le fichier c'est top!

Merci également à Dhany. Vous m'êtes d'une très grande aide et surtout un énorme gain de temps

Bonne continuation à vous!

Steelson,

Je vais t'embêter à nouveau. Est ce possible de modifier la macro pour pouvoir mettre aussi des nombres (pas plus de deux chiffres) ? Car j'ai aussi besoin de mettre certains nombre dans mon tableau, dans d'autres colonnes mais sur la même feuille...

Merci d'avance,

comme ceci

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not IsNumeric(Target.Value) Then Exit Sub
If Target.Value < 100 Or Target.Value > 595999 Then Exit Sub
Application.EnableEvents = False
txt = Right("000000" + CStr(Target.Value), 6)
minutes = Mid(txt, 1, 2)
secondes = Mid(txt, 3, 2)
centiemes = Mid(txt, 5, 2)
Target.Value = 1 / 24 / 60 * (minutes + secondes / 60 + centiemes / 60 / 100)
Target.NumberFormat = "mm:ss.00"
Application.EnableEvents = True
End Sub

Un grand merci!

Rechercher des sujets similaires à "moyenne format particulier temps"