Excel : une macro qui ne marche qu'avec F8 !!

sabrine12 -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour

Il m'arrive un truc bizarre avec ma macro excel : ça ne marche pas quand je lance ma macro, par contre quand je fait tourner la macro pas à pas, avec F8, cela fonctionne...je suis perplexe, quelqu'un a-t-il une explication et surtout...une solution?

Merci d'avance pour votre aide !!
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Ca serait bien de mettre un peu plus de détail parce là sans boule de cristal c'est difficile... :-)
    Met la macro ou le morceau concerné et explique ce qui ne fonctionne pas
    eric
    0
  2. sabrine12
     
    Oui , bien sur, mais je ne vois vraiment pas où ça coince alors je me demandais si cela arrivait souvent que la macro passe sur un certain passage du code, sauf quand on l'execute pas à pas. Je te donne le morceau de macro qui ne passe pas ( ce qui est en gras), dis moi si tu as besoin de plus ( ou de moins!) de precisions...

    Sub macro_eur(j)
    'Sheets("MDSI_COB_E")

    plaged1 = 0
    nbindice = 0
    plagef1 = 0
    expiry1 = 0
    plaged2 = 0
    plagef2 = 0
    linge1 = 0

    indice = Feuil12.Range("A" & j)

    test = 0

    For i = 1 To Sheets("MDSI_COB_E").Range("D2").End(xlDown).Row
    If Sheets("MDSI_COB_E").Range("D" & i).Value = indice Then
    test = 1
    End If
    Next i

    If test = 1 Then

    'définir la plage de cellules correpondant à l'indice
    plaged1 = Application.WorksheetFunction.Match(indice, Sheets("MDSI_COB_E").Range("D:D"), 0)
    nbindice = Application.WorksheetFunction.CountIf(Sheets("MDSI_COB_E").Range("D:D"), indice)
    plagef1 = plaged1 + nbindice - 1

    'trouver la plus petite expiry
    expiry1 = Application.WorksheetFunction.Min(Sheets("MDSI_COB_E").Range("F" & plaged1 & ":F" & plagef1))
    plaged2 = Application.WorksheetFunction.Match(expiry1, Sheets("MDSI_COB_E").Range("F" & plaged1 & ":F" & plagef1), 0)
    plaged2 = plaged2 + plaged1 - 1
    nbexpiry1 = Application.WorksheetFunction.CountIf(Sheets("MDSI_COB_E").Range("F" & plaged1 & ":F" & plagef1), expiry1)
    plagef2 = plaged2 + nbexpiry1 - 1

    'trouver le relative strike le plus proche de 1 pour cette expiry
    minrs = 0

    For k = plaged2 To plagef2
    If Abs(1 - minrs) > Abs(1 - Sheets("MDSI_COB_E").Range("G" & k).Value) Then
    minrs = Sheets("MDSI_COB_E").Range("G" & k).Value
    End If
    Next k

    ligne1 = Application.WorksheetFunction.Match(minrs, Sheets("MDSI_COB_E").Range("G" & plaged2 & ":G" & plagef2), 0)
    ligne1 = ligne1 + plaged2 - 1
    'ligne1 = Application.WorksheetFunction.Match(aplication.WorksheetFunction.Min(aplication.WorksheetFunction.Abs(1 - Sheets("MDSI_COB_E").Range("C" & plaged2 & ":L" & plagef2))), Abs(1 - Sheets("MDSI_COB_E").Range("C" & plaged2 & ":L" & plagef2)), 0)

    'alimenter la feuille d'analyse avec les valeurs trouvées
    'relatice_strike
    Feuil12.Range("F" & j).Value = Sheets("MDSI_COB_E").Range("G" & ligne1).Value
    'absolute_strike
    Feuil12.Range("E" & j).Value = Sheets("MDSI_COB_E").Range("H" & ligne1).Value
    'time_to_expiry
    Feuil12.Range("G" & j).Value = Sheets("MDSI_COB_E").Range("F" & ligne1).Value
    'implied_volatility
    Feuil12.Range("J" & j).Value = Sheets("MDSI_COB_E").Range("J" & ligne1).Value

    'trouver la 2ème plus petite expiry

    If Cells(plagef2, 4) = indice Then
    expiry2 = Application.WorksheetFunction.Min(Sheets("MDSI_COB_E").Range("F" & plagef2 + 1 & ":F" & plagef1))
    plaged3 = Application.WorksheetFunction.Match(expiry2, Sheets("MDSI_COB_E").Range("F" & plagef2 + 1 & ":F" & plagef1), 0)
    plaged3 = plagef2 + 1 + plaged3 - 1
    nbexpiry2 = Application.WorksheetFunction.CountIf(Sheets("MDSI_COB_E").Range("F" & plagef2 + 1 & ":F" & plagef1), expiry2)
    plagef3 = plagef2 + 1 + nbexpiry2 - 2


    'trouver le relative strike le plus proche de 1 pour cette expiry
    min2rs = 0

    For l = plaged3 To plagef3
    If Abs(1 - min2rs) > Abs(1 - Sheets("MDSI_COB_E").Range("G" & l).Value) Then
    min2rs = Sheets("MDSI_COB_E").Range("G" & l).Value
    End If
    Next l

    ligne2 = Application.WorksheetFunction.Match(min2rs, Sheets("MDSI_COB_E").Range("G" & plaged3 & ":G" & plagef3), 0)
    ligne2 = ligne2 + plaged3 - 1

    'alimenter la feuille d'analyse avec les valeurs trouvées
    'relatice_strike
    Feuil12.Range("F" & j + 1).Value = Sheets("MDSI_COB_E").Range("G" & ligne2).Value
    'time_to_expiry
    Feuil12.Range("G" & j + 1).Value = Sheets("MDSI_COB_E").Range("F" & ligne2).Value
    'implied_volatility
    Feuil12.Range("J" & j + 1).Value = Sheets("MDSI_COB_E").Range("J" & ligne2).Value

    End If
    End If

    End Sub
    0
  3. sabrine12
     
    c'est bon! c'est reglé !!! j'ai juste enlevé la condition restrictive If Cells(plagef2, 4) = indice Then et ça fonctionne, je n'en demandais pas plus...

    merci beaucoup !
    0
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Ah ben de rien,
    c'est quand tu veux si tu n'as besoin de rien... ;-)
    0