Créer des variables dans une Macro

Bonjour à tous et à toutes,

Je suis un grand novice en VBA j'aimerai savoir comment faire pour mettre des variables dans une macro.

Je joins le fichier car je ne suis pas sur d'être très clair dans mes explications.

J'ai créé une petite macro me permettant de lancer plusieurs simulations de portefeuille dans mon fichier Excel. Pour chaque simulation des statistiques sont copiées/collées (valeurs) dans une autre feuilles.

Il s'agit des statistiques du tableaux 'Simulations!N5:N8'.

Cette macro fonctionne correctement.

J'aimerai cependant ajouter un système me permettant de faire varier le poids de mes actifs dans le portefeuille.

Je m'explique : je souhaite simuler différente trajectoire pour un portefeuille avec différentes compositions.

J'aimerai augmenter la part d'actifs monétaires de 10% en 10% et alouer le restant avec des obligations et des actions.

Par exemple :

1er portefeuille : 0% d'actifs monétaires, 50% actions, 50% obligations

2ème portefeuille : 10% actifs monétaires, 90% (du restant à alouer) actions, 10% (du restant à alouer) obligations.

Le pas d'augmentation des actifs monétaires serait de 10% à chaque fois et l'allocation des actions diminuerai de 5% à chaque fois (donc les obligations augmenterais de 5%)

Il y aurai donc 400 portefeuilles d'allocations différentes.

10 portefeuilles d'allocations d'actifs monétaires différentes et dans chacun, 20 allocations Actions/obligations différentes.

Je peux le faire en manuel mais une macro me simplifierai grandement la chose... mais je ne sais pas si cela est possible.

Merci d'avance pour votre aide

49simulations.xlsm (153.39 Ko)

Salut et bienvenue sur le Forum,

Je ne comprends pas bien ton soucis. Tout d'abord tu as une erreur dans la cellule O14 de la feuille Simulation qui empêche de lancer ta macro correctement.

Ensuite j'ai compris que lorsque tu lances cette macro, ton tableau de la feuille Résultat est remplacé.

Mais comme en plus tu as une (ou des) formule aléatoire quelque part, à chaque recalcule, toute ta feuille est différente.

Maintenant, est-ce que tu voudrais que ta macro soit lancée 400 fois ???

Si oui, peux-tu nous fournir les 5 chiffres exacts des 5 premières combinaisons ? D'après ce j'ai compris ça serait :

0 % - 50 % - 50 %

10 % - 81 % (90% de 90%) - 9 % (le solde)

10% - 76.5 % (85 % de 90%) - 13.5 % (le solde)

20 % - 72 % (90 % de 80 %) - 8 % (le solde)

etc. ??????

Et toujours si ta macro doit être lancée 400 fois, veux-tu les résultats à la suite sur la feuille Résultat (c'est à dire 4000 lignes) ?

A te relire.

Oui c'est exactement ça.

Je crois que j'ai trouvé la solution.

J'ai créé un tableau dans l'onglet "donnée" recensant toutes les possibilités d'allocations que je souhaite obtenir.

A partir de là j'ai fait 1 simulation que j'ai C/C et j'ai exécuter la macro qui est la suivante :

Sub lancesimulation2()

Dim Nsimul As Integer, i As Integer

Dim TabResult() As Double

Dim colParametres As Integer, colResultat As Integer

Dim L As String, M As String

Application.ScreenUpdating = False

Application.EnableEvents = False

colParametres = 9

For j = 1 To 110

L = convertirLettre(colParametres)

Sheets("Données").Select

Range(L & "9:" & L & "12").Select

Selection.Copy

Sheets("Simulations").Select

Range("C5").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Nsimul = 1

ReDim TabResult(1 To 4, 1 To 1)

For i = 1 To Nsimul

Calculate

TabResult(1, i) = Range("N5")

TabResult(2, i) = Range("N6")

TabResult(3, i) = Range("N7")

TabResult(4, i) = Range("N8")

Next i

colResultat = (j - 1) + 1

M = convertirLettre(colResultat)

Sheets("Resultats").Select

Sheets("Resultats").Range(M & "2").Resize(4, 1) = TabResult

colParametres = colParametres + 1

Next j

Application.ScreenUpdating = True

Application.EnableEvents = True

End Sub

Function convertirLettre(L As Integer) As String

Dim i As Integer, j As Integer

If L > 26 Then

i = Int(L / 26)

j = (L Mod 26)

If j = 0 Then

i = i - 1

j = 26

End If

convertirLettre = Chr(64 + i) & Chr(64 + j)

Else

convertirLettre = Chr(64 + L)

End If

End Function

Function colonne(col As Integer) As String

If col > 26 Then colonne = Chr(64 + Int(col / 26)) Else colonne = ""

colonne = colonne & Chr(64 + (colonne Mod 26))

End Function

Ca m'a pris pas mal de temps mais ça marche à peu près comme je le veux.

Merci d'avoir répondu

Rechercher des sujets similaires à "creer variables macro"