Bonjour le fil,
@wags, vous êtes dans un TS (c'est très bien), mais du coup la cellule garde le format heure
donc si vous saisissez "845" par exemple, vous obtenez "Date + 00:00", affichage "00:00"
Voici le code adapté de celui de Jean-Eric que je salue et quelque peu modifié pour palier aux éventualités (à tester)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sTemp As String
' Sors de la procédure si slection multiple ou cellule vie
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
' Sinon
If Not Intersect(Target, Range("Tableau1[Heure]")) Is Nothing Then
Application.EnableEvents = False
If Target.Text = "00:00" Then
' Saisi d'une heure sans les 2 points = 856
If Len(Trim(Target.Value)) <= 4 Then
sTemp = Format(Target.Value, "0000")
sTemp = Left(sTemp, 2) & ":" & Right(sTemp, 2)
' Pourquoi pas gérer
' Si l'utilisateur saisi une heure comme un date 10/12 au lieu de 10;12
ElseIf IsDate(CDate(Trim(Target.Value))) Then
sTemp = Day(Target.Value) & ":" & Month(Target.Value)
End If
Target.Value = sTemp
ElseIf InStr(1, Target.Text, ":") > 0 Then
' C'est ok
Else
MsgBox "Saisie invalide!...", vbCritical, "Information"
Application.Undo
' Remettre la cellule au bon format au cas ou
Target.NumberFormat = "hh:mm"
End If
End If
Application.EnableEvents = True
End Sub
Edit : test de la longeur saisie, modifié
A+