Problème d'arrondi (arrondi au chiffre inférieur)

beegees

XLDnaute Occasionnel
Bonsoir tout le monde,

J'ai une cellule qui contient 76.45.

Un round(76.45,1) me donne 76.4

J'aimerai obtenir 76.5, comment puis-je faire ?

Merci d'avance pour l'aide.
 

ROGER2327

XLDnaute Barbatruc
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Re…
En multipliant un nombre (non nul) par 1,000000000001 on en augmente légèrement sa valeur absolue. C'est suffisant pour corriger le vice de fabrication de la fonction Round(). Il y a évidemment une limite à l'exercice : les nombres à traiter ne doivent pas être trop grands en valeur absolue.


Exemples :
  1. x = 0,45 ; x * 1,000000000001 = 0,45000000000045
  2. y = 100000000000.45 ; y * 1,000000000001 = 100000000000,55
Dans le premier cas les arrondis à 1, 2, 3 chiffres sont corrects :
0,4 ; 0,45 ; 0,450.
Mais pas dans le second :
100000000000,6 ; 100000000000,55 ; 100000000000,550.
(On attend 100000000000,5 ; 100000000000,45 ; 100000000000,450.)
ROGER2327
#5053


Samedi 14 Pédale 138 (Sabbat, V)
18 Ventôse An CCXIX
2011-W10-2T09:39:48Z
 

ROGER2327

XLDnaute Barbatruc
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Re…
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.
C'est une voie possible. Mais le champ d'application est beaucoup plus restreint. Voir le classeur joint testant les fonctions suivantes :
VB:
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
ROGER2327
#5055


Samedi 14 Pédale 138 (Sabbat, V)
18 Ventôse An CCXIX
2011-W10-2T10:58:16Z
 

Pièces jointes

  • Temp.xls
    22.5 KB · Affichages: 37
  • Temp.xls
    22.5 KB · Affichages: 38
  • Temp.xls
    22.5 KB · Affichages: 39

MJ13

XLDnaute Barbatruc
Re : Problème d'arrondi (arrondi au chiffre inférieur)

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 :eek:).

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
 

Pièces jointes

  • RoundUp2.xls
    37 KB · Affichages: 35
Dernière édition:

KenDev

XLDnaute Impliqué
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Bonjour à tous,

N'ayant pas peur de surenchérir dans le moche (voir mon dernier post) une solution que j'intègre au classeur de Roger et fonctionnant donc sur ces valeurs. Cordialement

KD

Edit : je n'avais pas rafraichi l'écran avant de poster, la fonction de MJ13 est plus élégante, sans aucun doute :)
 

Pièces jointes

  • Temp.xls
    39 KB · Affichages: 32
  • Temp.xls
    39 KB · Affichages: 32
  • Temp.xls
    39 KB · Affichages: 29
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Re,

Pour moi la solution de Roger2327 fait la même chose que mon addition de 0.004 !?
mais bon, peut-être que je me trompe ;)

a+
 

ROGER2327

XLDnaute Barbatruc
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Re...
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 :eek:).

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
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).​
ROGER2327
#5056


Samedi 14 Pédale 138 (Sabbat, V)
18 Ventôse An CCXIX
2011-W10-2T13:17:49Z
 

ROGER2327

XLDnaute Barbatruc
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Re…
(…)
Pour moi la solution de Roger2327 fait la même chose que mon addition de 0.004 !?
(…)
Pas tout à fait.​
ROGER2327
#5057


Samedi 14 Pédale 138 (Sabbat, V)
18 Ventôse An CCXIX
2011-W10-2T13:39:37Z
 

Pièces jointes

  • Temp.xls
    40 KB · Affichages: 36
  • Temp.xls
    40 KB · Affichages: 44
  • Temp.xls
    40 KB · Affichages: 39

ROGER2327

XLDnaute Barbatruc
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Suite…
La solution de KenDev est apparemment toujours correcte. Elle est d'autant plus intéressante qu'on peut, me semble-t-il, la simplifier un peu :
VB:
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
J'ai, comme d'habitude, fait d'assez nombreux tests, mais je n'ai évidemment pas épuisé tous les cas. À tester, donc…​
ROGER2327
#5058


Samedi 14 Pédale 138 (Sabbat, V)
18 Ventôse An CCXIX
2011-W10-2T16:59:53Z
 

KenDev

XLDnaute Impliqué
Re : Problème d'arrondi (arrondi au chiffre inférieur)

Bonsoir à tous,

@Roger: Merci Roger pour l'euphémisme... :rolleyes: Et surtout pour le code. J'avais conscience que j'aurai pu l'écrire en moins de lignes mais je n'imaginais pas pouvoir passer de 33 lignes à 7 (dont une facultative). Ce code va probablement m'être très profitable.

Cordialement

KD
 

Discussions similaires

Réponses
4
Affichages
194
Réponses
10
Affichages
422

Statistiques des forums

Discussions
312 772
Messages
2 091 977
Membres
105 135
dernier inscrit
DanielM69