Comment inscrire #VALUE! dans une cellule spécifique
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:
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