Convertir un nombre en heure:minute:secondes

Bonjour tout le monde,

J'ai réalisé une extraction dans l'ERP de mon entreprise pour obtenir les temps d'arrêts d'une machine, mais je recontre un problème.

Si mon arrêt débute à 9h00 et se termine à 9h10, excel me donne les valeurs suivantes:

heure début: 090000

heure fin 091000

arrêt=heure fin - heure début=001000

Cela fausse mes calculs de temps d'arrêt. Par exemple, s'il y a un arrêt entre 9h50 et 10h05, excel me donne un arrêt de 55 minutes.

J'aimerais convertir mes cellules heure début et heure fin au format horaire (090000 deviendrait 09:00:00; 134500 deviendrait 13:45:00) pour résoudre ce problème.

J'ai essayé de faire propriété>format de cellule>heure>hh:mm:ss mais cela remplace mes valeurs par 00:00:00

Quelqu'un peut m'aider ?

Merci

Bonjour

Peux-tu compléter ton profil de ta version Excel et joindre un fichier représentatif

L'extraction génère quel type de fichier ? Csv, Excel, autre ?

Bonjour,

HHHhhhaaaa les joies de l'extraction

Essaie de convertir des données avec ce bout de code (en partant du principe que les heures de début sont dans la colonne A et dès la ligne 1 et les heures de fin idem pour la colonne B)

Sub Ext()
Dim BD As Worksheet
Dim DernLig As Long, i As Long

    Set BD = ThisWorkbook.Worksheets("Feuil1")
    DernLig = BD.Range("A" & BD.Rows.Count).End(xlUp).Row
    For i = 1 To DernLig
        BD.Cells(i, 1) = Format(Mid(BD.Cells(i, 1), 1, 2) & ":" & Mid(BD.Cells(i, 1), 3, 2) & ":" & Mid(BD.Cells(i, 1), 5), "hh:mm:ss")
        BD.Cells(i, 2) = Format(Mid(BD.Cells(i, 2), 1, 2) & ":" & Mid(BD.Cells(i, 2), 3, 2) & ":" & Mid(BD.Cells(i, 2), 5), "hh:mm:ss")
    Next i
End Sub

Cependant il manque un cas spécifique, quel est le format obtenu quand l'heure de début commence à une date et que l'heure de fin se trouve à une autre date ? (ex : commence à 21/07/2020 15:18:00, se termine 22/07/2020 03:30:00) ?

Bonjour Chris,

J'utilise Excel 2013 (15.0.4919.1000) 32 bits

L'extraction se fait au format csv

Je ne peux pas partager ce fichier car les données dessus sont confidentielles

Bonjour Gautier, merci pour ton aide

J'ai essayé de recopié ton code sur le vba de ma feuille excel mais cela n'a pas marché. J'ai donc essayé de recopier le programme dans un module puis de l’exécuter, mais sans succès non plus.

As tu modifiés le nom de la feuille dans le code ? Si la feuille sur laquelle se trouve les données est différents de "Feuil1" ?

Toutes les données sont au même format à savoir 6 cratères ?

Utilise le fichier ci-joint et fait un copier collé de ton fichier CVS dans ce dernier (début dans colonne A et fin dans colonne B)

16extr.xlsm (16.97 Ko)

Bonjour Gautier, merci pour ton aide

J'ai essayé de recopié ton code sur le vba de ma feuille excel mais cela n'a pas marché. J'ai donc essayé de recopier le programme dans un module puis de l’exécuter, mais sans succès non plus.

Bonjour, tu peux nous mettre un fichier exemple de l'importation avec 2 ou 3 lignes ? ( sans infos confidentielles. )

Bonjour,

Désolé Xmenpl, j'ai l'interdiction de partager un fichier interne à mon entreprise.

Gautier le programme que tu m'as envoyé fonctionne à un détail près. Pour les nombres à 5 chiffres, Excel rajoute un 0 à la fin au lieu du début. 50000 devient 50:00:00 au lieu de 05:00:00

J'ai essayé de modifier le Format de cellule mais ça n'a pas marché.

Je pense rajouter un if au programme tel que:

if cell value<100000 then

cell value=0xxxxx (mais je ne connais pas la formule qui me permettrait de faire ça)

Merci pour votre aide

Voilà,

Sub Extr_V2()
Dim BD As Worksheet
Dim DernLig As Long, i As Long
Dim Variable As String
Dim H As Integer, M As Integer, S As Integer

    Set BD = ThisWorkbook.Worksheets("Feuil1")
    DernLig = BD.Range("A" & BD.Rows.Count).End(xlUp).Row
    For i = 1 To DernLig
        Variable = BD.Cells(i, 1)
        If Len(Variable) = 5 Then
            S = Right(BD.Cells(i, 1), 2)
            M = Mid(BD.Cells(i, 1), Len(BD.Cells(i, 1)) - 3, 2)
            H = Mid(BD.Cells(i, 1), Len(BD.Cells(i, 1)) - 4, 1)
            BD.Cells(i, 1) = Format(H & ":" & M & ":" & S, "hh:mm:ss")
        Else
            If Len(Variable) = 6 Then
                S = Right(BD.Cells(i, 1), 2)
                M = Mid(BD.Cells(i, 1), Len(BD.Cells(i, 1)) - 3, 2)
                H = Mid(BD.Cells(i, 1), Len(BD.Cells(i, 1)) - 5, 2)
                BD.Cells(i, 1) = Format(H & ":" & M & ":" & S, "hh:mm:ss")
            End If
        End If
    Next i
End Sub

Merci Gautier, ça fonctionne parfaitement

Tant mieux si c'est ok, n'hésite pas si tu rencontres d'autres difficultés !

bonjour,

je suis pas certain d'avoir compris l’intérêt de tous ce code!

Sub Test()
Debug.Print Format("090000", "00:00:00"), Format("091000", "00:00:00"), Format("001000", "00:00:00"), Format("134500 ", "00:00:00"), Format("50000", "00:00:00")
End Sub

Bonjour tout le monde,

J'ai réussi à modifier le programme pour les heures comprises entre 00h et 1h (lenght=3 si entre 00:00 et 00:09 et lenght=4 si entre 00:10 et 00:59)

Voilà pour les intéressés:

Sub Extr_V2()
Dim BD As Worksheet
Dim DernLig As Long, i As Long
Dim Variable As String
Dim H As Integer, M As Integer, S As Integer

    Set BD = ThisWorkbook.Worksheets("Feuil1")
    DernLig = BD.Range("A" & BD.Rows.Count).End(xlUp).Row
    For i = 1 To DernLig
        Variable = BD.Cells(i, 1)
        If Len(Variable) = 4 Then
            S = Right(BD.Cells(i, 1), 2)
            M = Left(BD.Cells(i, 1), 2)
            H = 0
            BD.Cells(i, 1) = Format(H & ":" & M & ":" & S, "hh:mm:ss")
        Else
            If Len(Variable) = 3 Then
                S = Right(BD.Cells(i, 1), 2)
                M = Left(BD.Cells(i, 1), 1)
                H = 0
                BD.Cells(i, 1) = Format(H & ":" & M & ":" & S, "hh:mm:ss")
            End If
        End If
    Next i
End Sub

Bonne journée

Bonjour tout le monde !

Autre proposition, une fonction VBA personnalisée :

Function ConvertHeure(Heure As Long) As Single

Dim H As Integer, M As Integer, S As Integer

H = Int(Heure / 10000)
M = Int(Heure / 100) - H * 100
S = Heure - Int(Heure / 100) * 100
ConvertHeure = TimeSerial(H, M, S)

End Function

Une fois collée dans une module standard de l'éditeur VBA, elle s'utilise comme une fonction Excel classique :

=ConvertHeure(123456)
=ConvertHeure(A1)

La cellule/plage est à mettre au format horaire pour que le résultat apparaisse correctement.

PS : la formule est aussi réalisable avec les fonctions existantes d'Excel (Int() --> ENT() ; TimeSerial() --> TEMPS())

Rechercher des sujets similaires à "convertir nombre heure minute secondes"