Microsoft 365 Format heure non valable

Nanou42

XLDnaute Nouveau
Bonjour à tous,

Je reçois un fichier sur lequel je dois faire des analyses.
Mais j'aurais besoin d'aide pour deux points
Je n'arrive pas à faire la somme des durée malgré que le format des cellules soit le bon.
Cela vient peut être de l'export.

Il me faudrait une macro pour pouvoir transformer un contenu jour: heure: minute: seconde en en heure: minute: seconde.
Le nombre de ligne etant aléatoire. J'ai mis un fichier

Merci
 

Pièces jointes

  • Somme heure.xlsx
    16.1 KB · Affichages: 10

Dranreb

XLDnaute Barbatruc
Bonjour.
Pour le 1er problème c'est parce que vous avez des texte en colonne C au lieu de nombres.
Par formule :
Dans la colonne où vous le voulez en ligne 5, à propager sur 2 lignes :
Code:
=GAUCHE($F5;CHERCHE(".";$F5)-1)+STXT($F5;CHERCHE(".";$F5)+1;8)
 
Dernière édition:

Nanou42

XLDnaute Nouveau
Bonjour.
Pour le 1er problème c'est parce que vous avez des texte en colonne C au lieu de nombres.
Par formule :
Dans la colonne où vous le voulez en ligne 5, à propager sur 2 lignes :
Code:
=GAUCHE($F5;CHERCHE(".";$F5)-1)+STXT($F5;CHERCHE(".";$F5)+1;8)
Bonjour Drandreb, merci pour ton aide. la transformation jour heure minute seconde fonctionne très bien. A moi de l'adapter. Merci
 

Dranreb

XLDnaute Barbatruc
La fonction VBA qui fait la même chose :
VB:
Function CvJHMS(ByVal V)
   Dim TS() As String
   If TypeOf V Is Range Then V = V.Value
   If VarType(V) = vbString Then
      On Error Resume Next
      TS = Split(V, ".")
      CvJHMS = CDbl(TS(0)) + TimeValue(TS(1))
      If Err Then CvJHMS = V
   Else: CvJHMS = V: End If
   End Function
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Vous pouvez aussi faire comme ça :
VB:
Sub test()
   ConvertirJHMS [F5:F22]
   End Sub
Sub ConvertirJHMS(ByVal Rng As Range)
   Dim TDon(), L As Long, TS() As String, HMS As Double
   TDon = Rng.Value
   For L = 1 To UBound(TDon, 1)
      If VarType(TDon(L, 1)) = vbString Then
         On Error Resume Next
         TS = Split(TDon(L, 1), ".")
         HMS = CDbl(TS(0)) + TimeValue(TS(1))
         If Err = 0 Then TDon(L, 1) = HMS
         On Error GoTo 0: End If
      Next L
   Rng.Value = TDon
   End Sub
 

Nanou42

XLDnaute Nouveau
Vous pouvez aussi faire comme ça :
VB:
Sub test()
   ConvertirJHMS [F5:F22]
   End Sub
Sub ConvertirJHMS(ByVal Rng As Range)
   Dim TDon(), L As Long, TS() As String, HMS As Double
   TDon = Rng.Value
   For L = 1 To UBound(TDon, 1)
      If VarType(TDon(L, 1)) = vbString Then
         On Error Resume Next
         TS = Split(TDon(L, 1), ".")
         HMS = CDbl(TS(0)) + TimeValue(TS(1))
         If Err = 0 Then TDon(L, 1) = HMS
         On Error GoTo 0: End If
      Next L
   Rng.Value = TDon
   End Sub
Terrible, exactement ce que je voulais, les valeurs sans jour (juste avec des hh:mm:ss) restent inchangées sans erreur. Merci.

Bien cordialement
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Je n'arrive pas à faire la somme des durée malgré que le format des cellules soit le bon.

Il me faudrait une macro pour pouvoir transformer un contenu jour: heure: minute: seconde en en heure: minute: seconde.

:rolleyes: un format de nombre appliqué à un texte ne signifie pas nécessairement que le contenu réel de la cellule soit un nombre ...

:mad: Maitrisez le B.A.BA des formules et feuilles de calcul, avant que décréter que VBA est la panacée...

essayez ceci en C26 :
={SOMME(1*(C3:C22))} ' validation par Ctrl-Maj-Entrée
format de cellule :
[hh]:mm:ss
1580302442525.png
 

Nanou42

XLDnaute Nouveau
Bonjour à tous,
Désolé de ne pas avoir répondu plus tôt
@ Modeste geedee, sincerement merci pour ton aide et ton conseil.
@ dysorthographie ta macro marche très bien, j'ai trouvé ceci qui donne le même résultat

Sub heure()
Range("A:A").NumberFormat = "General"
Range("A:A").Value = Range("A:A").Value
End Sub


Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 307
Messages
2 087 097
Membres
103 468
dernier inscrit
TRINITY