Bonjour à toutes et à tous,
Je me suis balladé sur le forum en trouvant des débuts de réponses mais n'étant qu'un novice en VBA je n'ai pas su régler mon problème.
Mon problème est le suivant :
Je souhaite simuler un grand nombre de portefeuilles (10 000) via la simulation de Monte Carlo. Ne sachant pas comment faire, j'ai décidé d'en simuler un. J'ai utilisé la formule =ALEA() afin que mes trajectoires soient complétement tirées au hasard.
A chaque fois que je valide une cellule, que j'enregistre ou que j'appuie sur F9 j'ai donc un nouveau portefeuille de simulé.
Afin de pallier à mon manque de connaissance en programmation Excel j'ai pensé à la chose suivante :
Enregister une macro lorsque je copie la ligne que je souhaite voir apparaitre (la valeur du portefeuille à la fin d'une période N) et faire un copier valeur.
L'avantage de cette méthode est qu'à chaque copier/coller valeur, elle me recharge un nouveau portefeuille et je peux donc obtenir plusieurs simulations.
Oui mais voilà... pour ce faire je dois à chaque fois me remettre sur une ligne et relancer la macro. Et je dois le faire 10 000 fois...
Savez-vous comment je peux intégrer un paramétrage VBA dans le code que j'ai enregistré afin d'avoir la possibilité lancer la macro simultanément sur les 10000 cellules ?
Le code est le suivant :
Sub TestMC()
'
' TestMC Macro
'
'
ActiveCell.FormulaR1C1 = "=R263C"
ActiveCell.Select
Selection.Copy
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToLeft)).Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=ActiveCell.Range("A11"), Type:= _
xlFillDefault
ActiveCell.Range("A11").Select
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-2, 0).Range("A11").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
ActiveCell.Offset(2, 0).Range("A11").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Je vous remercie par avance de votre aide et de votre temps.
C.
Je me suis balladé sur le forum en trouvant des débuts de réponses mais n'étant qu'un novice en VBA je n'ai pas su régler mon problème.
Mon problème est le suivant :
Je souhaite simuler un grand nombre de portefeuilles (10 000) via la simulation de Monte Carlo. Ne sachant pas comment faire, j'ai décidé d'en simuler un. J'ai utilisé la formule =ALEA() afin que mes trajectoires soient complétement tirées au hasard.
A chaque fois que je valide une cellule, que j'enregistre ou que j'appuie sur F9 j'ai donc un nouveau portefeuille de simulé.
Afin de pallier à mon manque de connaissance en programmation Excel j'ai pensé à la chose suivante :
Enregister une macro lorsque je copie la ligne que je souhaite voir apparaitre (la valeur du portefeuille à la fin d'une période N) et faire un copier valeur.
L'avantage de cette méthode est qu'à chaque copier/coller valeur, elle me recharge un nouveau portefeuille et je peux donc obtenir plusieurs simulations.
Oui mais voilà... pour ce faire je dois à chaque fois me remettre sur une ligne et relancer la macro. Et je dois le faire 10 000 fois...
Savez-vous comment je peux intégrer un paramétrage VBA dans le code que j'ai enregistré afin d'avoir la possibilité lancer la macro simultanément sur les 10000 cellules ?
Le code est le suivant :
Sub TestMC()
'
' TestMC Macro
'
'
ActiveCell.FormulaR1C1 = "=R263C"
ActiveCell.Select
Selection.Copy
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlToLeft)).Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=ActiveCell.Range("A11"), Type:= _
xlFillDefault
ActiveCell.Range("A11").Select
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-2, 0).Range("A11").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
ActiveCell.Offset(2, 0).Range("A11").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub
Je vous remercie par avance de votre aide et de votre temps.
C.