Bonjour,
Je souhaiterai connaitre la méthode pour afficher dans une cellule ma saisie 023015 sous cette forme :
02:30,15 et ça de manière automatique ?
ce sont des min seconde et centième. J'ai essayé le format de cellule mm:ss,00 mais lorsque je saisie 023015 il me passe en heure directement ?
( taper .. sur le pavé numérique à la place de : )
Barre de menu - Outils - Options - Onglet "Orthographe", cliquer sur "Options de correction automatique"
Er remplacer .. par :
Par exemple vous aller alors taper : 1..23.12 et cela affichera 01:12,12
Mettre le format personnalisé dans la cellule mm:ss,00
J'avais fait un truc comme cela en VBA, il y a déja quelques années.
si on tapait un nombre sur une cellule au format horaire, cela transformait le nombre en heures minutes.
je recherche.
En VBA on peut entrer la formule dans la zone des saisies (ici la colonne A) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sep$, c As Range
sep = Mid(1 / 10, 2, 1) 'séparateur décimal de l'ordi
Application.EnableEvents = False
On Error Resume Next
For Each c In Intersect(Target, Range("A2:A" & Rows.Count), UsedRange) 'si entrées multiples (copier-coller)
If c <> "" And Not c.HasFormula Then c = "=--TEXT(" & c & ",""00\:00\" & sep & "00"")"
'sur Excel 2007 et versions suivantes on peut utiliser :
'If c <> "" And Not c.HasFormula Then c = "=IFERROR(--TEXT(" & c & ",""00\:00\" & sep & "00""),"""")"
Next
Application.EnableEvents = True
End Sub
J'utilise la formule de Modeste geedee mais avec -- (qui pèse 2 octets) au lieu de 1* (4 octets).
En VBA on peut entrer la formule dans la zone des saisies (ici la colonne A) :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim sep$, c As Range
sep = Mid(1 / 10, 2, 1) 'séparateur décimal de l'ordi
Application.EnableEvents = False
On Error Resume Next
For Each c In Intersect(Target, Range("A2:A" & Rows.Count), UsedRange) 'si entrées multiples (copier-coller)
If c <> "" And Not c.HasFormula Then c = "=--TEXT(" & c & ",""00\:00\" & sep & "00"")"
'sur Excel 2007 et versions suivantes on peut utiliser :
'If c <> "" And Not c.HasFormula Then c = "=IFERROR(--TEXT(" & c & ",""00\:00\" & sep & "00""),"""")"
Next
Application.EnableEvents = True
[[CODE]End Sub
J'utilise la formule de Modeste geedee mais avec -- (qui pèse 2 octets) au lieu de 1* (4 octets).
Si je teste avec c.HasFormula c'est pour que la macro ne touche pas aux formules entrées...
Si l'on utilise Evaluate ce test n'est plus nécessaire mais voyez ce qui se passe si on revalide.
Et dans ce cas le séparateur décimal à utiliser est toujours le point :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Application.EnableEvents = False
On Error Resume Next
For Each c In Intersect(Target, Range("A2:A" & Rows.Count), UsedRange) 'si entrées multiples (copier-coller)
If c <> "" Then c = Evaluate("--TEXT(" & c & ",""00\:00\.00"")")
'sur Excel 2007 et versions suivantes on peut utiliser :
'If c <> "" Then c = Evaluate("IFERROR(--TEXT(" & c & ",""00\:00\.00""),"""")")
Next
Application.EnableEvents = True
End Sub
??? je doute ???
EVALUATE utilise la syntaxe "feuille de calcul US", mais le format à utiliser reste un format local
Evaluate("TEXT(" & c & ",""00\:00\,00"")")
cependant on précisera le format à afficher via VBA :
Selection.NumberFormat = "mm:ss.00;@"
et dans ce cas c'est VBA qui se charge d'afficher le bon séparateur local !!!
va comprendre ???
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Application.EnableEvents = False
On Error Resume Next
For Each c In Intersect(Target, Range("A2:A" & Rows.Count), UsedRange) 'si entrées multiples (copier-coller)
If Not (c.HasFormula) Then
If IsNumeric(c) Then
If c >=1 And c < 10^8 Then c.Value = Evaluate("TEXT(" & c & ",""00\:00\:00\,00"")"): c.NumberFormat = "[mm]:ss.00"
End If
End If
Next
Application.EnableEvents = True
End Sub