XL 2019 Arrondi bancaire

Kilgrave

XLDnaute Nouveau
Bonjour,

Je souhaite utiliser l'arrondi bancaire sur ma feuille de calculs Excel (ou Google Sheets).
Pour ceux, qui ne connaissent pas, je copie-colle Wikipedia:

Si quatre (ou un chiffre inférieur) est le chiffre qui suit la décimale à laquelle le nombre doit être arrondi, alors la décimale reste inchangée. Alors que si le chiffre suivant la décimale est six ou plus, la décimale est augmentée d'une unité. Enfin si le chiffre suivant est le chiffre cinq lui-même suivi par des chiffres différents de zéro, alors la décimale sera augmentée d'une unité, tandis que si cinq n'est suivi d'aucun chiffre (ou que par des zéros) alors la décimale est augmentée d'une unité lorsqu'elle est impaire et reste inchangée sinon. Cette méthode est parfois appelée « arrondi au chiffre pair » et est employée afin d'éliminer le biais qui surviendrait en arrondissant à chaque fois par excès les nombres dont le dernier chiffre est cinq.

Exemples :

3,046 arrondis aux centièmes devient 3,05 (parce que le chiffre suivant (6) est supérieur ou égal à 6) ;
3,043 arrondis aux centièmes devient 3,04 (parce que le chiffre suivant (3) est inférieur ou égal à 4) ;
3,045 arrondis aux centièmes devient 3,04 (parce que le dernier chiffre est 5, et le chiffre précédent (4) est pair) ;
3,015 arrondis aux centièmes devient 3,02 (parce que le dernier chiffre est 5, et le chiffre précédent (1) est impair).
Cette méthode est aussi nommée « arrondi bancaire » et est celle utilisée par défaut dans les micro-processeurs et le calcul numérique (norme IEEE 754).

Visiblement, cet arrondi n'est pas directement implémentée dans Excel donc j'essaie de l'implémenter moi-même (sans VBA car je n'y connais rien et j'aimerais que cela fonctionne aussi sur Google Sheets). J'ai donc tapé la formule suivante:
=SI(MOD(B1*100;1)=0,5;ARRONDI.AU.MULTIPLE(B1;0,02);ARRONDI(B1;2))
B1 contenant la valeur que je veux arrondir au centime avec cet arrondi bancaire.
Cela fonctionne bien puisque pour 346,045 cela me donne 346,04 et pour 346,055 cela me donne 346,06.
Donc j'étais plutôt satisfait. Sauf qu'en fait, B1 est le résultat d'un calcul, en l'occurence j'ai A1=2768,36/36*0,75 et B1=A1*6. Dans B1, j'obtiens bien 346,045(qui est la valeur exacte, il n'y a pas d'autre décimale) mais là, la formule me l'arrondit à 346,05, comme si le test ne fonctionnait plus. Du coup, je fait afficher dans la cellule D1=MOD(B1*100;1) et cela me donne bien 0,5.
C'est à n'y rien comprendre et je suis dessus depuis hier.
Je joins un petit fichier très simplifié pour illustrer mon propos.
A1 contient le calcul 2768,36/36*0,75, B1 contient la formule A1*6, C1 contient l'arrondi bancaire de B1, B2 contient la valeur 346,045 tapée directement et C2 l'arrondi bancaire de B2.
C1 me donne 346,05 au lieu de 346,04. C2 me donne bien 346,04. D1 affiche MOD(B1*100;1) , qui donne bien 0,5.

Toute aide sera un grand soulagement, donc je vous remercie par avance.
 

Pièces jointes

  • Essai Arrondi bancaire.xlsx
    8.7 KB · Affichages: 21
Solution
Si ça devait ne pas toujours donner le résultat escompté compte tenu de ce que les valeurs à 3 décimales autres que 125, 375, 625 et 875 ne peuvent pas exister avec exactitude, vous pourriez aussi essayer :
VB:
Function ArrondiB(ByVal V)
   If TypeOf V Is Range Then V = V.Value
   ArrondiB = Round(CCur(V), 2)
   End Function

Dranreb

XLDnaute Barbatruc
Cette formule pourrait ne pas non plus toujours donner satisfaction parce que pour une valeur affichée de la forme …#,##5, MOD(B1*100;1) n'est pas forcément parfaitement = 0,5
Alors je vous suggère de vous reporter à mes propositions du #26 et du #28
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Pour en savoir plus et faire des essais sur les valeurs de cellules réellement enregistrées, reportez vous à ce classeur.
J'ai mis en tête des deux tableaux les valeurs que j'ai évoquées.
 

Pièces jointes

  • ValeursExcelVsVBA.xlsm
    86.8 KB · Affichages: 7

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri