Excel : une macro qui ne marche qu'avec F8 !!
Fermé
sabrine12
-
18 sept. 2007 à 07:29
eriiic Messages postés 24512 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 24 mars 2023 - 18 sept. 2007 à 12:15
eriiic Messages postés 24512 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 24 mars 2023 - 18 sept. 2007 à 12:15
A voir également:
- Excel : une macro qui ne marche qu'avec F8 !!
- Liste déroulante excel - Guide
- Formule excel - Guide
- Déplacer une colonne excel - Guide
- Convertir chiffre en lettre excel sans macro ✓ - Forum Excel
- Aller à la ligne excel - Guide
4 réponses
eriiic
Messages postés
24512
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 mars 2023
7 168
18 sept. 2007 à 08:05
18 sept. 2007 à 08:05
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
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
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
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
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 !
merci beaucoup !
eriiic
Messages postés
24512
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 mars 2023
7 168
18 sept. 2007 à 12:15
18 sept. 2007 à 12:15
Ah ben de rien,
c'est quand tu veux si tu n'as besoin de rien... ;-)
c'est quand tu veux si tu n'as besoin de rien... ;-)