Fonction arrondi VBA à 2 digits [Fermé]

Signaler
Messages postés
13
Date d'inscription
lundi 17 novembre 2014
Statut
Membre
Dernière intervention
27 février 2015
-
Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
-
Bonjour,
J'aimerais créer une fonction qui arrondi une valeur à 2 digit , par exemple :
pour 2.354 il me donne : 2.3
pour 0.002365 il me donne : 0.0023
Si quelqu'un à une idée d'une solution je suis preneur.
Merci par avance.

Bonne journée


3 réponses

Messages postés
15652
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 mars 2021
674
Bonjour,

tout est incohérent dans ton message, sit tu arrondies à 2 digits alors il y a 2 chiffres dérrière la virgule.

Dans ton premier exemple il y en a 1 et dans le second 4.

Deplus tes deux exemples montrent, non un arrondi ou le n+1ieme digit vaut 5 ou plus alors l'arrondis est au supérieur:
2.354 => 2.4
0.002365 => 0.0024...

Ce que tu montres c'est tronquer.

DOnc formule bien ta question pour avoir une réponse qui te convienne.
En attendant tu peux regarder Round() et Trunc(). (Sais plus si elles existent en VBA)

Messages postés
13
Date d'inscription
lundi 17 novembre 2014
Statut
Membre
Dernière intervention
27 février 2015

oui en effet ma question n'est pas bien poser, je m'en excuse.
En fait il faudrait que je crée une fonction qui me donne un nombre avec seulement 2 chiffre significatif.
Donc pour : 2.354 => 2.4
0.002365 => 0.0024

Voila j'espere que ma question est bien formulée
Merci par avance
Messages postés
15652
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
5 mars 2021
674
Bon déjà on parle bien d'arrondi.
Maintenant, 2 chiffres significatifs ça veut dire 2 chiffres derrière la virgule.
Ce n'est toujours pas ce que montrent tes deux exemples.

On va essayer.....

Function ArrondiSimdup(Valeur As Double)
    Dim posPoint As Integer
    Dim nbrDecimales As Integer
    Dim val As String
    val = CStr(Valeur) 'on passe en string sinon len() ne donne pas le bon résultat

    posPoint = InStr(val, ".") 'à quel carractère se trouve le point
    nbrDecimales = Len(val) - posPoint 'nombre de chiffres derrière le point

    ArrondiSimdup = Round(Valeur, nbrDecimales - 2) 'arrondi à 2 chiffres de moins qu'existant
End Function


Par contre je n'ai pas traité le cas ou un nombre a moins de 2 décimlaes
Messages postés
1941
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
23 août 2020
144
Bonjour,

La notation ingénieur te permet d'avoir exactement deux chiffres significatifs, mais il y a les puissances de 10 qui apparaissent.
Mais ça m'a donné l'idée d'utiliser le log en base 10...

Sans VBA et par formule, en Excel anglais, ça donne :
=ROUND(A1/POWER(10;INT(LOG10(A1)));1)*POWER(10;INT(LOG10(A1)))
Je pense que les deux seules fonctions de base à traduire sont :
ROUND : ARRONDI
POWER : PUISSANCE

A+