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 :

Comment inscrire #VALUE! dans une cellule spécifique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut 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 : 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
    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

  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
    Par défaut
    Dans l'aide Excel (pas VBA) j'ai trouvé ça.
    Corriger une erreur #VALEUR!
    Survient lorsqu'un type d'argument ou d'opérande inapproprié est utilisé.
    Donc, pour faire apparaître ce message dans ta cellule, quand couponsParAnnée > 12 ou < 1, tu dois changer d'argument ou d'opérande. Tu peux le faire avec Si(couponsParAnnée <13; Si(couponsParAnnée >0;couponsParAnnée;AutchoseKaRienAvoir);AutchoseKaRienAvoir) mais dans ce cas là, ton test devra se trouver dans la formule.
    Juste une idée de "bricolage". Ça ne t'étonnera pas si je n'ai pas testé...
    (Et je te laisse régler les parenthèses )

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    Malheureusement, je recherche une facon de le faire via VBA uniquement :-S

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 572
    Par défaut
    moi, j'ai fais ça et ça marche tres bien, a mon avis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub erreur()
    i = InputBox("valeur svp")
    If i = 3 Then
    Range("a1") = 3 / i
    Else
    i = 0
    Range("a1") = CVErr(xlErrValue)
    coupnparannée = Range("a1")
    Range("a2") = coupnparannée
    End If
    End Sub
    que ce soit en affectant le resultat directement a la variable ou a la range, donc comme dirait l'autre
    la vérité est ailleurs
    j'edite apres raflexion
    evidement que ta transformation en variable fonctionne bien, mais evidement aussi, qu'ensuite, tu ne peux plus te servir de ta vatriable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     monRendement = Report * couponsParAnnée
    il faut donc soit que tu place une gestion d'erreur, soit une condition pour ne pas faire cette operation si la variable n'est pas comprise entre 1 et 12

  5. #5
    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
    Par défaut
    C'était pourquoi je proposais une variable de rechange ne respectant pas l'argument attendu si coupnparannée pas bon
    A chacun sa vérité

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Par défaut
    Ouais, j'y avait pensé faire un sub. mais mon professeur m'oblige à utiliser une "Function" uniquement...alors je suis dans l'impasse.

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

Discussions similaires

  1. JTable : comment insérer un bouton dans une cellule ?
    Par donyas dans le forum Composants
    Réponses: 2
    Dernier message: 08/08/2006, 16h54
  2. Réponses: 2
    Dernier message: 03/08/2006, 19h21
  3. [VBA-E] Comment écrire à la suite dans une cellule ?
    Par bogosse dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2006, 14h03
  4. Comment créer un commentaire dans une cellule d'Excel ?
    Par WebPac dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/04/2005, 10h23
  5. Comment insérer une image dans une cellule d'un TDrawGrid ?
    Par kanux dans le forum Composants VCL
    Réponses: 4
    Dernier message: 15/01/2005, 19h58

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