Arrondi Macro complémentaire NB.LETTRE.XLA

Bonjour,

Je remarque un problème avec cette merveilleuse formule.

En effet, les arrondis ne sont pas toujours exacts :

312.50

65.62(5) TVA 21%

---------------

378,13 TVAC or la formule donne trois cent septante-huit Euros douze cents

Comment corriger en sachant qu'il faut tenir compte de l'arrondi supérieur.

Merci d'avance pour votre aide.

Hello,

T'aurais un fichier exemple ?

@+

Voici :

921.xlsx (10.76 Ko)

Hello,

Un essai avec la fonction TRONQUE.

@+

221.xlsx (10.74 Ko)

Ok, merci pour ta réponse.

Mais la règle des arrondi stipule...0.5 et au-delà - on passe à l'unité supérieure...

Yes mais du coup dans la libellé tu voulais pas "douze" à la fin ?

@+

Bonsoir Marq, BAROUTE78,

Utiliser la formule ci-dessous.

=ARRONDI(montant;-0,5)

Pour un montant de 378,13 cela donnera 378

Pour un montant de 378,65 cela donnera 379

Hello à tous,

En fait j’avais rien compris à la demande my bad 😂

@+

Suite,

En fait j’avais rien compris à la demande

En fait, c'est une particularité fiscale en matière de Tva. Et d'ailleurs de toutes taxes...

Bonjour,

sans le code on va essayer d'imaginer.

En VBA Round utilise l'arrondi de banquier : les nombres décimaux se terminant par 5 sont arrondis au nombre pair le plus proche (donc des fois au-dessus, des fois en-dessous).
Sinon l'arrondi le plus proche est utilisé.
L’arrondi de banquier a pour avantage de tenter d’éliminer tout biais (les erreurs tendent à s'annuler) dans les calculs effectués sur des nombres arrondis.

Et 21% de 312.50 = 65.625
Donc arrondi à 65.62, 2 étant le chiffre pair le plus proche.
Si tu avais eu 65.635 ça aurait été arrondi à 65.64 (pair le plus proche)

Si c'est cette fonction dans le code qui est utilisée il faut utiliser la fonction feuille à la place :
application.worksheetFunction.Round(...) qui elle arrondi toujours une décimale 5 au nombre supérieur
Seulement tu vas te retrouver avec des erreurs de centimes que tu aurais grandement éliminé en gardant la fonction VBA
eric

@Eriiic, cet arrondi de banquier, vraiment intéressant du point de vue math, je ne savais pas que VBA le faisait autrement, merci

A nouveau,

@Eriiic et Bslv,

Il va falloir réviser les arguments de WSF.Round.

De plus dans ce cas précis, ce n'est pas un arrondi de banque mais un arrondi fiscal. Et dans l'hypothèse d'un contrôle fiscal une banque nationale a tout intérêt (en plus c'est sa partie) de respecter l'arrondi fiscal plutôt que bancaire dans ces diverses taxes au trésor.

Sur trois ans plus l'année en cours, le contrôleur va bien se .

Donc worksheet Function.Round(montant, -0.5), voire worksheet Function.Round(montant, 0). Dans le cas où on enverrait le montant du fichier xlsx sans passer par la fonction arrondi vers le fichier de conversion xlsm. A bien placer dans le code VBA de ce dernier.

@X Cellus,

en VBA c'est Round vs Worksheetfunction.round !

Sub test()
     MsgBox "Banque avec Round                                : " & Round(35.555, 2) & vbTab & Round(35.545, 2) & vbLf & _
            "Arrondi avec worksheetfunction.round  : " & WorksheetFunction.Round(35.555, 2) & vbTab & WorksheetFunction.Round(35.545, 2)
End Sub

Hello à tous,

J'adore ce forum, on en apprend tous les jours et sur tous les sujets

Un grand merci !

Suite,

@BsAlv,

Relire l'ensemble du fil, et notamment le message de Marq ,hier à 15h25

Mais la règle des arrondi stipule...0.5 et au-delà - on passe à l'unité supérieure.

Si, à partir de 0.5 et au delà on passe à l'unité supérieure, c'est bien la règle fiscale et non la règle bancaire qui s'applique.

On n'est donc pas dans les dixièmes ou centièmes.

@X Cellus, d'accord, les réactions d' Eriiic et moi n'ont rien à faire avec le sujet "arrondi fiscal".

Ce truc "arrondi de banque" est surprenant et d'un point de vue mathématique intéressant, d'où ce pas de côté

... .

A nouveau,

En fait la différence en VBA de Round et de WorksheetFunction.Round est que la règle bancaire est différente selon:

En méthode Anglo-Américaine (Round) l'arrondi est inférieur -> 0,125 donnera 0,12

En méthode européenne (WorksheetFunction.Round) -> 0,125 donnera 0,13.

Nos banquiers sont plus chers.

Les banques américaines étant les plus importantes ($ of course) elles sont pas à un arrondi près.

re,

pas tout à fait vrai, la série 12,125 12,135 12,145 12,155 12,165 12,175 sera arrondi selon "arrondi bancair" 12,12 12,14 12,14 12,16 12,16 12,18 ..., donc le plus proche "pair" et cela est "intéressant" quand on a des milliers de chiffres à arrondir, la moyenne de la source et la moyenne des arrondis seront plus proche

A nouveau,

Exact, valeur par valeur. Mon précédent message étant d'une portée plus générale. Ci-dessous, un court tableau avec 6 montants et les deux méthodes.

image

Avec Round, soit le total sera identique à la colonne Montant, soit il sera inférieur. (Tableau de droite)

Alors qu'avec WorkSheetFunction.Round le total sera + fort que la colonne Montant, soit inférieur, comme Round (Tableau de droite).

Sur des millions et plus de transactions économiques (bancaires ou entreprises) car ces dernières adoptent le même système.

Les opérations inter-entreprises d'achat-vente font que le mode Européen revient (à entreprise comparable) plus cher (mathématiquement) au consommateur que le mode Anglo-américain. Après, cela peut être compenser par d'autres moyens (productivité, marché...etc...). C'est juste un aparté sur ce fil.

re, oui, d'accord, nous 2, nous disons la même chose, pour toutes opérations financières, fiscales, comptables, ..., on est en Europe, donc on le fait comme il faut, l'arrondi normal, pas de discussion.

Mais moi, je fais de temps en temps des simulations (=avec beaucoup de chiffres aléatoires). A ce moment, l'arrondi bancaire (sans écart, partie gauche de votre tableau) est mieux, point de vue mathématique ! Mais "C'est juste un aparté sur ce fil."

Rechercher des sujets similaires à "arrondi macro complementaire lettre xla"