Bonjour, je suis nouveau sur le site (ne sais pas si la catégorie est juste ou non...), et pour mon travail de diplôme je dois (entre autre) effectuer un calcul de la duration (mesure de la durée de vie d'un actif à revenus fixes) et là souci. Mon problème est qu'il faut que je créé un code qui si je mets une valeur dans une cellule (par ex. 5) me renvoie un chiffre par cellule (1,2,3,4,5 en l'occurence) sans que j'aie à dimensionner le tableau (le nbre d'années pouvant être variable) puis me permette de faire un for each i... et un calcul.
sais pas si tout ça est clair...
J'avais un vieil exo de math fi qui trainait sur mon pc, j'ai adapté ce que j'avais fait via des formules EXCEL en un code VBA.
Tu auras peut être quelques adaptations à faire pour ton cas, moi, c'était pour une obligation, coupon fixe. J'ai mis un seul coupon par an, mais si tu lis dans la msgbox Période ou trimestre au lieu d'années, ça marche pareil ^^. Et de mémoire, mais c'est loin tout ça, pour le dernier versement, à la dernière période donc, il faut ajouter la valeur de l'oblig puisqu'elle est reversée, ce que je n'ai pas mis dans mon code (faut pas faire tout le boulot non plus ) :
'Définition des variables
Dim Coupon As Currency
Dim Taux As Currency
Dim NbAnnées As Integer
Dim ValeurActualisée() As Currency
Dim Vm As Currency
Dim VmT As Currency
Dim i As Integer
'Initialisation des variables
Coupon = InputBox("Montant du coupon ?")
Taux = InputBox("Taux de l'obligation (en % ... Taper 5 pour 5%)") / 100
NbAnnées = InputBox("Durée de l'obligation en années")
Vm = 0
VmT = 0
ReDim ValeurActualisée(NbAnnées, 1)
'Alimentation du tableau et calcul des Valeurs actualisées au fur et à mesure de la boucle
For i = 1 To NbAnnées
'Valeur actualisée d'une obligation au taux actuariel du marché
'Vm = Somme de 1 à T de CouponT/(1+r)^T
ValeurActualisée(i - 1, 0) = Coupon / ((1 + Taux) ^ i)
Vm = Vm + (Coupon / ((1 + Taux) ^ i))
'valeur actualisée, mais en pondérant chaque séquence par un coefficient multiplicateur correspondant au moment T de la séquence.
'Vm(T) = Somme de 1 à T de (CouponT/(1+r)^T)*T
ValeurActualisée(i - 1, 1) = (Coupon / ((1 + Taux) ^ i)) * i
VmT = VmT + ((Coupon / ((1 + Taux) ^ i)) * i)
Next i
'Calcul de la duration
'Elle est égale au rapport Vm(T)/Vm
MsgBox "La duration est égale à : " & VmT / Vm
Ce code te calcule la Duration et l'affiche à la fin, si tu veux avoir le détail de chaque période, toutes les infos sont dans le tableau de variables ValeurActualisée.
Salut
Catégorie juste ou non : Si tu nous disais avec quel outil tu programmes ? Excel ? VB6 ?
De toute façon, la méthode est la même :
Si tu veux créer un tableau dynamiquement, il faut le déclarer comme ceci :
Dim monTableau() As String ' ou Long, ou Single ou ...
Quand tu veux changer la dimension du tableau (ça le videra aussi) :
ReDim monTableau(xxx)
où xxx est la valeur contenue dans ta cellule.
Les tableaux commencent par défaut à l'index 0.
Si xxx vaut 5, tu auras donc 6 éléments, de monTableau(0) à monTableau(5)
Quand tu voudras énumérer le contenu de tes variables :
For r = 0 to xxx
monTableau(r) = "Coucou" ...
Next r
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)