Duration [Résolu]

Signaler
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
-
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008
-
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...

en tout cas merci d'avance pour votre aide
A voir également:

4 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
6
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.

En espérant que ça t'aide ^^

Molenn
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
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)
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

désolé c'est avec Excel que je tente de programmer...
en tout cas merci, je vais voir ce que ça donne
Messages postés
68
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
14 mars 2008

ça m'a bien aidé, merci bcp