Taux d'intérêt d'un investissement

solgti

XLDnaute Junior
Bonjour, je connais la fonction TAUX qui permet de trouver un taux d'intérêt annuel d'un investissement selon une période, exemple 5 ans.
Je sais aussi que l'on peut ajouter un montant pour chaque période.
Mais ma question est plutôt:
Comment calculer le taux d'intérêt annuel si on fait quelques ajout à notre investissement.
Exemple:
je place 1000$ dans un fond commun de placement
après 5 ans j'ai un montant de 2000$
mais pendant cette période de 5 ans j'ai réinvesti 2 fois soit un montant de 200$ après 2 ans et et un montant de 300$ après 4 ans
Donc 1000$ + 200$ (après 2 ans) + 300$ (après 4 ans)
Valeur après 5 ans 2000$
Quel est le taux d'intérêt annuel

Merci de m'éclairer

Solgti
 

job75

XLDnaute Barbatruc
Bonjour solgti,

Il s'agit "simplement" de résoudre l'équation du 5ème degré 1000*(1+T)^5+200*(1+T)^3+300*(1+T)=2000

Avec du VBA on ne se casse pas la tête, voyez le fichier joint et cette macro :

Code:
Sub Calcul()
'Résoudre 1000*(1+T)^5+200*(1+T)^3+300*(1+T)=2000
Dim T&
For T = 1 To 100000000
  If 1000 * (1 + T / 1000000) ^ 5 + 200 * (1 + T / 1000000) ^ 3 + 300 * (1 + T / 1000000) >= 2000 Then
    [A6] = T / 1000000 'restitution
    Exit For
  End If
Next
End Sub
Comme on peut le voir le pas du calcul est de 0,0001%.

Le taux d'intérêt annuel est 7,414%, le résultat a été obtenu avec 74140 itérations.

A+
 

Fichiers joints

Dernière édition:

solgti

XLDnaute Junior
Bonjour job75, vraiment intéressant comme solution, et si je peux me permettre comment pourrait-on rendre cette fonction encore plus flexible pour qu'elle puisse répondre à un nombre variable d'ajout à notre investissement à différente période?
C'est-à dire que des fois on pourrait ajouter 2 ajout, des fois 3 ou 4 ou aucun ou autre.

Merci

Solgti
 

job75

XLDnaute Barbatruc
Re,

Oui et si on fait un nouvel investissement chaque mois au bout de 5 ans il y en aura eu 60...

On ne peut pas paramétrer des évènements aléatoires.

Il faut poser l'équation à chaque fois et adapter la macro, ce n'est pas très difficile, juste la ligne du If...Then à modifier.

A+
 

JBARBE

XLDnaute Barbatruc
Bonjour à tous,

Il serait plus convenable de consulter votre conseillé financier ou un comptable qui seront plus expérimenté pour répondre à votre demande !
Le forum d'excel-download n'a pour tâche que de vous aider dans des formules et des macros !

Pas vu job75 ! Bonjour, Peut-être la bonne solution !

Mais cette demande se complique dans la mesure que les versements ne sont pas périodiques ( exemple une fois par mois) !
De ce fait, les intérêts peuvent être modifiés entre temps sur les investissements qui sont calculés tout les ans .

Bonne journée !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir à tous, solgti, Job75, JBARBE

Bonjour à tous,
Il serait plus convenable de consulter votre conseillé financier ou un comptable qui seront plus expérimenté pour répondre à votre demande !
Le forum d'excel-download n'a pour tâche que de vous aider dans des formules et des macros !
Bonne journée !
:eek:o_O

Il est plus que conseillé de d'abord savoir si le conseiller est convenable ;)

Le forum n'est dévolu à aucune tâche particulière puisque nous sommes bénévoles.

Et les finances, les maths et Excel font bon ménage, non ?
 
Dernière édition:

JBARBE

XLDnaute Barbatruc
Bonsoir à tous, solgti, Job75, JBARBE


:eek:o_O

Il est plus que conseillé de d'abord savoir si le conseiller est convenable ;)

Le forum n'est dévolu à aucune tâche particulière puisque nous sommes bénévoles.

Et les finances, les maths et Excel font bon ménage, non ?
Bonjour Staple1600,
Tout d'abord merci du conseil !
Job75 que je n'avais pas vu avant mon post fait toujours du bon travail sur ce forum et je l'en félicite !
Mais comme il le dit et comme j'ai signalé dans mon post ( sans voir le sien ), des dépôts aléatoires ne peuvent être pris en compte dans sa macro sans nécessiter des Si !
Mais bon, je me suis peu-être trompé dans mes propos, il y a peut-être des comptables ou experts comptables qui sont des bénévoles dans ce forum !

Cela dit, j'ai une assurance vie et malgré de nombreux versements aléatoires et réguliers, non seulement on me compte à chaque fois des frais , mais en plus les rendements sont ridiculement bas !
Ainsi les intérêts sont de ce fait faussé par ces frais qui sont quand même de 0,75%

Les banques feront toujours un maxi de profils sur notre dos !

Bonne journée !
 
Dernière édition:

job75

XLDnaute Barbatruc
Re, salut JBARBE et Jean-Marie,

Fichier (2) avec un tableau des investissements et des formules, étudiez-les bien.

La macro, très simple, entre les taux successifs en C4 (c'est lourd) :
Code:
Sub Calcul()
Dim T&
Application.ScreenUpdating = False
For T = 1 To 100000 'taux de 0 à 100%
  [C4] = T / 100000
  If [C5] >= [B2] Then Exit For
Next
End Sub
Evidemment cela prend bien plus de temps, j'ai donc augmenté le pas à 0,001%.

A+
 

Fichiers joints

job75

XLDnaute Barbatruc
Re,

Il y a sur Excel un outil plus performant pour résoudre ce genre de problème.

C'est le Solver.

Mais c'est un peu compliqué, renseignez-vous quand même !

A+
 

solgti

XLDnaute Junior
Bonjour job75, merci beaucoup d'avoir pris le temps de répondre à mon interrogation, je l'apprécie vraiment beaucoup.

au plaisir
solgti
 

job75

XLDnaute Barbatruc
Bonjour solgti, le forum,

Voici un travail plus sérieux qui utilise un tableau VBA (matrice) :
Code:
Sub Calcul()
Dim cible#, tablo, ub&, i&, t#, s#, j&
cible = [C2]
With [G2].CurrentRegion
  .Columns(4).Name = "Capital" 'plage nommée pour peaufiner...
  If Application.Sum(.Columns(1)) = 0 Then [D4] = "": Exit Sub 'aucun investissement
  tablo = .Resize(, 3) 'matrice, 3 colonnes suffisent
End With
ub = UBound(tablo)
For i = 0 To 1000000 'taux de 0 à 100%
  t = i / 1000000
  s = 0
  For j = 2 To ub
    s = s + tablo(j, 1) * (1 + t) ^ tablo(j, 3)
  Next
  If s >= cible Then Exit For
Next
[D4] = t 'restitution
End Sub
Le calcul est très rapide, on peut donc revenir à un pas de 0,0001%.

Fichier (3), j'ai mis des nombres d'années décimaux.

Bonne journée.
 

Fichiers joints

solgti

XLDnaute Junior
Bonjour job75,
la différence est vraiment hallucinante.
Je ne suis pas très bon en VBA, mais je vais regarder attentivement votre fonction pour essayer de comprendre.

Merci encore d'avoir pris autant de votre temps pour me répondre.
solgti
 

job75

XLDnaute Barbatruc
Re,

J'aime bien pinailler :cool:

Si à cause de l'arrondi du capital à 2 décimales l'avant-dernière itération convient c'est elle qu'il faut prendre :
Code:
Sub Calcul()
Dim cible#, tablo, ub&, i&, t#, mems#, s#, j&
cible = [C2]
With [G2].CurrentRegion
  .Columns(4).Name = "Capital" 'plage nommée pour peaufiner...
  If Application.Sum(.Columns(1)) = 0 Then [D4] = "": Exit Sub 'aucun investissement
  tablo = .Resize(, 3) 'matrice, 3 colonnes suffisent
End With
ub = UBound(tablo)
For i = 0 To 1000000 'taux de 0 à 100%
  t = i / 1000000
  mems = s 'somme précédente
  s = 0
  For j = 2 To ub
    s = s + tablo(j, 1) * (1 + t) ^ tablo(j, 3)
  Next
  If s >= cible Then Exit For
Next
If Format(mems, "0.00") = Format(cible, "0.00") Then t = t - 1 / 1000000
[D4] = t 'restitution
End Sub
Fichier (3 bis).

A+
 

Fichiers joints

solgti

XLDnaute Junior
Bonjour, j'espère que Job75 est toujours à l'écoute.
J'ai progressé pas mal avec la formule que vous m'avez faite, j'ai utilisé une table de données de mes placements et je fais un array pour calculer le rendement et ça fonctionne relativement bien.
Je souhaite aller encore un peu plus loin et en faire une fonction Excel du genre:
=Rendement("Portefeuille";"Fonds")
où Portefeuille et Fonds sont les valeurs inscrite dans 2 cellules exemple A1 et B1
Mais je n'arrive pas à faire une fonction complexe, en fait je suis capable de faire une fonction qui calcul le Surface d'un cercle avec 1 paramètre ou encore une fonction mathématique qui calcul un résultat avec plusieurs arguments.
Mais il semble que lorsque je monte un array pour l'utiliser dans mon calcul ça ne fonctionne pas.
Exemple simple:
Si je fait une procédure:
Sub Test()
Dim myArray As Variant
Dim x As Long
myArray = Worksheets("Table de Données").ListObjects("Tableau_De_Données").DataBodyRange
[n20].Resize(UBound(myArray)).Value2 = myArray
End Sub
ça fonctionne et le résultat s'écrit dans N20
par contre si je change pour une fonction et pour que la fonction retourne un résultat j'ajoute Test=1
ça ne fonctionne pas:
Function Test()
Dim myArray As Variant
Dim x As Long
myArray = Worksheets("Table de Données").ListObjects("Tableau_De_Données").DataBodyRange
[n20].Resize(UBound(myArray)).Value2 = myArray
Test = 1
End Function
ça écrit dans la cellule de la formule #Valeur!

J’ai fait beaucoup de recherche sans succès.
Est-ce que vous pouvez me donner un coup de main SVP?

Merci
solgti
 

job75

XLDnaute Barbatruc
Bonsoir solgti,

Je ne vois pas le rapport avec ce fil, XLD n'est pas un dépotoir.

Je vous conseille de créer une nouvelle discussion en joignant votre fichier.

A+
 

solgti

XLDnaute Junior
Je croyais que comme vous aviez eu la gentillesse de m'aider pour la fonction, je pouvais vous reposer une question qui était selon moi en rapport.
Je vais suivre votre conseil et créer une nouvelle discussion.
Mais je permet de vous dire que l'utilisation du mot dépotoir était un peu fort.
Merci quand même
Solgti
 

ODVJ

XLDnaute Impliqué
Bonsoir à tous,

Tu peux utiliser la fonction d'excel TRI.PAIEMENTS(flux;dates_flux) qui gère les flux non périodiques.

xld_solgti.png

La formule entrée en H10 est : =SI(H8>=0;TRI.PAIEMENTS(H3:H6;I3:I6);"XIRR limitation")
Bien penser à intégrer tous les flux et leurs dates dans les arguments de la fonction en H3:I6.

Pour ton dernier post et pour te répondre complètement, il faudrait avoir un extrait consistant et anonymisé de ton fichier.

Une Sub (procédure) permet d'écrire où on veux dans la feuille de calcul. Ça, tu le maîtrises.
Une function retourne une valeur ou un tableau. Dans ce dernier cas, qui semble t'intéresser, il faut assigner à la fonction le tableau qui doit être retourné.

Cordialement
 

solgti

XLDnaute Junior
Bonjour ODVJ, très intéressant comme solution,
Est-ce qu'il est possible d'utiliser un array (VBA) comme paramètre à cette fonction, ou encore créer une nouvelle fonction qui utilise TRI.PAIEMENTS.
Je m'explique, j'ai un tableau dans une feuille (Feuil1) dans lequel j'ai tous mes placements, sur une feuille résumé (Feuil2), je souhaite inscrire ma liste de placement et avoir directement à côté le rendement.

Donc il faut que la formule isole tous les mouvements de trésorerie dans la feuil1 pour utiliser les bonnes valeurs en fonction des arguments des colonnes A et B de la feuil2.

J'espère être clair.

Merci

solgti
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonsoir ODVJ,

C'est excellent et bien plus simple que ma solution VBA.

Je n'avais jamais vu cette fonction TRI.PAIEMENTS.

Le résultat est un tout petit peu différent du mien, c'est dû aux méthodes de calcul utilisées.

Edit : pardon solgti, on s'est croisé.

Bonne nuit.
 

Discussions similaires


Haut Bas