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

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. Contributeur
    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
    1. 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
      1. 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
        1. Contributeur
          Ah ben de rien,
          c'est quand tu veux si tu n'as besoin de rien... ;-)
          0