Erreur avec les arrondis

Bonjour à Toutes et à Tous

Dans le cadre de mon activité au sein d'une association caritative, j'ai réalisé le tableau Excel joint à cette demande.

Le fait des arrondis du pourcentage et de l'affichage du résultat sans décimal génère une erreur de calcul comme le démontre l'exemple joint.

J'ai tenté de solutionner celle-ci avec les différentes fonctions "arrondi" mais aucune ne donne satisfaction....

L'une ou l'un d'entre vous serait-il m'aider?

Bonne journée et merci pour votre aide

Bonjour

Une remarque préalable : les formules de ta colonnes E sont incorrectes car elles se réfèrent à la cellule dans laquelle elles sont.

Pourquoi les formules avec arrondis ne te satisfont-elles pas ?

Tu as : "ARRONDI(C11*D11;0) ou encore : ARROND.SUPI(C11*D11;0)

Bye !

Bonjour,

D'après moi, c'est insoluble avec les arrondis.

Exemple pour me faire comprendre :

J'ai 10 colis à répartir en 3 centres.

Je dois donc affecter 3,333333 colis par centre soit, après arrondi, 3 colis par centre.

Le total sera alors de 9 colis et il me restera un colis sur les bras.

A+

Bonjour,

Une fonction personnalisée devrait permettre de répondre à ton attente :

Function REPART(nbar As Long, plr As Range)
    Dim rep(), tar&, d&, i%, h%
    Application.Volatile
    If plr.Columns.Count > 1 Then Exit Function
    For i = 1 To plr.Rows.Count
        tar = tar + plr.Cells(i, 1)
    Next i
    ReDim rep(1 To plr.Rows.Count, 1 To 2)
    With plr
        For i = 1 To UBound(rep, 1)
            rep(i, 1) = Round(nbar * .Cells(i, 1) / tar, 0)
            rep(i, 2) = nbar * .Cells(i, 1) / tar - rep(i, 1)
            d = d + rep(i, 1)
        Next i
    End With
    d = nbar - d
    Do While d <> 0
        h = 1
        For i = 2 To UBound(rep, 1)
            If d > 0 Then
                If rep(i, 2) > rep(h, 2) Then h = i
            ElseIf d < 0 Then
                If rep(i, 2) < rep(h, 2) Then h = i
            End If
        Next i
        rep(h, 1) = rep(h, 1) + IIf(d > 0, 1, -1)
        rep(h, 2) = nbar * plr.Cells(h, 1) / tar - rep(h, 1)
        d = d + IIf(d > 0, -1, 1)
    Loop
    ReDim Preserve rep(1 To plr.Rows.Count, 1 To 1)
    REPART = rep
End Function

La fonction est matricielle, à utiliser sur l'ensemble de la plage colis répartis. Soit : on sélectionne préalablement la plage E5:E18 ; on tape la fonction : =REPART( ; on fournit le 1er argument, nombre de colis à répartir : =REPART(E2 ; on ajoute le 2e argument, la plage clients : =REPART(E2;C5:C18) ; on valide par Ctrl+Maj+Entrée.

La plage sélectionnée au départ doit être de même taille que la plage client (sinon les résultats seront faux).

La fonction opère en constituant un tableau à 2 colonnes, la première recueillant la valeur arrondie, la seconde le delta entre valeur réelle et valeur arrondie (en + ou en -). Si le total des arrondis ne coincide pas avec le nombre à répartir, elle va compenser la différence (nombre à répartir - total réparti) en attribuant 1 colis supplémentaire au client dont le delta est max en cas de différence positive, ou en enlevant 1 colis au client dont le delta est min en cas de différence négative. Le delta du client modifié est recalculé, et un nouveau tour est fait si la différence n'a pas été ramenée à 0...

La fonction ne prend en compte que les plages verticales. Elle devra être améliorée ultérieurement pour prendre en compte également les plages horizontales, et renvoyer des valeurs d'erreurs normalisées dans les différents cas d'erreurs possibles. Je me suis limité pour l'instant au traitement du cas posé.

Cordialement.

Rechercher des sujets similaires à "erreur arrondis"