IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appeler une fonction dans une fonction


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 7
    Points
    7
    Par défaut Appeler une fonction dans une fonction
    Bonjour,

    J'ai un devoir à faire mais je ne sais pas comment m'y prendre pour appeler une fonction dans une fonction étant donné que je suis un débutant en VBA.
    Je vous met en contexte et ma question se retrouve à la suite de l'étape 2.


    Étape 1:

    Écrivez une fonction (et non pas une "Sub") que vous devez obligatoirement nommer ainsi: "monRendement(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché as Double, couponsParAnnée As byte)" . Cela, je l'ai fait.

    Étape 2:

    Écrivez une fonction (et non pas une "Sub") que vous devez obligatoirement nommer ainsi: "maDurée(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché as Double, couponsParAnnée As byte)" . Évidemment, vous remarquez que le taux de rendement utilisé pour calculer la durée n'est pas un des inputs de votre fonction - ceci n'est pas un problème, car votre fonction "maDurée(...)" peut commencer pas appeler votre fonction "monRendement(...)" et utiliser le rendement obtenu pour calculer la durée.

    Q. Je n'ai pas la moindre idée comment faire ceci: maDurée(...)" peut commencer par appeler votre fonction "monRendement(...)" et utiliser le rendement obtenu pour calculer la durée.

    Alors un peu d'aide serait la bienvenu.

    Merci,

    Bryan

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ce qui est intéressant est ce que tu n'as pas mis, ta formule pour calculer le rendement, ça éviterait à "certains" (dont moi) d'avoir à la ré-écrire pour te répondre

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Désolé, je ne savais pas que tu devais avoir mon code pour répondre à ma question:

    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
    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))))
     
    '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

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function monRendement(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché As Double, couponsParAnnée As Byte)
    Écrivez une fonction (et non pas une "Sub") que vous devez obligatoirement nommer ainsi: "maDurée(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché as Double, couponsParAnnée As byte)"
    Mmm pourquoi ecrire deux fonctions qui ont les memes parametres d'entrees, avec l'une qui appelle l'autre et sans qu'elles ne renvoient de valeur (Ce qui est en plus ce qui fait la difference entre une sub et une function )

    A part ca, voila ce que ton enonce m'inspire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function maDurée(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché as Double, couponsParAnnée As byte)
    monRendement(maturitéEnAnnées, couponAnnuel, valNominale, prixMarché, couponsParAnnée) * UnTrucQuiTransformeLeRendementEnDureeEtQuiNEstPasUnParametre
    end function
    A moins qu'il ne s'agisse du debut d'une initiation a la programmation avec le VBA comme support (choix assez douteux d'ailleurs) je comprends pas du tout le but...

    Edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monRendement = Report * couponsParAnnée
    Autant pour moi, ca renvoie une valeur.
    Il faut corriger ta declaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function monRendement(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché As Double, couponsParAnnée As Byte) as Double

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide, je vais essayer ce que tu m'as dit de faire.

    Effectivement, il s'agit vraiment d'une brève introduction à VBA...en fait, nous avons simplement eu 5 heures de pratique...

    En espérant que mon problème soit résolu :-P

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 7
    Points
    7
    Par défaut
    Malheureusement, lorsque j'écrit ceci:

    function maDurée(maturitéEnAnnées As Integer, couponAnnuel As Double, valNominale As Double, prixMarché as Double, couponsParAnnée As byte) monRendement(maturitéEnAnnées, couponAnnuel, valNominale, prixMarché, couponsParAnnée) * UnTrucQuiTransformeLeRendementEnDureeEtQuiNEstPasUnParametre end function


    vba sélectionne monRendement et m'écrit ce message d'erreur: Compile error, expected: end of statement

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Bonjour,
    Deux choses:
    1/ si ton probleme n'est pas resolu, ne met pas resolu, tu auras plus d'aide

    2/ ton erreur est tout a fait normale. Tes mots sont un peu long (flemmard tout ca tout ca) alors je vais prendre des exemples courts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'tu as ecrit
    function MaFonction(PremierParametre as PremierType, SecondParametre as SecondType) as TypeDuResultat * UneVariable
    End Function
     
    'il faut ecrire
    function MaFonction(PremierParametre as PremierType, SecondParametre as SecondType) as TypeDuResultat 
    '
    'Code
    '
    End Function
    La premiere ligne, celle qui commence par function ou sub, est une ligne de declaration, le titre en quelque sorte. On ne peut pas y faire d'operation ou quoi que soit, d'ou ton erreur.
    Attention aussi, lorsque j'ai ecrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    * UnTrucQuiTransformeLeRendementEnDureeEtQuiNEstPasUnParametre
    end function
    Ca voulait dire que tu dois faire l'operation qui te donne la duree a partir du rendement (ce dont je n'ai aucune idee). Si tu recopies, ca ne marchera pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2013, 12h05
  2. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo