Mathématiques financières avec VBA Excel (Stephane Hamard)
Alex3370027
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
Alex3370027 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Alex3370027 Messages postés 16 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous voilà je me présente Alexandre,
J'ai acheté y a maintenant 1 mois le Livre de Stéphane Hamard pour me faire une bibliothèque de fonction pour des produits de taux et viens vous demander conseil car je ne comprends pas que le coeur du code ne fonctionne pas (pourtant tout recopier comme sur le bouquin) j'ai un problème "valeur"sur la feuille , un autre problème erreur "type arguments by Ref non valide"dans le code, en ce qui concerne "TypeCouponBrise", quand je lance mes fonction, dans le cas présent "TxRendementTF.
Serait-ce la puissance de calcul de mon ordinateur qui laisse à désirer?
Sinon Ci-joint le code:
Amélioration de l'interface ça marche
Fonction à Lancer via interface
Et j'ai ce problème des que je lance une fonction. En vous remerciant par avance de l'intérêt que vous porterez à ma requête et pour votre aide précieuse.
Cordialement
J'ai acheté y a maintenant 1 mois le Livre de Stéphane Hamard pour me faire une bibliothèque de fonction pour des produits de taux et viens vous demander conseil car je ne comprends pas que le coeur du code ne fonctionne pas (pourtant tout recopier comme sur le bouquin) j'ai un problème "valeur"sur la feuille , un autre problème erreur "type arguments by Ref non valide"dans le code, en ce qui concerne "TypeCouponBrise", quand je lance mes fonction, dans le cas présent "TxRendementTF.
Serait-ce la puissance de calcul de mon ordinateur qui laisse à désirer?
Sinon Ci-joint le code:
Amélioration de l'interface ça marche
Option Explicit Sub Description_TauxRendementTF() Dim NomFonction As String Dim DescriptionFonction As String Dim Categorie As String Dim DescriptionArguments(1 To 11) As String NomFonction = "TauxRendementTF" DescriptionFonction = "Determine le taux de rendement d'un instrument à taux fixe" Categorie = 1 DescriptionArguments(1) = "Date de Calcul" DescriptionArguments(2) = "Date de Maturite" DescriptionArguments(3) = "Prix Pied Coupon de l'instrument" DescriptionArguments(4) = "Coupon de l'instrument en %" DescriptionArguments(5) = "Frequence" DescriptionArguments(6) = "Base de calcul: Exact/Exact 1, Exact/365 2," & "Exact/360 3, 30/360 4" DescriptionArguments(7) = "Valeur de Remboursement" DescriptionArguments(8) = "(Optionnel) Mode Ajustement: Following 1," & "Mod.Foll.2,Preceding3," & "Mod. Prec. 4" DescriptionArguments(9) = "(Optionnel) PremierCouponPlein : Vrai 1, Faux 0" DescriptionArguments(10) = "(Optionnel) TypeCouponBrise :" & "Court début 1, Long début 2," & " Court fin 3, Long fin 4" DescriptionArguments(11) = " DateDeDepart de l'instrument, obligatoire si le " & "TypeCouponBrise est renseigné" Application.MacroOptions _ Macro:=NomFonction, _ Description:=DescriptionFonction, _ Category:=Categorie, _ ArgumentDescriptions:=DescriptionArguments End Sub
Fonction à Lancer via interface
Function TauxRendementTF(DateDeCalcul As Date, DateDeMaturite As Date, dblPrixPied As Double, dblCoupon As Double, iFrequence As Integer, Base As Variant, dblValeurRemboursement As Double, Optional ModeAjustement As Variant = 0, Optional bPremierCouponPlein As Boolean = False, Optional TypeCouponBrise As Variant = 0, Optional DateDeDepart As Date = 0) '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'Determination du taux de rendement d'un instrument taux fixe' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim TabFlux Dim dblTabFrac() As Double Dim dblTaux As Double Dim dblPrixPlein As Double Dim dblCC As Double Dim dblF As Double Dim dblFPrime As Double Dim iFreq As Integer Dim i As Integer Dim j As Integer dblCC = CouponCouruTF(DateDeCalcul, DateDeMaturite, dblCoupon, iFrequence, Base, dblValeurRemboursement, ModeAjustement, bPremierCouponPlein, TypeCouponBrise, DateDeDepart) dblPrixPlein = dblPrixPied + dblCC TabFlux = FluxTF(DateDeCalcul, DateDeMaturite, dblCoupon, iFrequence, Base, dblValeurRemboursement, ModeAjustement, bPremierCouponPlein, TypeCouponBrise, DateDeDepart) If iFrequence = 0 Then iFreq = 1 Else iFreq = iFrequence End If ReDim dblTabFrac(UBound(TabFlux, 2)) For i = 1 To UBound(TabFlux, 2) dblTabFrac(i) = FractionAnnee(DateDeCalcul, (TabFlux(1, i)), Base) * iFreq Next dblTaux = 0.05 For i = 1 To 100 dblF = -dblPrixPlein dblFPrime = 0 For j = 1 To UBound(TabFlux, 2) dblF = dblF + TabFlux(2, j) / ((1 + dblTaux / iFreq) ^ dblTabFrac(j)) dblFPrime = dblFPrime - (dblTabFrac(j) * TabFlux(2, j)) / ((1 + dblTaux / iFreq) ^ (dblTabFrac(j) + 1)) Next dblTaux = dblTaux - dblF / (dblFPrime / iFreq) Next TauxRendementTF = dblTaux End Function
Et j'ai ce problème des que je lance une fonction. En vous remerciant par avance de l'intérêt que vous porterez à ma requête et pour votre aide précieuse.
Cordialement
A voir également:
- Mathématiques financières avec VBA Excel (Stephane Hamard)
- Liste déroulante excel - Guide
- Toutes les formules mathématiques pdf - Télécharger - Études & Formations
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
5 réponses
Bonjour,
1- lorsque tu postes du code sur un message dans ce forum, pense à l'entourer des balises <code basic> <code> .
2- il nous faudrait un fichier excel tout fait pour voir ton erreur.
Il s'agit certainement de mauvais paramètres passés aux fonctions.
1- lorsque tu postes du code sur un message dans ce forum, pense à l'entourer des balises <code basic> <code> .
2- il nous faudrait un fichier excel tout fait pour voir ton erreur.
Il s'agit certainement de mauvais paramètres passés aux fonctions.
Merci de ta réponse mais comment puis je t'envoyer mon fichier excel.
Cordialement
Cordialement
En utilisant un site de pièce jointe comme https://www.cjoint.com/
Tu vas sur ce site, créer un lien vers ton fichier, reviens ici coller ce lien dans une réponse.
Pour ma part ce sera lundi.
Bon week end
Tu vas sur ce site, créer un lien vers ton fichier, reviens ici coller ce lien dans une réponse.
Pour ma part ce sera lundi.
Bon week end
Voila mon fichier excel pijaku:
http://www.cjoint.com/c/EKvojhgVKMF
http://www.cjoint.com/c/EKvojhgVKMF
Rien à voir avec la capacité de calcul.
D'autres personnes peuvent, en effet, intervenir.
Mais le problème n'est pas simple.
En fait, il te dit que le paramètre TypeCouponBrise que tu envoie à la fonction FluxTF n'est pas bien typé. Or, la fonction réclame un variant et tu lui envoie bien un variant.
C'est pour cela que je ne comprend pas l'erreur...
D'autres personnes peuvent, en effet, intervenir.
Mais le problème n'est pas simple.
En fait, il te dit que le paramètre TypeCouponBrise que tu envoie à la fonction FluxTF n'est pas bien typé. Or, la fonction réclame un variant et tu lui envoie bien un variant.
C'est pour cela que je ne comprend pas l'erreur...
Excuse moi, je ne devais pas être réveillé...
Ta fonction FluxTF comporte 9 paramètres :
Or tu essaies de lui en passer 10 dans ta fonction BTVPF :
A revoir donc cette ligne TabFlux = ......
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Ta fonction FluxTF comporte 9 paramètres :
FluxTF(DateDeCalcul As Date, DateDeMaturite As Date, dblCoupon As Double, iFrequence As Integer, Base As Variant, dblValeurRemboursement As Double, Optional ModeAjustement As Variant = 0, Optional TypeCouponBrise As Variant = 0, Optional DateDeDepart As Date = 0)
Or tu essaies de lui en passer 10 dans ta fonction BTVPF :
TabFlux = FluxTF(DateDeCalcul, DateDeMaturite, dblCoupon, iFrequence, Base, dblValeurRemboursement, ModeAjustement, bPremierCouponPlein, TypeCouponBrise, DateDeDepart)
A revoir donc cette ligne TabFlux = ......
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Pour le code ca marche je n'ai plus de problème mais alors j'ai beau tout essayé pour obtenir des nombres et me débarrasser de l'erreur"valeur" rien à faire aucune idée. Serait il possible que vous puissiez essayer de votre côté car je vous avoue que même partant de la fonction "dates des flux" j'ai un problème valeur je ne vois pas le pb.
En vous remerciant
En vous remerciant
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pose une réclamation auprès de Stéphane Hamard.
Tu dis : pourtant tout recopier comme sur le bouquin
Or, dans le module 1 contenant toutes les fonctions, je vois :
Or, dans la fonction suivante, tu dimensionnes un tableau à 0 :
Impossible de dimensionner (ou redimensionner) un tableau avec l'indice 0 si tu es en option base 1. Le plus petit indice est alors 1.
Ou comment chercher une aiguille dans une botte de foin.
Pour t'en convaincre, fais ce test :
- ouvre un nouveau classeur,
- passe en VBA (Alt+F11)
- copie/colle ce code dans un module
- teste en lançant la Sub test
Tu dis : pourtant tout recopier comme sur le bouquin
Or, dans le module 1 contenant toutes les fonctions, je vois :
Option Base 1
Or, dans la fonction suivante, tu dimensionnes un tableau à 0 :
Function DatesDesFlux '... ReDim TableauTemporaire(0)
Impossible de dimensionner (ou redimensionner) un tableau avec l'indice 0 si tu es en option base 1. Le plus petit indice est alors 1.
Ou comment chercher une aiguille dans une botte de foin.
Pour t'en convaincre, fais ce test :
- ouvre un nouveau classeur,
- passe en VBA (Alt+F11)
- copie/colle ce code dans un module
Option Base 1 Sub test() Dim maVar As String maVar = maFonction("dis donc ça ne fonctionne pas", "Pourquoi?") MsgBox maVar End Sub Function maFonction(Var_1 As String, Var_2 As String) As String Dim TableauTemporaire() As Integer On Error GoTo TraitementErreur ReDim TableauTemporaire(0) maFonction = "Si maFonction exécute cette ligne, c'est que tu n'as pas mis Option Base 1!" Exit Function TraitementErreur: maFonction = "Parce qu'on ne peut pas dimensionner un tableau à 0 avec Option Base 1" End Function
- teste en lançant la Sub test
Non ce n'est pas Stéphane Hamard c'est moi, oui j'ai recopié trop vite un maximum de codes sans prendre soin de faire attention à une phrase qui dit que les fonctions de manipulation des dates ne doivent pas contenir "Option Base1" mais implicitement dit qu'il faut le rajouter dans de nouveaux modules donc je comprends que je dois séparer mes fonctions en plusieurs modules le premier seulement "Option Explicit" et les autres "Option Explicit +Option Base1". J'ai vu du code avec "OptionExplicit+Option Base 1" donc j'ai pas cherché (aussi je suis pas un initié et tout le code, j'aurais du contrôler fonction après fonction je suis allé trop vite" )
Encore toutes mes excuses.
Encore toutes mes excuses.