Mathématiques financières avec VBA Excel (Stephane Hamard)

Fermé
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016 - Modifié par pijaku le 20/11/2015 à 11:06
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016 - 9 mars 2016 à 15:47
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
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:

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 nov. 2015 à 11:07
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.

0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
20 nov. 2015 à 15:27
Merci de ta réponse mais comment puis je t'envoyer mon fichier excel.

Cordialement
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 nov. 2015 à 15:44
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
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
21 nov. 2015 à 15:09
Voila mon fichier excel pijaku:
http://www.cjoint.com/c/EKvojhgVKMF
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
23 nov. 2015 à 09:23
Bonjour,

J'ai regardé ton fichier, mais... je ne vois pas l'erreur...
Tout semble ok, or, l'erreur est belle et bien là.

Désolé
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
23 nov. 2015 à 10:33
Ne serait -ce pas la capacité de calcul de l'ordinateur tout simplement qui serait insuffisante, d'autres personnes ne pourraient-elles pas se greffer à la conversation pour solutionner le problème?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
23 nov. 2015 à 10:36
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...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 23/11/2015 à 10:47
Excuse moi, je ne devais pas être réveillé...

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
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
23 nov. 2015 à 12:15
Ok, merci
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
23 nov. 2015 à 13:07
Un autre problème, sur la feuille excel je n'ai que des problème du style "valeur" en cellule?
Peux tu m'expliquer stp.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
23 nov. 2015 à 14:09
Soit tu n'as pas régler le problème ci dessus, soit tu passes, à ta fonction de mauvais arguments.
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
23 nov. 2015 à 17:06
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
24 nov. 2015 à 07:52
Bonjour,

REnvoyez moi votre classeur corrigé, je vais jeter un oeil.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 nov. 2015 à 13:39
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 :
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
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
24 nov. 2015 à 15:10
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.
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
24 nov. 2015 à 15:43
Ma courbe d'actualisation fonctionne maintenant reste à voir pour les fonctions.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
24 nov. 2015 à 15:53
Oui. Pas toujours évident de recopier d'un bouquin du code.
L'important est d'essayer de comprendre chaque fonction et de savoir globalement utiliser les fonctions et variables VBA.
Bon courage pour la suite, n'hésite pas.
0
Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
24 nov. 2015 à 16:09
Ma fonction Tx rendement TF marche , c'est aussi un mauvais recopiage du code en tapant un petit espace et rien ne marche.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > Alex3370027 Messages postés 16 Date d'inscription jeudi 19 novembre 2015 Statut Membre Dernière intervention 14 mars 2016
24 nov. 2015 à 16:15
sujet résolu alors.
Si oui, clique sur le lien "Marquer comme résolu" dans ta question
0