Réponse acceptée !
Bonjour JMO,
Je ne suis pas convaincu par tes solutions... Je détaille le pourquoi.
En premier lieu, FormatNumber renvoi un type String, or si on arrondi un nombre, c'est parce qu'on fait du fait (en principe), donc dans une programmation structurée on déclare le type des variables. Et pour celles destinées aux calculs, on aura un truc du genre :
Dim V as double
OR, on ne pourra faire ensuite V=formatNumber([expression numérique STRING], .......) car il va y avoir une incompatibilité avec le typage... donc on va être obligé d'utiliser une conversion de type avec VAL ou autre CDBL... C'est donc mettre une couche supplémentaire, et tant qu'on peut éviter... ben, j'évite...
Ensuite ROUND... Normalement, cette fonction doit arrondir un nombre numérique, donc la remarque ci-dessus ne tient plus... Oui, c'est vrai. Mais, elle a un BUG !! En effet, l'arrondi de 1.25, à un chiffre donne 1.2... au lieu de 1.3.... par chance !
D'ailleurs, essaye ton code avec 1.25... et tu obtiendra deux résultats différents... dommage...
Ton code :
Sub ess()
monnombre = InputBox("Nombre à arronidr", "Chercher l'erreur", 1.25)
MsgBox "FormatNumber" & vbTab & Replace(FormatNumber(monnombre, 1), ",", ".") & vbCrLf & _
"Round" & vbTab & Replace(Round(monnombre, 1), ",", ".")
End Sub
=
A la réflexion, je propose une version améliorée de ma fonction "arrondi" :
Function Arrondi(nb, ByVal Nb_Chiffre As Integer, OptionalByVal Sens = 0.5) As Double
'Arrondi Nb à Nb_Chiffre
'Option Sens : 0.5 => au + Près | 0 => Par Défaut | 1 => Par Excès
If Not IsNumeric(nb) Then nb = Val(Replace(nb, ",", "."))
Arrondi = Int(nb * 10 ^ Nb_Chiffre + Sens) / 10 ^ Nb_Chiffre
End Function
Ma fonction a donc les avantages suivants :
- Pas de problème d'arrondi !
- Traite une expression numérique en Variant,
- Possibilité d'arrondir par défaut ou par excès. (ou autre d'ailleurs en regardant "Sens")
Amicalement,
Us.