Format heure sans saisir les 2 points

Bonjour cher Forum,

J'ai trouvé plusieurs codes pour saisir des heures sans les deux points, du genre 730 = 07:30

Mais aucun fonctionne!

Je me bute toujours à ces résultats : 24:00 ou 00:00... Est-ce du au format de la cellule, à Excel 2003?

Merci

27formatheure.zip (10.79 Ko)

Bonjour,

Teste avec cette macro

84formatheure.zip (20.82 Ko)

Bonjour, salut M12 !

1. Mettre un format "Durée" ou autre format horaire valide dans la plage souhaitée.

2. Utiliser le code suivant :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Heures As Single, Minutes As Single

Application.EnableEvents = False
If Not Intersect(Target, Range("A1:A10")) Is Nothing And Target.Cells.Count = 1 Then
    If Target.Value <> "" Then
        If Right(Target, 2) * 1 >= 60 Then
            MsgBox "Nombre invalide !"
            Application.EnableEvents = True
            Exit Sub
        End If
        Minutes = Right(Target, 2) / 1440
        If Len(Target) > 2 Then Heures = Int(Target / 100) / 24
        Range(Target.Address) = Heures + Minutes
    End If
End If
Application.EnableEvents = True

End Sub

Remarques :

  • Une heure est une fraction de jour. 1/24 pour une heure, 1/1440 pour une minute, 1/86400 pour une seconde.
  • Target étant un Range ByVal et non ByRef, il est possible qu'il ne puisse pas être modifié de façon directe. D'où l'utilisation de Range(Target.Address)
  • Le code proposé ne gère ni les secondes, ni les jours (ex : 10020 correspond à 100 heures et 20 minutes ici). Mais la logique reste la même pour intégrer ces modifications si besoin

Bonjour,

Une autre proposition pour le fun.

Cdlt.

46formatheure.zip (13.40 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
    If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
        Application.EnableEvents = False
        x = MilitaryToTime(Target.Value)
        With Target
            .Value = x
            .NumberFormat = "[hh]:mm"
        End With
        Application.EnableEvents = True
    End If
End Sub
'Military To Time
'This function converts military time, supplied as an integer, to a standard serial time number.
'For example, it converts 1130 to 11:30, and 1650 to 16:50.
Public Function MilitaryToTime(T1 As Integer) '
' Input T1: 24-hour time as integer,e.g., 1130=11:30, 1650=16:50
' Output, time as serial time e.g, 0.5 for noon.'
Dim TT1 As Double
    TT1 = Int(T1 / 100) + (((T1 / 100) - Int(T1 / 100)) / 0.6) '23.50
    TT1 = TT1 / 24
    MilitaryToTime = TT1
End Function

Bonjour m12, Pedro22 et Jean-Éric,

Merci pour le retour rapide.

Impeccable! Après quelques tests rapides, les trois solutions semblent toutes fonctionner.

Merci encore, A+.

Rechercher des sujets similaires à "format heure saisir points"