Bonjour,
J'ai fait une "Function" et tout est parfait sauf une petite chose.
La donnée nomée couponsParAnnée As Byte ne doit prendre que les valeurs de 1 à 12 uniquement et si l'utilisateur entre une valeur qui ne se retrouve pas dans l'interval, cela doit inscrire #VALUE! dans la case de la feuille Excel intitulé Coupons Par Année.
Juste avant vous fournir mon code, voici comment visualiser ma feuille EXCEL:
Exemple:
j'ai nommé mes Cellules B2 à G2 ainsi dans EXCEL:
Maturité en années; Coupon annuel; Valeur nominale; Prix du marché;
Nombre de coupons par années; Rendement de l'obligation( il s'agit de la réponse de ma "function")
Voici mon code: Le problème, selon moi, se retrouve dans le IF juste avant la boucle FOR.
Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Public Function monRendement(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché As Double, couponsParAnnée As Byte) 'Déclaration des variables utilisées par notre programme. Dim k As Single Dim Report As Single Dim Itération As Integer Dim TauxIntérêtEstimé As Single Dim TauxModifiéIntérêt As Single Dim TauxIntérêtCoupons As Single 'Permet de trouver le taux d'intérêt des coupons. TauxIntérêtCoupons = couponAnnuel / valNominale 'Permet de calculer le Taux modifié d'intérêt par période de paiement des coupons. TauxModifiéIntérêt = ((valNominale * TauxIntérêtCoupons) / valNominale) / couponsParAnnée 'Il s'agit de la variable k et cette dernière est obtenue en soustrayant 'la valeur nominale au prix de l'obligation et en divisant le tout par la valeur nominale. k = (prixMarché - valNominale) / valNominale 'Notez que le TauxIntérêtEstimé correspond à la portion moyenne d'intérêt dans chaque coupon divisé par le montant moyen investi à chaque période. TauxIntérêtEstimé = (TauxModifiéIntérêt - (k / (maturitéEnAnnées * couponsParAnnée))) / (1 + ((((maturitéEnAnnées * couponsParAnnée) + 1) * k) / (2 * (maturitéEnAnnées * couponsParAnnée)))) If couponsParAnnée <= 12 And couponsParAnnée >= 1 Then couponsParAnnée = couponsParAnnée Else couponsParAnnée = CVErr(xlErrValue) End If 'Itération de Newton. For Itération = 1 To 20 'Permet de calculer le prochain taux d'intérêt estimé. Report = TauxIntérêtEstimé * (1 + (((TauxModifiéIntérêt * ((1 - ((1 + TauxIntérêtEstimé) ^ (-(maturitéEnAnnées * couponsParAnnée)))) / (TauxIntérêtEstimé))) + ((1 + TauxIntérêtEstimé) ^ (-(maturitéEnAnnées * couponsParAnnée))) - (prixMarché / valNominale)) / (((TauxModifiéIntérêt * ((1 - ((1 + TauxIntérêtEstimé) ^ (-(maturitéEnAnnées * couponsParAnnée)))) / (TauxIntérêtEstimé))) + ((maturitéEnAnnées * couponsParAnnée) * (TauxIntérêtEstimé - TauxModifiéIntérêt) * ((1 + TauxIntérêtEstimé) ^ (-((maturitéEnAnnées * couponsParAnnée) + 1)))))))) 'L'utilisation de la fonction ABSOLUE permet de s'assurer que le taux d'intérêt converge. 'Lorsque le taux d'intérêt converge et que l'itération est inférieur ou égale à 20, la réponse s'inscrit sur la feuille Excel If Abs(TauxIntérêtEstimé - Report) = 0 And Itération <= 20 Then monRendement = Report * couponsParAnnée Else TauxIntérêtEstimé = Report End If Next Itération End Function
Bryan
Partager