Tion d'équation

Bonjour,

Même problème / nouveau post (sous les conseils d'un habitué des lieux)

Je n'ai d'autres choix que de m'en remettre à nouveau à vos services.

Je souhaiterais faire un code pour créer une fonction TRI Global.

Sur le même principe que la fonction TRI qui renvoie via des flux de trésorerie le taux de rentabilité d'un investissement, ma fonction TRI Global souahitée doit utiliser ces même flux mais en les capitalisant (seulement les flux positifs) à un autre taux (donné) jusqu'à l'échéance et ainsi renvoyer à un autre taux de rentabilité.

Jusqu'à présent j'utilisais le solveur mais si une fonction pouvait faire l'affaire, j'y gagnerai un certain temps.

En gros je souhaiterais faire une fonction dont la syntaxe serait:

TRI_Global(Valeurs;Taux_Réinvestissements)

Avec comme argument "Valeurs" la même plage qui serait utilisée pour une fonction TRI et en Taux_Réinvestissements, un taux donné.

Ainsi la fonction TRI résolvant pour n flux notés F l'équation:

-F0 + F1/(1+TRI)^1 + ... + Fn/(1+TRI)^n = 0

Je souhaiterais une fonction TRI_Global résolvant:

    -F0 + (F1*(1+Taux_Réinv)^(n-1) + ... + Fn) / (1+TRI_Global)^n = 0

Mais dans le cas où l'un des flux autre que F0 serait < 0, il n'a pas à être réinvesti mais doit toutefois être actualisé par (1+TRI_Global)^p. Où p est le "rang" du flux.

Aussi, si l'on reprend l'exemple de mon fichier, la fonction TIR_Global que je cherche doit résoudre l'équation:

 -4200 -21600/(1+TIR_Global)^1 + (4545*(1.1)^3 + 8715*(1.1)^2 + 6215*(1.1) + 30265)/(1+TRI_Global)^5 = 0

Et ce, sans avoir à passer par une cellule annexe (C10 dans mon fichier).

Voilà...

J'espère ne pas avoir été trop flou dans mes explications.

Je vous remercie pour le temps que vous m’accorderez.

Cdlt,

Darzou

32tir-global.xlsm (28.86 Ko)

Rebonjour,

Pour ceux qui seraient interessés, je suis parvenu à ce code:

Function TIRG(Flux, Réinvest)
Dim I!, J%, Periode%, Val!, K!, Cel As Range
    I = Round(WorksheetFunction.IRR(Flux), 6)
Val = 0
K = -0.000001
Periode = [Flux].Count - 1
While Val <= 0
    J = 0
    For Each Cel In [Flux]
        If Cel.Value >= 0 Then
            Val = Val + Cel.Value * (1 + Réinvest) ^ (Periode - J) / (1 + I) ^ Periode
        Else
            Val = Val + Cel.Value / (1 + I) ^ J
        End If
        J = J + 1
    Next Cel
    If Val <= 0 Then
        Val = 0
        I = I + K
    End If
Wend
TIRG = Round(I, 6)
End Function

Ce n'est pas topissime parce que je reste limité sur le nombre de décimales (si je vais chercher un K plus grand, ça en devient un peu trop laborieux pour ma machine...) mais ça reste suffisant pour l'utilisation que j'en ai.

Bref je reste toutefois ouvert à d'autre suggestions / optimisations sur ce sujet.

Bonne journée à tous,

Cdlt,

Darzou

Rechercher des sujets similaires à "tion equation"