XL 2013 format de cellule ou pas ?

starz

XLDnaute Occasionnel
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 ?

merci pour votre aide
 

piga25

XLDnaute Barbatruc
Bonjour,

Pour saisir plus vite les heures dans Excel

( 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
 

job75

XLDnaute Barbatruc
Bonjour starz, piga25, le forum,

La saisie étant en A1, la formule en B1 :
Code:
=TEXTE(A1/100;"00\:00,00")
renvoie le bon résultat sous forme de texte.

On peut convertir ce résultat en nombre avec :
Code:
=--TEXTE(A1/100;"00\:00,00")
et mettre B1 au format mm:ss,00

Bonne journée.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Bonjour starz, piga25, le forum,

La saisie étant en A1, la formule en B1 :
Code:
=TEXTE(A1/100;"00\:00,00")
renvoie le bon résultat sous forme de texte.

On peut convertir ce résultat en nombre avec :
Code:
=--TEXTE(A1/100;"00\:00,00")
et mettre B1 au format mm:ss,00

Bonne journée.
:rolleyes:pourquoi pas directement :
Code:
=1*TEXTE(A1;"00\:00\,00")
 

job75

XLDnaute Barbatruc
Bonjour le fil, le forum,

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).

Fichiers joints pour toutes versions Excel.

Bonne journée.
 

Pièces jointes

  • Minutes(1).xls
    70.5 KB · Affichages: 19
  • Minutes(1).xlsm
    20.9 KB · Affichages: 21

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Bonjour le fil, le forum,

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).

Fichiers joints pour toutes versions Excel.

Bonne journée.
:rolleyes: tssss... tsssss....
histoire d'octets en mémoire ...:p
il existe déjà une variable qui renseigne sur le séparateur décimal
Code:
 If c <> "" And Not c.HasFormula Then c = Evaluate("=--TEXT(" & c & ",""00\:00\" & Application.DecimalSeparator & "00"")")
 

job75

XLDnaute Barbatruc
Re Modeste geedee,

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
Fichiers (2).

A+
 

Pièces jointes

  • Minutes(2).xls
    69 KB · Affichages: 19
  • Minutes(2).xlsm
    20.7 KB · Affichages: 20

Modeste geedee

XLDnaute Barbatruc
Bonsour®
Re Modeste geedee,

Si je teste avec c.HasFormula c'est pour que la macro ne touche pas aux formules entrées...
Oui OK entièrement d'accord.;)
Si l'on utilise Evaluate ce test n'est plus nécessaire mais voyez ce qui se passe si on revalide.
c'est parceque la valeur n'est pas conforme à la saisie attendue :
dans une cellule ma saisie 023015 sous cette forme :
02:30,15 et ça de manière automatique ?

Job75 à dit:
Et dans ce cas le séparateur décimal à utiliser est toujours le point :
??? je doute ???:oops:
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 ???:po_O:rolleyes:

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
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
277

Statistiques des forums

Discussions
289 526
Messages
1 900 875
Membres
172 894
dernier inscrit
Moroloul
Haut Bas