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

Format de nombre

4 réponses
Avatar
garnote
Bonsoir vous,

Si j'entre la formule =12,345-12,3168 dans une cellule
formatée "Standard", j'obtiens 0,029.
Je voudrais obtenir la même chose à partir d'une chaîne
de texte mais je n'y arrive pas !
Je ne veux pas imposer un nombre de décimales fixe.
Je veux obtenir le même résultat qu'avec une formule de feuille de calcul.
Comment faire ?
La chaîne t peut contenir des nombres entiers ou des nombres décimaux
n'ayant pas forcément le même nombre de décimales

Sub Tentative()
Dim t As String
Dim r As Double
t = "12.345-12.316"
r = Evaluate(t)
s = Format(r, "Standard")
MsgBox r & vbNewLine & s
End Sub

Merci

4 réponses

Avatar
garnote
Si j'entre la formule ,345-12,3168 dans une cellule
Plutôt :

Si j'entre la formule ,345-12,316 dans une cellule ...

Serge

"garnote" a écrit dans le message de news: %23cD%
Bonsoir vous,

formatée "Standard", j'obtiens 0,029.
Je voudrais obtenir la même chose à partir d'une chaîne
de texte mais je n'y arrive pas !
Je ne veux pas imposer un nombre de décimales fixe.
Je veux obtenir le même résultat qu'avec une formule de feuille de calcul.
Comment faire ?
La chaîne t peut contenir des nombres entiers ou des nombres décimaux
n'ayant pas forcément le même nombre de décimales

Sub Tentative()
Dim t As String
Dim r As Double
t = "12.345-12.316"
r = Evaluate(t)
s = Format(r, "Standard")
MsgBox r & vbNewLine & s
End Sub

Merci



Avatar
MichDenis
Dim A As Double
Dim T As String
T = "12.345-12.316"
A = Format(Evaluate(T), "0.000")

Il ne faut pas se méprendre avec le formatage d'une cellule
et la fonction "Format" qui elle s'applique à des données
en vba seulement. Elle n'a pas d'impact sur la manière de
formater une cellule. Pour une cellule, on doit utiliser :
Range("A1").NumberFormat = .... (Anglais)
OU
Range("A1").NumberFormatLocal = .... (Français) -> selon les options régionales)



"garnote" a écrit dans le message de news:
%23cD%
Bonsoir vous,

Si j'entre la formule ,345-12,3168 dans une cellule
formatée "Standard", j'obtiens 0,029.
Je voudrais obtenir la même chose à partir d'une chaîne
de texte mais je n'y arrive pas !
Je ne veux pas imposer un nombre de décimales fixe.
Je veux obtenir le même résultat qu'avec une formule de feuille de calcul.
Comment faire ?
La chaîne t peut contenir des nombres entiers ou des nombres décimaux
n'ayant pas forcément le même nombre de décimales

Sub Tentative()
Dim t As String
Dim r As Double
t = "12.345-12.316"
r = Evaluate(t)
s = Format(r, "Standard")
MsgBox r & vbNewLine & s
End Sub

Merci
Avatar
garnote
Salut Denis,

Oui mais je ne veux pas un nombre de décimales fixe.
Ma chaîne est définie à partir d'une expression entrée en A1
(formatée texte) par l'utilisateur. Elle peut contenir des additions et/ou
des soustractions. Je veux que le résultat contienne autant
de décimales que le nombre qui en a le plus.
Par exemple, si l'utilisateur entre 0,8+12,98+12,987-34,987654+12
en A1, je veux que le résultat contienne 6 décimales.
Bien sûr la formule
=0,8+12,98+12,987-34,987654+12
entrée dans une cellule formatée "Standard" donne le même résultat,
mais je dois obtenir ça par macro pour mon projet.

Suis-je obligé de faire cet immense détour ?
Doit y avoir quelque chose de plus élégant, non ?

Sub Torture()
On Error Resume Next
Dim A As Double
Dim T As String
Dim no As String
Dim nd As String
T = Replace([A1], ",", ".")
s1 = Split(T, "+")
s2 = Split(T, "-")
maxi = WorksheetFunction.Max(UBound(s1), UBound(s2))
For i = 0 To maxi
n1 = InStr(1, s1(i), ".")
L1 = Len(Mid(s1(i), n1 + 1, 15))
n2 = InStr(1, s2(i), ".")
L2 = Len(Mid(s2(i), n1 + 1, 15))
L = WorksheetFunction.Max(L, L1, L2)
Next i
For j = 1 To L
no = no & "0"
Next j
nd = "0." & no
A = Format(Evaluate(T), nd)
MsgBox A
End Sub

Serge


"MichDenis" a écrit dans le message de news:
Dim A As Double
Dim T As String
T = "12.345-12.316"
A = Format(Evaluate(T), "0.000")

Il ne faut pas se méprendre avec le formatage d'une cellule
et la fonction "Format" qui elle s'applique à des données
en vba seulement. Elle n'a pas d'impact sur la manière de
formater une cellule. Pour une cellule, on doit utiliser :
Range("A1").NumberFormat = .... (Anglais)
OU
Range("A1").NumberFormatLocal = .... (Français) -> selon les options régionales)



"garnote" a écrit dans le message de news:
%23cD%
Bonsoir vous,

Si j'entre la formule ,345-12,3168 dans une cellule
formatée "Standard", j'obtiens 0,029.
Je voudrais obtenir la même chose à partir d'une chaîne
de texte mais je n'y arrive pas !
Je ne veux pas imposer un nombre de décimales fixe.
Je veux obtenir le même résultat qu'avec une formule de feuille de calcul.
Comment faire ?
La chaîne t peut contenir des nombres entiers ou des nombres décimaux
n'ayant pas forcément le même nombre de décimales

Sub Tentative()
Dim t As String
Dim r As Double
t = "12.345-12.316"
r = Evaluate(t)
s = Format(r, "Standard")
MsgBox r & vbNewLine & s
End Sub

Merci





Avatar
garnote
Il est temps de faire dodo !

Sub Franchement()
T = Replace([C4], ",", ".")
[C5] = Evaluate(T)
End Sub