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 :

VBA problème d'affichage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 2
    Par défaut VBA problème d'affichage
    Bonjour,

    je cherche à effectuer un calcul basé sur le principe de Monte Carlo, avec une moyenne connue d'avance et un écart type spécifié par l'utilisateur (userform qui s'ouvre à l'ouverture du classeur Excel) mais le calcul de la DCF (ci-dessous) ne s'affiche pas sur Excel quand on lance la boucle :s
    Merci d'avance pour votre aide


    Code vba : 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
    Option Explicit
     
    Function DCF(WACC As Double, RG As Double, MBE As Double, CA As Double, CAPEXRev As Double)
    Dim rnd() As Double
     
    Dim FCF As Double
    Dim k As Integer
    Randomize
     
        With ActiveWorkbook
     
            WACC = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E18").Value, Userform1.a.Value())
            RG = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E19").Value, Userform1.b.Value())
            MBE = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E20").Value, Userform1.c.Value())
            CA = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E21").Value, Userform1.d.Value())
            CAPEXRev = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E22").Value, Userform1.e.Value())
        End With
     
        FCF = MBE * CA * (1 - 0.33) - CAPEXRev * CA
     
    'For k = 1 To 100
        DCF = FCF / (WACC - RG)
     
    'k = k + 1
    'DCFfinal = Average
    'Next
     
    End Function

  2. #2
    Membre éprouvé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2012
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 94
    Par défaut
    comment appelles-tu ta fonction ? Pour moi aucun affichage n'est fait dedans, je suppose que tu ne veux que le résultat non ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    Dans ta fonction tu demande des arguments alors que tu les récupèrent directement à l'intérieur même de cette dernière ? Ceci n'a pas de sens !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Function DCF(WACC As Double, RG As Double, MBE As Double, CA As Double, CAPEXRev As Double)
    ...
    WACC = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E18").Value, Userform1.a.Value())
    RG = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E19").Value, Userform1.b.Value())
    MBE = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E20").Value, Userform1.c.Value())
    CA = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E21").Value, Userform1.d.Value())
    CAPEXRev = Application.WorksheetFunction.NormInv(rnd(), .Sheets("Parameters").Range("E22").Value, Userform1.e.Value())
    Ta fonction doit être appelée soit par une autre fonction, soit par une procédure, soit directement dans Excel par une formule.
    Dans mon exemple ci-dessous, c'est une procédure qui appelle la fonction en passant les arguments demandés :
    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
     
    Sub test()
     
        'ici, j'ai typé en Double ?
        Dim rnd() As Double
        Dim WACC As Double
        Dim RG As Double
        Dim MBE As Double
        Dim CA As Double
        Dim CAPEXRev As Double
     
        Randomize
     
        With Application.WorksheetFunction
     
            WACC = .NormInv(rnd(), Sheets("Parameters").Range("E18").Value, Userform1.a.Value())
            RG = .NormInv(rnd(), Sheets("Parameters").Range("E19").Value, Userform1.b.Value())
            MBE = .NormInv(rnd(), Sheets("Parameters").Range("E20").Value, Userform1.c.Value())
            CA = .NormInv(rnd(), Sheets("Parameters").Range("E21").Value, Userform1.d.Value())
            CAPEXRev = .NormInv(rnd(), Sheets("Parameters").Range("E22").Value, Userform1.e.Value())
     
        End With
     
        MsgBox DCF(WACC, _
                   RG, _
                   MBE, _
                   CA, _
                   CAPEXRev)
     
    End Sub
     
    Function DCF(WACC As Double, _
                 RG As Double, _
                 MBE As Double, _
                 CA As Double, _
                 CAPEXRev As Double)
     
        Dim FCF As Double
     
        FCF = MBE * CA * 0.67 - CAPEXRev * CA
     
        DCF = FCF / (WACC - RG)
     
    End Function
    Hervé.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Et accessoirement la fonction DCF devrait être déclarée comme renvoyant un type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function DCF(WACC As Double, RG As Double, MBE As Double, CA As Double, CAPEXRev As Double) as Double
        '...
        DCF = FCF / (WACC - RG)
        '...
    End Function
    [Edit] Et la fonction Rnd() existe déjà sous Excel.
    Ca ne marche pas avec un tableau ayant le même nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function DCF(WACC As Double, RG As Double, MBE As Double, CA As Double, CAPEXRev As Double)
    Dim rnd() As Double
     
    '...
            WACC = Application.WorksheetFunction.NormInv(rnd(), .Range("E18").Value, 0.2)

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/09/2014, 15h49
  2. [XL-2010] VBA - Problème en tentant de piloter l'affichage d'Outlook 2010
    Par Le Sage dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2013, 10h43
  3. [VBA] Problème d'affichage de Textbox
    Par Salent dans le forum Général VBA
    Réponses: 3
    Dernier message: 07/06/2013, 15h05
  4. [XL-2007] Problème d'affichage de l'aide VBA
    Par Theze dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/03/2012, 10h18
  5. [VBA] - Problème affichage Textbox
    Par Jeyjey1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2007, 18h09

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