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 :

macro ne fonctionne pas mais pas msg d'erreur


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut macro ne fonctionne pas mais pas msg d'erreur
    Bonjour à tous,
    Je débute en VBA et je me retrouve confrontée à un problème :
    Mon but final est d'afficher un arbre binomial qui représente le pricing d'une option financière.
    J'ai créé un userform qui permet d'entrer les variables de mon prix et qui donne un prix à l'option, ça fonctionne.
    J'ai ensuite mis un bouton (affichergraph) qui devrait permettre d'afficher l'arbre binomial.
    Mon problème est que ça ne fonctionne pas :
    Lorsque je mets seulement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub affichergraph_Click()
    Financial_Options.Hide
    sheets("Options tree").Activate
     
     
    End Sub
    Ca marche, j'ai bien mon userform qui disparait et ma page qui s'affiche mais dès que je rentre le reste du code (ci dessous) ça ne fonctionne pas. Rien ne se passe, je n'ai meme pas de message d'erreur...

    Merci beaucoup pour votre aide,


    Noémie


    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
    Private Sub affichergraph_Click()
     
     
    Dim i As Integer
    Dim j As Integer
    Dim a As Integer
    Dim b As Integer
     
     
    N = Nbstep.Value
    u = Exp(Volatilite.Value / 100 * (Time() / Nbstep.Value) ^ (1 / 2))
    S = Spot.Value
    d = 1 / u
    K = Strike.Value
     
     
     
    If CallButton.Value = True Then
    TypeOption = "Call"
    Else
    TypeOption = "Put"
    CP = callput(TypeOption)
     
    For i = 0 To N
     
     
    sheets("Options tree").Cells(1, i + 2).Value = i
     
        For j = 0 To i
        St = S * u ^ (i - j) * d ^ j
        If (St - K) > 0 Then prix = CP * (St - K) Else prix = 0
     
     
    sheets("Options tree").Cells(j + 2, i + 2).Value = St
    sheets("Options tree").Cells(4 + N + j, N).Value = prix
     
        Next j
    Next i
     
    For a = N - 1 To 0
    For b = a To 0
     
    If sheets("Options tree").Cells(4 + N + b, a + 2).Value <> 0 _
    Then sheets("Options tree").Cells(4 + N + b - 1, a + 1).Value = _
    (sheets("Options tree").Cells(4 + N + b, a + 2).Value * d + sheets("Options tree").Cells(4 + N + b - 1, a + 2).Value * u) * Exp(r * Time()) _
    Else sheets("Options tree").Cells(4 + N + b, N).Value = 0
     
     
    Next b
    Next a
     
     
     
     
    Financial_Options.Hide
    sheets("Options tree").Activate
     
     
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    La touche F8 est ton amie. Clique dans ma macro et appuie sur "F8". Le code va s'exécuter ligne par ligne. Tu peux vérifier que le code est conforme et que chaque variable ou autre valeur est correcte en passant le curseur dessus. Dans la fenêtre VE, affiche la fenêtre des variables locales (Affichage, fenêtre variables locales), c'est un autre moyen de contrôler la valeur des variables.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Merci mais....
    Merci beaucoup Daniel,
    Mais j'ai essayé et je ne vois toujours pas où ça bloque. Pensez-vous que ce soit lorsque je déclare mes variables ? Le fait qu'il n'y ait pas de message d'erreur indique-t-il quelque chose ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Le fait qu'il n'y ait pas de message d'erreur indique-t-il quelque chose ?
    Il est probable que ton problème vient de tes données. Est-ce que tu peux mettre un classeur exemple - sans données confidentielles - en pièce jointe ?

  5. #5
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Il ne se passe rien de rien : pas de modif de feuille, pas de fermeture du formulaire, pas d'exécution qui ne s'arrête jamais ?

    Il y a déjà une erreur à corriger. Dans une boucle For ... Next décroissante, il faut préciser le pas. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For a = N - 1 To 0 step -1
    Autre point, si tu veux fermer le formulaire et pas seulement le masquer, utilise Unload au lieu de Hide.

    Un petit conseil : utilise l'indentation du code pour une meilleurs lisibilité.

    Cordialement,

    PGZ

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    En fait j'ai modifié mon code et maintenant ça marche, il manque seulement la partie du code surlignée ci dessous qui ne s'affiche pas sur la feuille Excel.Je pense que cela vient de ma bouche "for" qui n'est pas au bon endroit.

    Si besoin je peux mettre le fichier en PJ sinon

    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
    Private Sub CommandButton1_Click()
    
    Dim i As Integer
    Dim j As Integer
    Dim a As Integer
    Dim b As Integer
    
    N = Nbstep.Value
    v = Volatilite.Value
    u = Exp(v / 100 * (Time() / N) ^ (1 / 2))
    S = Spot.Value
    d = 1 / u
    K = Strike.Value
    r = Riskfreerate.Value / 100
    
    sheets("Options tree").Range("B2").Value = S
    
    For i = 0 To N
    
    sheets("Options tree").Cells(1, i + 2).Value = i
    
        For j = 0 To i
        St = S * u ^ (i - j) * d ^ j
        If (St - K) > 0 Then prix = St - K Else prix = 0
    
    sheets("Options tree").Cells(j + 2, i + 2).Value = St
    sheets("Options tree").Cells(4 + N + j, N * i ^ 0 + 2).Value = prix
    
    Next j
    Next i
    
    For a = N - 1 To 0
    For b = a To 0
    If sheets("Options tree").Cells(4 + N + b + 1, a + 1).Value = 0 _
    Then sheets("Options tree").Cells(4 + N + b, a).Value = 0 Else sheets("Options tree").Cells(4 + N + b, a).Value _
    = (sheets("Options tree").Cells(4 + N + b + 1, a + 1).Value * d + sheets("Options tree").Cells(4 + N + b, a + 1).Value * u) * Exp(r * Time() _
    )
    
    Next b
    Next a
    
    Financial_Options.Hide
    sheets("Options tree").Activate
    
    End Sub
    Maintenant j'ai ce code :
    Merci pour tous ces conseils, j'en ai tenu compte mais j'ai maintenant un (dernier ?) problème :
    J'ai une erreur 1004 sur la partie en gras du 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
    Private Sub CommandButton1_Click()
    
    Dim i As Integer
    Dim j As Integer
    Dim a As Integer
    Dim b As Integer
    
    N = Nbstep.Value
    v = Volatilite.Value
    u = Exp(v / 100 * (Time() / N) ^ (1 / 2))
    S = Spot.Value
    d = 1 / u
    K = Strike.Value
    r = Riskfreerate.Value / 100
    
    sheets("Options tree").Range("B2").Value = S
    
    For i = 0 To N
    
    sheets("Options tree").Cells(1, i + 2).Value = i
    
        For j = 0 To i
        St = S * u ^ (i - j) * d ^ j
        If (St - K) > 0 Then prix = St - K Else prix = 0
    
    sheets("Options tree").Cells(j + 2, i + 2).Value = St
    sheets("Options tree").Cells(4 + N + j, N * i ^ 0 + 2).Value = prix
    
    For a = N - 1 To 0 Step -1
    For b = a To 0 Step -1
    
    If sheets("Options tree").Cells(4 + N + b + 1, a + 1).Value = 0 _
    Then sheets("Options tree").Cells(4 + N + b, a) = "" Else sheets("Options tree").Cells(4 + N + b, a).Value _
    = (sheets("Options tree").Cells(4 + N + b + 1, a + 1).Value * d + sheets("Options tree").Cells(4 + N + b, a + 1).Value * u) * Exp(r * Time() _
    )
    
    Next b
    Next a
    
    Next j
    Next i
    
    Financial_Options.Hide
    sheets("Options tree").Activate
    
    End Sub

  7. #7
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir,

    Du coup je te renouvelle le conseil de soigner la présentation du code et de son indentation. Par exemple, avec la partie qui lève l'erreur 1004
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Sheets("Options tree").Cells(4 + N + b + 1, a + 1).Value = 0 Then
        Sheets("Options tree").Cells(4 + N + b, a) = ""
    Else
        Sheets("Options tree").Cells(4 + N + b, a).Value = (Sheets("Options tree").Cells(4 + N + b + 1, a + 1).Value * d + Sheets("Options tree").Cells(4 + N + b, a + 1).Value * u) * Exp(r * Time())
    End If
    Est une écriture plus clair.

    Pour l'erreur cela peut venir du contenu des cellules, puisque tu fais un calcul.
    Ce que tu peux faire, c'est exécuter le code et quand il s'arrête sur erreur ouvrir le debugueur et passer la souris sur les différents termes pour en vérifier les valeurs, notamment les contenus des cellules. Tu trouveras peut-être ce qui pose le pb à ce moment-là de l'exécution.

    Cordialement,

    PGZ

Discussions similaires

  1. Macro fonctionne en mode Pas à Pas mais pas en une fois
    Par FLO040988 dans le forum Général VBA
    Réponses: 2
    Dernier message: 03/04/2014, 14h08
  2. [XL-2007] Macro fonctionne en pas à pas mais pas en raccourci clavier
    Par Alexandrel dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2012, 17h25
  3. Macro qui plante, mais pas en pas à pas
    Par alacoume dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/11/2011, 15h18
  4. [MySQL] Fonctionne bien mais pas tout le temps
    Par dlamo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/08/2007, 20h04
  5. [debutant]prog fonctionne pas mais pas d'erreurs
    Par ~Brouette~ dans le forum C
    Réponses: 45
    Dernier message: 07/12/2006, 14h52

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