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 :

problème vba simulation "Argument ou appel de procédure incorrect" [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut problème vba simulation "Argument ou appel de procédure incorrect"
    Bonjour

    je souhaite effectuer une simulation sur excel 2007 à partir d'un produit structuré.

    J'ai trouvé sur un livre, un code cependant lorsque je veux lancer l'application il est inscrit : "Argument ou appel de procédure incorrect"

    l'erreur est présente dès la première ligne

    voici le code :

    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
    69
    70
    71
    72
    73
    74
    Sub CPPI()
     
     
        ' Paramétrage du sous-jacent
        S0 = 100
        mu = -0.08
        sigma = 0.3
     
        ' Monétaire
        rf = 0.03
     
        Plancher = 90
        Tolérance = 0.3
        Mstar = 20
     
        ' Paramètres de simulation
        Nb_Points = 252
        dt = 1 / Nb_Points
        Nb_Simuls = 1
        ReDim Perf(Nb_Simuls, 1) As Double
        ReDim Valo(Nb_Points, 1) As Double
        ReDim cours(Nb_Points, 1) As Double
        ReDim pourcent_actions(Nb_Points, 1) As Double
        ReDim couss(Nb_Points, 1) As Double
     
     
        For i = 1 To 1
     
     
     
            coussin = S0 - Plancher
            Position_Actions = Mstar * coussin
            Position_Obligs = S0 - Position_Actions
            Valo_Position = S0
     
            Spot = S0
     
            For j = 1 To Nb_Points
     
                Taux_Renta = Taux_Renta_Action(mu, sigma, dt)
                Spot = Spot * Exp(Taux_Renta)
                Position_Actions = Position_Actions * Exp(Taux_Renta)
                Position_Obligs = Position_Obligs * Exp(rf * dt)
                Valo_Position = Position_Actions + Position_Obligs
                pourcent_actions(j, 1) = Position_Actions / Valo_Position
                Valo(j, 1) = Valo_Position
                cours(j, 1) = Spot
                coussin = Valo_Position - Plancher
                couss(j, 1) = coussin
                Multiple = Position_Actions / coussin
     
                If Multiple >= Mstar * (1 + Tolérance) Or Multiple <= Mstar * (1 - Tolérance) Then
                    Position_Actions = Mstar * coussin
                    Position_Obligs = Valo_Position - Position_Actions
                End If
            Next j
     
     
        Perf(i, 1) = Valo_Position
        Next i
    '    Worksheets("Feuil1").Activate
    '    Range(Cells(2, 1), Cells(Nb_Simuls + 1, 1)).Value = Perf
    '    Call Noyau.Noyau_Gaussien
    Worksheets("Feuil2").Activate
    Range("A1:A252").Value = Valo
    Range("B1:B252").Value = cours
    Range("C1:C252").Value = pourcent_actions
    Range("D1:D252").Value = couss
     
    End Sub
    Function Taux_Renta_Action(mu, sigma, dt)
        epsilon = WorksheetFunction.NormSInv(Rnd)
        Taux_Renta_Action = (mu - sigma ^ 2 / 2) * dt + sigma * epsilon * Sqr(dt)
    End Function
    Cependant dans le fichier il y a 4 modules et ca c'est seulement le premier.

    Merci pour votre aide!!!!!!!

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    J'ai testé le code et hormis la partie Multiple, ça fonctionne.
    Pour l'optimasation, on devrait déclarer convenablement les variables
    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
    Sub CPPI()
    Dim So As Integer, i As Integer, j As Integer, Nb_Points As Integer, Plancher As Integer, Mstar As Integer
    Dim Nb_Simuls As Integer, Coussin As Integer, Position_Actions As Integer, Valo_Position As Integer
    Dim Position_Obligs As Integer, Spot As Integer
    Dim Mu As Double, Sigma As Double, Rf As Double, dT As Double, Tolerance As Double, Taux_Renta As Double
    Dim Multiple As Double
    Dim Perf() As Double, Valo() As Double, Cours() As Double, Pourcent_Actions() As Double, Couss() As Double
     
    'Paramétrage du sous-jacent
    So = 100: Mu = -0.08: Sigma = 0.3
    'Monétaire
    Rf = 0.03
    Plancher = 90: Tolerance = 0.3: Mstar = 20
    'Paramètres de simulation
    Nb_Points = 252
    Nb_Simuls = 1
     
    ReDim Perf(1 To Nb_Simuls, 1 To 1)
    ReDim Valo(1 To Nb_Points, 1 To 1)
    ReDim Cours(1 To Nb_Points, 1 To 1)
    ReDim Pourcent_Actions(1 To Nb_Points, 1 To 1)
    ReDim Couss(1 To Nb_Points, 1 To 1)
    dT = 1 / Nb_Points
     
    For i = 1 To Nb_Simuls
        Coussin = So - Plancher
        Position_Actions = Mstar * Coussin
        Position_Obligs = So - Position_Actions
        Valo_Position = So
        Spot = So
        For j = 1 To Nb_Points
            Taux_Renta = Taux_Renta_Action(Mu, Sigma, dT)
            Spot = Spot * Exp(Taux_Renta)
            Position_Actions = Position_Actions * Exp(Taux_Renta)
            Position_Obligs = Position_Obligs * Exp(Rf * dT)
            Valo_Position = Position_Actions + Position_Obligs
            Pourcent_Actions(j, 1) = Position_Actions / Valo_Position
            Valo(j, 1) = Valo_Position
            Cours(j, 1) = Spot
            Coussin = Valo_Position - Plancher
            Couss(j, 1) = Coussin
            If Coussin <> 0 Then
                Multiple = Position_Actions / Coussin
            Else
                Multiple = 0
            End If
     
            If Multiple >= Mstar * (1 + Tolerance) Or Multiple <= Mstar * (1 - Tolerance) Then
                Position_Actions = Mstar * Coussin
                Position_Obligs = Valo_Position - Position_Actions
            End If
        Next j
        Perf(i, 1) = Valo_Position
    Next i
    With Worksheets("Feuil2")
        .Range("A1:A252").Value = Valo
        .Range("B1:B252").Value = Cours
        .Range("C1:C252").Value = Pourcent_Actions
        .Range("D1:D252").Value = Couss
    End With
    End Sub
    Function Taux_Renta_Action(ByVal Mu As Double, ByVal Sigma As Double, ByVal dT As Double) As Double
    Dim Epsilon As Double
     
    Epsilon = WorksheetFunction.NormSInv(Rnd)
    Taux_Renta_Action = (Mu - Sigma ^ 2 / 2) * dT + Sigma * Epsilon * Sqr(dT)
    End Function

  3. #3
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut
    Merci pour tous maintenant il ne me rest juste qu'a comprendre quelques parametre

    merci encore pour tous

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut
    Cependant le multiple est très important, sinon j'ai un autre code plus simple mais qui connait également un dysfonctionnement :

    j'ai inséré des variables comme précédemment:

    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
    Sub CPPI() 
    Dim So As Integer, i As Integer, j As Integer
    Dim PF As Integer, S As Integer, T As Integer, pas As Integer, Garantie As Integer
    Dim Mu As Double, Sigma As Double, R As Double, dT As Double, m As Double, exposition As Double
    Dim Perf() As Double, Valo() As Double, Cours() As Double, Pourcent_Actions() As Double, Coussin() As Double, Cash() As Double
     
    PF = 100
    S = 100
    T = 1
    m = 3
    R = 0.05
    Mu = 0.1
    Sigma = 0.2
    pas = 52
    dT = T / pas
    Garantie = 100
    Range("prix").Offset(0, 0) = S
    For i = 1 To pas
    Coussin = PF - (Garantie * Exp(-R * (T - i * dT)))
    Range("coussin").Offset(i, 0) = Coussin
    exposition = Coussin * m
    Range("exposition").Offset(i, 0) = exposition
    Cash = PF - exposition
    Range("cash").Offset(i, 0) = Cash
    Sminus1 = S
    eps = Application.NormSInv(Rnd)
    S = S + (Mu * S * dT) + (Sigma * S * eps * Sqr(dT))
    Range("prix").Offset(i, 0) = S
    PF = (exposition * (S / Sminus1)) + (Cash * Exp(R / 52))
    Range("portefeuille").Offset(i, 0) = PF
    Next i
    End Sub
    je suis désolé mais j'ai vraiment besoin d'un code

    merci pour tout

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    As tu au moins testé?
    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
    Sub CPPI()
    Dim Garantie As Integer, PF As Integer, T As Integer, m As Integer, i As Integer, Pas As Integer
    Dim R As Double, S As Double, So As Double, Mu As Double, Sigm As Double, dT As Double, Cash As Double
    Dim Coussin As Double, Exposition As Double, Eps As Double, Sminus1 As Double, Sigma As Double
    Dim tPrix() As Double, tCoussin() As Double, tExposition() As Double, tCash() As Double, tPorteFeuille() As Double
     
     
    Garantie = 100: PF = 100: So = 100: T = 1: m = 3
    R = 0.05: Mu = 0.1: Sigma = 0.2: Pas = 52
     
    dT = T / Pas
    ReDim tPrix(1 To Pas, 1 To 1): ReDim tCoussin(1 To Pas, 1 To 1): ReDim tExposition(1 To Pas, 1 To 1)
    ReDim tCash(1 To Pas, 1 To 1): ReDim tPorteFeuille(1 To Pas, 1 To 1)
     
    S = So
    For i = 1 To Pas
        Coussin = PF - (Garantie * Exp(-R * (T - i * dT)))
        tCoussin(i, 1) = Coussin
        Exposition = Coussin * m
        tExposition(i, 1) = Exposition
        Cash = PF - Exposition
        tCash(i, 1) = Cash
        Sminus1 = S
        Eps = Application.NormSInv(Rnd)
        S = S + (Mu * S * dT) + (Sigma * S * Eps * Sqr(dT))
        tPrix(i, 1) = S
        PF = (Exposition * (S / Sminus1)) + (Cash * Exp(R / Pas))
        tPorteFeuille(i, 1) = PF
    Next i
    With Sheets("Feuil1")
        .Range("prix") = So
        .Range("prix").Offset(1, 0).Resize(Pas, 1).Value = tPrix
        .Range("coussin").Offset(1, 0).Resize(Pas, 1).Value = tCoussin
        .Range("exposition").Offset(1, 0).Resize(Pas, 1).Value = tExposition
        .Range("cash").Offset(1, 0).Resize(Pas, 1).Value = tCash
        .Range("portefeuille").Offset(1, 0).Resize(Pas, 1).Value = tPorteFeuille
    End With
    End Sub

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 9
    Par défaut
    J'ai bien testé avant de publier ce message. Je ne me permettrais pas de vous communiquer quelques choses que je n'ai pas essayé après c'est vrai je ne suis pas très doué en Excel.

    il beug a ce niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Sheets("Feuil1")
        .Range("prix") = So
        .Range("prix").Offset(1, 0).Resize(Pas, 1).Value = tPrix
        .Range("coussin").Offset(1, 0).Resize(Pas, 1).Value = tCoussin
        .Range("exposition").Offset(1, 0).Resize(Pas, 1).Value = tExposition
        .Range("cash").Offset(1, 0).Resize(Pas, 1).Value = tCash
        .Range("portefeuille").Offset(1, 0).Resize(Pas, 1).Value = tPorteFeuille
    End With
    End Sub
    quand je fais débogage il surligne en jaune ce que je vous est mis en rouge.

    Merci

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

Discussions similaires

  1. [XL-2003] Shell et Erreur d'exécution 5: Argument ou appel de procédure incorrect
    Par akr54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/06/2010, 14h15
  2. Erreur d'exécution 5 ; Argument ou appel de procédure Incorrect
    Par amirad dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 31/12/2009, 19h34
  3. Réponses: 4
    Dernier message: 02/09/2008, 21h43
  4. Workbooks.Open : Erreur "Argument ou appel de procédure incorrect"
    Par Kropernic dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 31/07/2008, 09h49
  5. Argument ou appel de procédure incorrect lors du lancement d'un .bat
    Par 512banque dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/03/2008, 17h23

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