C'est une voie possible. Mais le champ d'application est beaucoup plus restreint. Voir le classeur joint testant les fonctions suivantes :Re,
Pour Roger :
Pourquoi ne pas additionner (au lieu de multiplier) un petit reliquat :
1+0.1^9 ou 1+1/9^9
Le nombre de départ n'a plus aucune importance.
Function hoerwind(x#)
Application.Volatile
hoerwind = Round(1 / 9 ^ 9 + x, 1)
End Function
Function Roger2327(x#)
Application.Volatile
Roger2327 = Round(1.000000000001 * x, 1)
End Function
Function ArrondiSup1(cel As Range)
ArrondiSup1 = WorksheetFunction.RoundUp(cel, 1)
End Function
Il est certain que cette solution est la plus correcte, car la fonction d'Excel est correcte. Le problème est que notre ami veut utiliser la fonction d'arrondi de VisualBasic, qui est défectueuse (et que le Bill's Gang ferait bien de nous corriger au lieu de sortir à n'en plus finir des versions plus ou moins bien maquillées du même logiciel).Re
Excusez moi, mais j'avais mis machinalement le fichier en Xl2007 (c'est vrai qu'on ne pense pas toujours à ceux qui sont sous Xl2003 ).
Donc je remets une solution avec Roundup sur le fichier de Roger.
Ce qui donnerait pour une fonction:
Code:Function ArrondiSup1(cel As Range) ArrondiSup1 = WorksheetFunction.RoundUp(cel, 1) End Function
Pas tout à fait.(…)
Pour moi la solution de Roger2327 fait la même chose que mon addition de 0.004 !?
(…)
Function KenDev#(x#) 'Fonction test de KenDev rationalisée.
Dim z%
Application.Volatile 'Facultatif selon l'usage.
z = InStr(1, CStr(x), ",")
If Right(Left(CStr(-x * (z <> 0)), z + 2), 1) = "5" And Len(CStr(x)) > z + 1 Then
KenDev = Int(10 * x - (x > 0)) / 10
Else
KenDev = Round(x, 1)
End If
End Function