Arrondi

Bonjour,

Je souhaiterais savoir s'il est possible d'arrondir en 3 positions: inférieur, milieu et supérieur à 2 chiffres après la virgule :

exemple:

14,364 = 14.35
14,405 = 14.40
14,719 = 14,72

Merci par avance!!!

5 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Plusieurs échanges portent sur l'arrondi à deux chiffres après la virgule avec des modes inférieur, milieu et supérieur et sur la gestion du séparateur décimal sous Excel. Des propositions de solutions reposent sur une fonction VBA ArrNbDec qui prend Valeur et Decimales et ajuste l'arrondi selon le chiffre suivant la partie décimale. D'autres échanges abordent la gestion du séparateur décimal via Separ et testent plusieurs variantes, incluant des tests pour 0,5 et des cas à 3, 4 ou 5 chiffres après la virgule. En dernier lieu, des retours indiquent que la méthode peut fonctionner dans tous les scénarios lorsqu’elle est testée largement et sauvegardée dans un classeur Excel prenant en charge les macros.

Bobot (l’IA à votre service)
  1. Bonjour,
    Clic droit sur la cellule, puis format de la cellule et tu choisis le nombre de chiffres que tu veux après la virgule

    Même chose avec les touches <0,00 ou 0,00> dans le ruban, rubrique nombre
    1. Modérateur
      Bonjour,

      Les formules excel, pour arrondir sont :
      =ARRONDI
      =ARRONDI.INF
      =ARRONDI.SUP

      Tu dois leur fournir 2 arguments : le montant à arrondir et le nombre de chiffres après la virgule.

      Exemple :
      =ARRONDI(14,364;2) va te donner 14,36

      Après, Excel possède ses règles (qui sont issues des maths). Ainsi 14,405, en arrondi simple, sera arrondi au chiffre supérieur, soit 14,41. Pour obtenir 14,40, il conviendra d'utiliser ARRONDI.INF.
      1. Contributeur
        Bonjour à tous,

        pijaku, je pense que tu voulais dire Ainsi 14,45, en arrondi simple, sera arrondi au chiffre supérieur, et non 14.405.
        eric
      2. Modérateur
        Salut Eriiic,

        Comment va?

        non non, je voulais bien dire 14,405. Il est question ici d'arrondis au centième. Soit :
        =ARRONDI.INF(14,405;2) => 14,40 (afiché par excel 14,4)
        =ARRONDI(14,405;2) => 14,41
        =ARRONDI.SUP(14,405;2) => 14,41

        Un p'tit café peut être???
        ;-)
      3. Contributeur
        Un p'tit café peut être???
        ah ben oui, je veux bien :-)
        eric
      4. Y-a-t-il une possibilité de faire avec une fonction SI?
        par exemple:
        =SI(14.364;2) le resultat = 14.35 (dans ce cas le resultat est arrondi inférieur)
        =SI(14.405;2) le resultat = 14.40 (il faudrait que le resultat soit tranquer avec cette condition
        =SI(14.719;2) le résultat = 14.72 (dans ce cas le résultat est arrondi suppérieur)

        Peut-ont mettre ces conditions dans une fonctions SI, est qu'est(ce que cela donnerais.

        Merci
    2. Merci à tous,

      Voyez vous, mon patron veut que je trouve une formule unique pour les arrondi...
      J'ai bien essayé de chercher avant de poser la question sur le forum...

      Comment trouver une formule unique pour 3 type d'arrondi alors qu'on ne peut pas changer la règles des maths???

      reponse????
      1. Modérateur
        Comment trouver une formule unique pour 3 type d'arrondi alors qu'on ne peut pas changer la règles des maths???

        reponse????

        En créant une fonction personnalisée.
        Je me penche sur ton cas et reviens tout à l'heure.
      2. Merci
    3. Modérateur
      Donc, une fonction personnalisée disais-je...

      Mise en place :
      - ouvrir le classeur,
      - taper ALT+F11
      - Insertion/Module
      - copier-coller ce code dans le module ainsi obtenu :

      Function MonPatronAimePasLesMaths(ByVal Valeur, ByVal Decimales)
      If Right(Valeur.Value, 1) < 5 Then
          'Merci à Patrice 33740 et Lermitte222
              'ICI : https://www.commentcamarche.net/faq/29243-vba-vb6-les-fonctions-d-arrondi
          MonPatronAimePasLesMaths = Int(Valeur.Value * 10 ^ Decimales - 1 / 2) / 10 ^ Decimales
      ElseIf Right(Valeur.Value, 1) > 5 Then
          MonPatronAimePasLesMaths = CDbl(Round(Valeur.Value, Decimales))
      Else
          MonPatronAimePasLesMaths = CDbl(Left(Valeur.Value, Len(Valeur.Value) - 1))
      End If
      End Function

      - fermer la fenêtre Visual Basic Editor

      Utilisation :

      - en cellule A1 (par exemple) saisir : 14,365
      - en A2 (par exemple), saisir la formule : =MonPatronAimePasLesMaths(A1;2)

      NB : Vous pouvez, à terme, changer le nom de cette fonction, bien entendu ;-)
      1. Modérateur
        Pardon, erreur dans mes copié-collé....
        Utilisez ce code:
        Function arr(ByVal Valeur, ByVal Decimales)
        If Right(Valeur.Value, 1) < 5 Then
            arr = Int(Valeur.Value * 10 ^ Decimales) / 10 ^ Decimales
        ElseIf Right(Valeur.Value, 1) > 5 Then
            arr = CDbl(Round(Valeur.Value, Decimales))
        Else
            arr = CDbl(Left(Valeur.Value, Len(Valeur.Value) - 1))
        End If
        End Function


        et donc, dans la feuille, cette fonction :
        =arr(A1;2)
      2. Merci pour votre aide, j'aurais encore une petite question...
        je doit inclure un calcul sur un pourcentage dans ma formule exemple :
        =arr(N*n%;2)
        En français sa donne ça : exemple :
        Remise=(MontantbrutHT*-0.05;2)
        Cela doit me donner le résultat de la remise en négatif exemple -32,513€
        Et suivant le 3eme chiffre, il faut l'arrondi adequat, d'ou la formule que vous m'avez donnée.
      3. j'espere avoir été clair dans mes explications.
      4. Modérateur
        En A1 : 18.32*(-0.05) [MontantBrutHT*Taux)
        En A2 : =arr(A1;2)

        Non???
      5. pas exactement....
        En A1 : =arr(18.32*(-0.05);2)
    4. Modérateur
      Salut,
      C'est normal que cela ne marche pas tous le temps?
      Ben oui. Je suis parti du principe que tu cherchais à arrondir systématiquement un nombre qui possède trois chiffres après la virgule. Ma fonction ne prenait pas en compte les autres cas.
      Celle-ci le devrait...

      Peux tu, s'il te plait, la tester dans tous les cas possibles et imaginables?
      En effet, ce genre de petite fonction peut être utile à d'autres.
      Merci d'avance de ton retour.

      Function ArrNbDec(ByVal Valeur, ByVal Decimales)
      Dim NbDroite As Byte, Separ
      
      Separ = Application.International(xlDecimalSeparator)
      If Len(Valeur) - InStr(Valeur, Separ) > Decimales Then
          NbDroite = Val(Mid(Valeur, InStr(Valeur, Separ) + Decimales + 1, 1))
      Else
          NbDroite = Right(Valeur, 1)
      End If
      If NbDroite < 5 Then
          ArrNbDec = Int(Valeur * 10 ^ Decimales) / 10 ^ Decimales
      ElseIf NbDroite > 5 Then
          ArrNbDec = CDbl(Round(Valeur, Decimales))
      Else
          ArrNbDec = CDbl(Left(Valeur, InStr(Valeur, Separ) + Decimales))
      End If
      End Function

      1. Contributeur
        Bonjour,

        728.06*(-0.180)=-13.11 ???
        Tu travailles en quelle base ?
        Et pourquoi 14,364 devrait retourner 14.35 et non 14.36 ?

        Sinon par formule :
        =SI(ET(DROITE(B2;1)="5";MOD(A2;1));ARRONDI.INF(A2;2);ARRONDI(A2;2))

        pijaku, je me demande s'il n'y a pas un pb sur les nombres négatifs pour ta fonction :
        =ArrNbDec(-131.0508;2) retourne -131.06
        Ce qui mathématiquement est bon. Mais je me demande si elle ne veut pas -131.05.
        Si tu pouvais préciser magnolia.

        eric
      2. Modérateur
        Salut Eriiic,
        Merci de l'intervention...
        En fait, je n'ai pas trop le temps de tout tester, donc je laisse les tests à Magnolia et améliore la fonction au fur et à mesure...

        Pour ce qui est de 728.06*(-0.180), j'ai cru comprendre qu'il s'agit en fait de : 728.06*(-0.0180)
      3. Merci de vous pencher sur le sujet sa m'aide beaucoup...
        PIJAKU je test a chaque fois tes fonctions sur plusieurs cas pour voir si cela fonctionne.
        ERIC et PIJAKU je vais essayer de vous donner un exemple plus parlant:

        Je fait actuellement des tableau qui recensent les facture clients et detaillé : dans l'ordre ça donne : Montant brut HT / %de la remise / Montant de la remise / Montant Net ht / tva puis TTC)

        exemple avec des chifre : 489.30 (=montant brut ht) 5%(=pourcentage de la remise) -24.46(=le montant de la remise) 464.84(=montant net ht) 91.11(=tva) 55.95(=ttc)

        Jusque la j'ai perdu personne???

        Donc quand je calcul le montant de la remise à la calculatrice cela me donne -24.465 et mathématiquement si j'arrondi au dixième cela devraits me faire -24.47 mais dans le ca ou il y a un 5 trois chiffres apès la virgule je souhaiterais que le nombre soit tronque et qu'il reste a -24.46.

        Pour les arrondi inferieur et supérieur je laisse comme tel c'est a dire que si le troisieme chiffre apres la virugule est supérieur a 5 cela va arrondir a la décimal au decu, idem si c'est inferieur a 5.

        Jespere que cela est plus clair.
      4. Pijaku
        il s'agit bien de 728.06*(-0.0180) ici le pourcentage est de 1.80 et c'est le montant de la remise donc qui est calculé...
      5. Modérateur
        Re-

        J'ai testé, et, du moins il me semble, ma formule donnée plus haut (le : 3 juil. 2013 à 09:55) fonctionne dans tous tes cas de figure.
        Elle fonctionne même si tu demande un arrondi à 3 ou 4 ou 5 chiffres après la virgule.....