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

sabrine12 -  
eriiic Messages postés 25847 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 !!
A voir également:

4 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
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
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Ah ben de rien,
c'est quand tu veux si tu n'as besoin de rien... ;-)
0