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.

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
Merci de votre aide.

Bryan