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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <garnote3@ENLEVER.videotron.ca> a écrit dans le message de news: %23cD%2368XRHHA.4844@TK2MSFTNGP03.phx.gbl...
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
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
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
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" <garnote3@ENLEVER.videotron.ca> a écrit dans le message de news:
%23cD%2368XRHHA.4844@TK2MSFTNGP03.phx.gbl...
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
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
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
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" <michdenis@hotmail.com> a écrit dans le message de news: OCoTTUYRHHA.5032@TK2MSFTNGP03.phx.gbl...
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" <garnote3@ENLEVER.videotron.ca> a écrit dans le message de news:
%23cD%2368XRHHA.4844@TK2MSFTNGP03.phx.gbl...
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
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
garnote
Il est temps de faire dodo !
Sub Franchement() T = Replace([C4], ",", ".") [C5] = Evaluate(T) End Sub
Il est temps de faire dodo !
Sub Franchement()
T = Replace([C4], ",", ".")
[C5] = Evaluate(T)
End Sub