OVH Cloud OVH Cloud

Arrondi a trois chiffres significatifs

12 réponses
Avatar
voir.le
bonjour,

J'ai du savoir le faire dans une vie antérieure, mais impossible de le
retrouver. Comment, avec des formules de calcul ou des fonctions, faire
un arrondi à trois chiffres significatifs, par exemple :

10,78594 -> 10,8
9,567842 -> 9,57
0,548215 -> 0,548

Excellement vôtre.

--
Yves Benisty

2 réponses

1 2
Avatar
Michel Gaboly
Re,

Voici un complément qui devrait te satisfaire je pense ;-)))

On revient à ma formule initiale

=ARRONDI(A10;-ENT(LOG(A10)) + 2)

On nomme "Arrondis3Décis" la plage de cellule(s) contenant la ou les
valeurs à arrondir (Insertion, Noms, Définir...).

On utilise l'événement Change pour adapter le format au contenu :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim c As Range, Plage As Range, i As Integer, j As Integer, s As String
On Error Resume Next
Set Plage = Intersect(Target.DirectDependents, Range("Arrondis3Décis"))
If Not Plage Is Nothing Then
For Each c In Plage
' NB - En VBA, Log donne le log népérien
i = -Int(Log(c) / Log(10)) + 2
If i > 0 Then
For j = i To 1 Step -1
s = s & 0
Next j
s = "0." & s
Else
s = "#,##0"
End If
Debug.Print s
c.NumberFormat = s
Debug.Print c.Address(0, 0) & " " & i
Next c
End If
On Error GoTo 0
End Sub


Avec cela, le format est numérique, et tu as toujours 3 chiffres significatifs.

NB - Cela ne fonctionne qu'avec les nombres positifs, à cause du log, mais tu
nous a dit ne pas avoir de nombre négatifs.

Pour que cela marche avec zéro, il faut remplacer 0 par Epsilon, ce qui peut se
faire ainsi :

=ARRONDI(A13;-ENT(LOG(A13 + 10^-99)) + 2)

Pour la valeur 0, le formatage n'est pas automatique. Une adaptation de la macro
serait nécessaire ; ce n'est pas compliqué, un test suffit.



Re,

=CNUM(CTXT(A13;SI(A13<1;4;3)-NBCAR(ENT(A13))))

suffit pour la convertir en numérique mais dans ce cas on perd le(s) dernier(s)
chiffre(s) s'il s'agit de 0.

Voici une variante de ma formule qui affiche toujours 3 chiffres significatifs, ET
fonctionne pour tout nombre positif ;-))

=CTXT(ARRONDI(A10;-ENT(LOG(A10)) + 2);MAX(0;-ENT(LOG(A10)) + 2))


Voici une formule plus simple ;-))
=ARRONDI(A10;-ENT(LOG(A10)) + 2)

Le fait d'utiliser un LOG() évite d'avoir à traiter un cas
particulier pour les valeurs inférieures à 1 ;-)))



Dorysse wrote:
oui, mais là on se trouve devant un autre cas particulier :
si la valeur en A10 est 7,1035455, la formule nous retourne "7,1", donc plus
que deux chiffres significatifs.
Pour conserver 3 chiffres (dans les exemple présent, pour obtenir "7,10" il
faut une autre formule qui marche dans tous les cas :

SI(A10<1; CTXT(A10;4-NBCAR(ENT(A10)));CTXT(A10;3-NBCAR(ENT(A10))))


Effectivement, c'est un problème important. Je pense que je vais garder
cette solution, même si elle présente un défaut (comment, qui a dit que
j'exagère ;-), c'est que le résultat est rendu sous forme de texte.

--
Yves Benisty


--
Cordialement,

Michel Gaboly
http://www.gaboly.com


--
Cordialement,

Michel Gaboly
http://www.gaboly.com




Avatar
voir.le
Yves Benisty :
le résultat est rendu sous forme de texte.


Michel Gaboly wrote:

=CNUM(CTXT(A13;SI(A13<1;4;3)-NBCAR(ENT(A13))))

suffit pour la convertir en numérique mais dans ce cas on perd le(s)
dernier(s) chiffre(s) s'il s'agit de 0.


Oui, c'est bien là le problème. Je vais réfléchir à une fonction
personnalisée, ou garder le texte. En fait, je ne compte pas réutiliser
les nombres, donc le texte me convient.

Ça montre que des problèmes qui semblent avoir l'air d'être simples en
apparence peuvent ne pas être finalement aussi simples qu'ils en ont
l'air d'être simples ;-)

Voici une variante de ma formule qui affiche toujours 3 chiffres
significatifs, ET fonctionne pour tout nombre positif ;-))

=CTXT(ARRONDI(A10;-ENT(LOG(A10)) + 2);MAX(0;-ENT(LOG(A10)) + 2))


Merci encore.

--
Yves Benisty

1 2