Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Format Nombre

8 réponses
Avatar
mik
Bonjour,

j'avais cherché et même posé la question il y a quelques temps mais je n'ai
jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,

Merci de votre aide

8 réponses

Avatar
FS
Bonjour,

La seule solution semble être de passer par une macro.
Par exemple, pour mettre au format souhaité (ici avec un max de 2
décimales) la cellule B1 d'une feuille de calcul, recopie ce bout de
code dans le module de cette feuille :

'============ Private Sub Worksheet_Change(ByVal Target As Range)
If Not IsNumeric(Target.Value) Then Exit Sub
If Not Intersect(Range("B1"), Target) Is Nothing Then
If Target.Value = Int(Target.Value) Then
Target.NumberFormat = "General"
Else
Target.NumberFormat = "#.??"
End If
End If
End Sub
'============
A adapter à ton besoin.

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

mik a écrit :
Bonjour,

j'avais cherché et même posé la question il y a quelques temps mais je n'ai
jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,

Merci de votre aide


Avatar
MichDenis
Bonjour Mik,

Voici ce qui est possible de faire :

Si une cellule affiche 12 ou 12.42...
tu peux utiliser ce format de cellule :
[>12]# ##0,00;# ##0 pour obtenir ce que
tu désires pour cette cellule. Mais il faut
comprendre les limites de ce format
si dans la cellule tu as 11comme la valeur
est inférieure à 12 tu auras un format sans décimale.
au même titre que si la cellule a une valeur de 15
tu auras un format avec décimale.

Pour obtenir ce que tu désires peu importe la valeur de
la cellule, tu dois recourir au vba avec une procédure qui
pourrait ressembler à celle-ci :

Tu copies ceci dans le module feuille où l'action se déroule
et tu adaptes la plage A1:A10 pour celle de ton application.
'--------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
sss = TypeName(c.Value)
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "Date"
c.NumberFormat = "DD/MM/YYYY"
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select

Next
Application.EnableEvents = True
End If
End Sub
'--------------------------------------------------





Ce que tu cherches à faire est de retenir 2 formats de
cellule selon que le nombre affiché dans la cellule
ait des décimales ou non. Ça c'est impossible.


"mik" a écrit dans le message de groupe de discussion :

Bonjour,

j'avais cherché et même posé la question il y a quelques temps mais je n'ai
jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,

Merci de votre aide
Avatar
MichDenis
Une petite coquille dans la procédure corrigée dans
le cas où le format de la cellule où tu entres ta
donnée est au format texte

'---------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "String"
If IsNumeric(c.Value) Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
c.NumberFormat = "@"
End If
Case Is = "Date"
c.NumberFormat = "DD/MM/YYYY"
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select

Next
Application.EnableEvents = True
End If
End Sub
'---------------------------------------------




"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Mik,

Voici ce qui est possible de faire :

Si une cellule affiche 12 ou 12.42...
tu peux utiliser ce format de cellule :
[>12]# ##0,00;# ##0 pour obtenir ce que
tu désires pour cette cellule. Mais il faut
comprendre les limites de ce format
si dans la cellule tu as 11comme la valeur
est inférieure à 12 tu auras un format sans décimale.
au même titre que si la cellule a une valeur de 15
tu auras un format avec décimale.

Pour obtenir ce que tu désires peu importe la valeur de
la cellule, tu dois recourir au vba avec une procédure qui
pourrait ressembler à celle-ci :

Tu copies ceci dans le module feuille où l'action se déroule
et tu adaptes la plage A1:A10 pour celle de ton application.
'--------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
sss = TypeName(c.Value)
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "Date"
c.NumberFormat = "DD/MM/YYYY"
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select

Next
Application.EnableEvents = True
End If
End Sub
'--------------------------------------------------





Ce que tu cherches à faire est de retenir 2 formats de
cellule selon que le nombre affiché dans la cellule
ait des décimales ou non. Ça c'est impossible.


"mik" a écrit dans le message de groupe de discussion :

Bonjour,

j'avais cherché et même posé la question il y a quelques temps mais je n'ai
jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,

Merci de votre aide
Avatar
MichDenis
Correction d'une petite coquille dans le cas où la
donnée saisie se fait dans une cellule étant déjà
au format texte.

'----------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "String"
If IsNumeric(c.Value) Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
End If
Case Is = "Date"
x = c.Value
c.Clear
c.NumberFormat = "DD/MM/YYYY"
c.Value = x
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select
Next
Application.EnableEvents = True
End If
End Sub
'----------------------------------------



"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Mik,

Voici ce qui est possible de faire :

Si une cellule affiche 12 ou 12.42...
tu peux utiliser ce format de cellule :
[>12]# ##0,00;# ##0 pour obtenir ce que
tu désires pour cette cellule. Mais il faut
comprendre les limites de ce format
si dans la cellule tu as 11comme la valeur
est inférieure à 12 tu auras un format sans décimale.
au même titre que si la cellule a une valeur de 15
tu auras un format avec décimale.

Pour obtenir ce que tu désires peu importe la valeur de
la cellule, tu dois recourir au vba avec une procédure qui
pourrait ressembler à celle-ci :

Tu copies ceci dans le module feuille où l'action se déroule
et tu adaptes la plage A1:A10 pour celle de ton application.
'--------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
sss = TypeName(c.Value)
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "Date"
c.NumberFormat = "DD/MM/YYYY"
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select

Next
Application.EnableEvents = True
End If
End Sub
'--------------------------------------------------





Ce que tu cherches à faire est de retenir 2 formats de
cellule selon que le nombre affiché dans la cellule
ait des décimales ou non. Ça c'est impossible.


"mik" a écrit dans le message de groupe de discussion :

Bonjour,

j'avais cherché et même posé la question il y a quelques temps mais je n'ai
jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,

Merci de votre aide
Avatar
mik
ok par macro uniquement donc.
merci à vous 2

"MichDenis" wrote:

Correction d'une petite coquille dans le cas où la
donnée saisie se fait dans une cellule étant déjà
au format texte.

'----------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "String"
If IsNumeric(c.Value) Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
End If
Case Is = "Date"
x = c.Value
c.Clear
c.NumberFormat = "DD/MM/YYYY"
c.Value = x
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select
Next
Application.EnableEvents = True
End If
End Sub
'----------------------------------------



"MichDenis" a écrit dans le message de groupe de discussion :

Bonjour Mik,

Voici ce qui est possible de faire :

Si une cellule affiche 12 ou 12.42...
tu peux utiliser ce format de cellule :
[>12]# ##0,00;# ##0 pour obtenir ce que
tu désires pour cette cellule. Mais il faut
comprendre les limites de ce format
si dans la cellule tu as 11comme la valeur
est inférieure à 12 tu auras un format sans décimale.
au même titre que si la cellule a une valeur de 15
tu auras un format avec décimale.

Pour obtenir ce que tu désires peu importe la valeur de
la cellule, tu dois recourir au vba avec une procédure qui
pourrait ressembler à celle-ci :

Tu copies ceci dans le module feuille où l'action se déroule
et tu adaptes la plage A1:A10 pour celle de ton application.
'--------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each c In Rg
sss = TypeName(c.Value)
Select Case TypeName(c.Value)
Case Is = "Empty"
c.NumberFormat = "General"
Case Is = "Date"
c.NumberFormat = "DD/MM/YYYY"
Case Is = "Integer", "Long"
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Case Is = "Single", "Double"
If c.Value - CLng(c.Value) = 0 Then
x = c.Value
c.Clear
c.NumberFormat = "# ##0"
c.Value = x
Else
x = c.Value
c.Clear
c.NumberFormat = "# ##0.00"
c.Value = x
End If
Case Else
c.NumberFormat = "General"
End Select

Next
Application.EnableEvents = True
End If
End Sub
'--------------------------------------------------





Ce que tu cherches à faire est de retenir 2 formats de
cellule selon que le nombre affiché dans la cellule
ait des décimales ou non. Ça c'est impossible.


"mik" a écrit dans le message de groupe de discussion :

Bonjour,

j'avais cherché et même posé la question il y a quelques temps mais je n'ai
jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,

Merci de votre aide




Avatar
MichDenis
La procédure devrait plutôt se lire comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range, C As Range, Contenu As Variant
Set Rg = Intersect(Target, Range("A1:A10"))

If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each C In Rg
Contenu = Trim(C.Value)
Select Case TypeName(Contenu)
Case Is = "Empty"
C.NumberFormat = "General"
Case Is = "String"
If IsNumeric(Contenu) Then
If C.Value - CLng(C.Value) = 0 Then
C.NumberFormat = "# ##0"
C.Value = CDbl(Contenu)
Else
C.NumberFormat = "# ##0.00"
C.Value = CDbl(Contenu)
End If
End If
If IsDate(Contenu) Then
'Le format de date au choix
C.NumberFormat = "DD/MM/YYYY"
C.Value = CDate(Contenu)
End If
Case Is = "Date"
C.NumberFormat = "DD/MM/YYYY"
C.Value = CDate(Contenu)
Case Is = "Integer", "Long"
C.NumberFormat = "# ##0"
C.Value = CDbl(Contenu)
Case Is = "Single", "Double"
If C.Value - CLng(C.Value) = 0 Then
C.NumberFormat = "# ##0"
C.Value = CDbl(Contenu)
Else
C.NumberFormat = "# ##0.00"
C.Value = CDbl(Contenu)
End If
Case Else
C.NumberFormat = "General"
End Select
Next
Application.EnableEvents = True
End If
End Sub
Avatar
Modeste
Bonsour® mik avec ferveur ;o))) vous nous disiez :

j'avais cherché et même posé la question il y a quelques temps mais
je n'ai jamais trouvé:

Quel est le format à appliquer pour que si le nombre est entier il
apparaissaise comme ca:
= 12 (et non pas 12,)
Si il est décimal à 1 chiffre après la virgule il apparaisse comme ca,
= 12,5 (et non pas 12,50)
2 chiffres après la virgule
= 12,55
3 chiffres après la virgule:
= idem 2 chiffres (et non pas 12,555)

Rien trouvé de mieux que #.## mais mes entiers apparaissent avec une
virgule: 12,



=TEXTE(A1;SI(ENT(A1)¡;"0_ ";SI(ENT(10*A1)=(10*A1);"0,0_ ";"0,00")))
ou encore :
=1*TEXTE(A1;SI(ENT(A1)¡;"0_ ";SI(ENT(10*A1)=(10*A1);"0,0_ ";"0,00")))
format cellule=standard
(*) noter l'espace qui suit le caractère "_"

maintenant si tu veux un alignement sur le chiffre des unités, il va me falloir un délai....
;o)))
Avatar
Modeste
Bonsour® Modeste avec ferveur ;o))) vous nous disiez :

maintenant si tu veux un alignement sur le chiffre des unités, il va
me falloir un délai....



et voilà !!!!
=TEXTE(A15;SI(ENT(A15)¡5;"0_ _ _ ";SI(ENT(10*A15)=(10*A15);"0,0_ ";"0,00")))
format cellule : standard
police courier new
alignement à droite

(*) chaque caractère "_" est suivi d'un espace

;o)))