Calcul plusieurs NPV via VBA
Bonjour,
Je souhaite réaliser un code afin de comparer plusieurs NPV et donc plusieurs investissements.
J'ai cru comprendre qu'il fallait créer une variable type cashflow(# de cashflows) afin de réaliser ceci
exemple ci dessous (copié-collé du site d'aide microsoft)
Dim Fmt, Guess, RetRate, NetPVal, Msg
Static Values(5) As Double ' Set up array.
Fmt = "###,##0.00" ' Define money format.
Guess = .1 ' Guess starts at 10 percent.
RetRate = .0625 ' Set fixed internal rate.
Values(0) = -70000 ' Business start-up costs.
' Positive cash flows reflecting income for four successive years.
Values(1) = 22000 : Values(2) = 25000
Values(3) = 28000 : Values(4) = 31000
NetPVal = NPV(RetRate, Values()) ' Calculate net present value.
Msg = "The net present value of these cash flows is "
Msg = Msg & Format(NetPVal, Fmt) & "."
MsgBox Msg ' Display net present value.
Cependant, mon problème réside dans le fait que, dans mon code, je suis dans une boucle while qui me permet de faire ces calculs de NPV les uns après les autres, afin de stocker ses valeurs. Et, étant donné que le nombre de Cashflow peut varier d'un investissement à un autre, je ne peux introduire ma variable cashflow qu'à partir d'une autre variable définissant le nombre de cashflows dans la colonne concernée. Et enfin, lorsque je souhaite faire cela, vba me dit qu'il ne peut créer une variable cashflow(x) qu'à partir d'un x fixe et non pas d'une autre variable, bien que celle ci ne change pas pendant la boucle for me permettant de donner à chaque cashflow(i) la valeur du flux correspondant.
Voici par exemple le code que je souhaitais utiliser pour cette partie
Dim cf(lrow - 4 -1) As Double
For i = 4 To lrow 'lrow représentant la dernière ligne de la colonne considérée, chaque colonne correspondant à un investissement et donc lrow étant, dans cette colonne, le dernier flux
cf(i) = Cells(i, 5 + lcol - 1)
Next
Cells(10 + lcol - 1, 2) = NPV(Cells(3, 5 + lcol - 1).Value, cf())
Pouvez vous m'éclairer svp ? Merci par avance
Bonjour,
tu peux créer un tableau dynamique.
Remplacer :
Static Values(5) As Double ' Set up array.par :
Static Values() As Double ' Set up array. ' créer sans dimension
Redim Values(0 to 4) ' dimensionner ensuite4 pouvant être une variable à ton choix
eric
Formidable, ça a l'air de fonctionner parfaitement
Merci beaucoup