VB6 et fonction d'excel

sofy2006 Messages postés 15 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 15 avril 2006 - 7 avril 2006 à 23:50
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 - 11 avril 2006 à 22:27
salut j'ai besoin d'utiliser des fonctions d'excel catégorie finance et j ai trouvé un code source mais j ai pas su l'utiliser
voila le code source:
Function B_Yield_ISMA(Sett_d As Date, Mat_d As Date, Cpn As Double, Price As Double) As Double
' Calculates the yield of a coupon bearing bond (ISMA)
Dim L As Double, t As Double, sz As Double, T1 As Double, T2 As Double, T3 As Double
Dim k1 As Double, k2 As Double
Dim n As Long
L = Application.Days360(Sett_d, Mat_d) / 360
n = Int(L)
t = L - n
sz = Cpn * (1 - t)
T1 = Application.Rate(L, Cpn, -Price, 100) If IsError(T1) Then T2 -1 Else k1 (-Application.PV(T1, n, Cpn, 100) + Cpn) / (1 + T1) ^ t - sz
T2 = T1 + 0.00005
k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + T2) ^ t - sz
While Abs(k2 - Price) > 0.00005
T3 = T1 + (Price - k1) * (T2 - T1) / (k2 - k1)
T1 = T2
k1 = k2
T2 = T3
k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + T2) ^ t - sz
Wend
B_Yield_ISMA = T2
End Function

3 réponses

rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
10 avril 2006 à 22:54
Salut 730218 sofy2006,

Ajoutes une référence à Excel dans ton projet VB, et essaies plutôt comme ça :

Function B_Yield_ISMA(Sett_d As Date, _
Mat_d As Date, _
Cpn As Double, _
Price As Double) As Double
' Calculates the yield of a coupon bearing bond (ISMA)
Dim L As Double, t As Double, sz As Double
Dim T1 As Double, T2 As Double, T3 As Double
Dim k1 As Double, k2 As Double
Dim n As Long
L = WorksheetFunction.Days360(Sett_d, Mat_d) / 360
n = Int(L)
t = L - n
sz = Cpn * (1 - t)
'Attention, si les dates ont moins d'un an d'écart, l'instruction suivante
'déclenchera un dépacement de capacité
T1 = Rate (L, Cpn, -Price, 100)

If IsError(T1) Then
T2 = -1
Else
k1 = (- WorksheetFunction .PV(T1, n, Cpn, 100) + Cpn) / (1 + T1) ^ t - sz
End if

T2 = T1 + 0.00005
k2 = (- WorksheetFunction.PV (T2, n, Cpn, 100) + Cpn) / (1 + T2) ^ t - sz

While Abs(k2 - Price) > 0.00005
T3 = T1 + (Price - k1) * (T2 - T1) / (k2 - k1)
T1 = T2
k1 = k2
T2 = T3
k2 = (- WorksheetFunction.PV (T2, n, Cpn, 100) + Cpn) / (1 + T2) ^ t - sz
Wend

B_Yield_ISMA = T2

End Function

à+

rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
sofy2006 Messages postés 15 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 15 avril 2006
11 avril 2006 à 14:47
Merci pour l'aide , j'ai pas compris'Attention, si les dates ont moins d'un an d'écart, l'instruction suivante déclenchera un dépacement de capacité
Enfin j'arrive pas à comprendre les instructions du code
0
rvblog Messages postés 792 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 12 juin 2012 7
11 avril 2006 à 22:27
Salut sofy2006,

B_Yield_ISMA est une fonction qui renvoie un résultat quand tu l'exécutes en lui passant des paramètres. Sett_d et Mat_d sont des paramètres de type Date.
Donc quand tu appelles cette fonction tu lui passes 2 dates.
Je te précise donc que ces 2 dates doivent être distantes l'une de l'autre d'au moins 1 an.
Sinon?
Sinon, une erreur va se déclencher lorsque l'instruction mise en évidence par mon commentaire éloquent (non?) va s'exécuter, elle (pour un vague problème de dépassement de capacité que tu ne comprendrais pas, si je ne t'avais pas prévenu(e) avant :) ).

Je sais que pas les instructions du code, ce n'est pas gravepar contre, elles, elles me comprennent).

Ce n'est qu'une suite de calculs qu'il convient de mettre en ordre de fonctionnement (ce qui est fait, je pense) de manière à ce que tu puisses la manipuler et en observer les effets. Là, apparaîtra leur aspect fonctionnel que, j'en suis convaincu, tu comprendras! c'est cela l'important!

PS: j'ai vu un autre message de toi, et à mon avis, tourné comme il est, il n'y a que très peu de chance que quelqu'un y apporte une réponse (quoique, j'ai repéré des matheux qui trainent de temps en temps). Reviens avec un bout de code qui ne fonctionne pas (on pourrais le faire, mais c'est à toi de le faire), et là, tu auras des réponses (chacun son métier).
Cherches aussi dans le moteur de recherche du site, on ne sait jamais!

à+


rvblogn<SUP>
</SUP><SUP>Je veux ton bien... et je l'aurais
</SUP>
0
Rejoignez-nous