Simuler en VBA sous excel

Fermé
Finance101 - 4 févr. 2010 à 21:43
 Finance101 - 11 févr. 2010 à 02:51
Bonjour,

J'aimerai faire une simulation avec les variables suivantes en programmant sous VBA dans excel:

soit Y = A*B dans la cellule A1 par exemple

A = constante

B = suit une loi normale (0,1), bref est aléatoire.

J'aimerai dire a Excel simule 1000 fois la valeur de Y en générant 1000 fois B, enregistre cela dans une matrice quelque part dont je n'ai pas besoin d'accéder aux valeurs simuler.

Par contre par après j'aimerai que tu me donnes des valeurs statistiques de Y simuler.

soit en donc en utilisant les fonctions référence d' Excel( moyenne. percentile) je veux aller chercher ces informations a partir de la cellue A1 ou a été simuler Y.

par exemple écrire dans la cellule B1 = moyenne(A1) et avoir automatiquement le résultat.

Si c'est pas possible, une solution dans la quelle les valeurs statistiques de Y dans A1( moyenne, quantiles,etc.) sont automatiquement calculées serait aussi acceptable.

Merci d'avance pour toute réponse

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 févr. 2010 à 10:06
Bonjour,

Difficile de t'aider si on est un cancre en math...
la valeur "B" varie être quelles limites et avec quelle précision ?
0
Bonjour,

"B" est aléatoire de moyenne zero et d'ecart type 1, en clair il peut etre positif ou negatif mais mettons si on simule 1000 fois on veut que la moyenne de B soit nulle. L'ecart type de 1 c'est pour dire que l'on veut tres rarement des valeurs de plus grand que 1 ou plus petit que -1 en clair en moyenne B est plus petit ou egale a la valeur absolue de 1.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
5 févr. 2010 à 18:38
Re,

pour calculer la moyenne de 1000 fois A1* valeur aléatoire entre 0 et 1

Option Base 1
Sub stat()
Dim tablo(1000)

test = Range("A1")
Randomize
For cptr = 1 To 1000
tablo(cptr) = test * Rnd()
Next
MsgBox "moyenne: " & Application.Average(tablo)
End Sub

pour les autres résultats, il faut utiliser la traduction des fonctions stat en anglais (démarrer-rechercher:VBAList.xls)
0
Merci pour ta reponse,

J'ai cependant quelques questions par rapport a ta reponse:

1) comment je fais pour avoir la solution " moyenne" réecrite dans la feuille excel plutot que de l'avoir en message box.

2) J'aimerai inclure une sorte de boucle en fait au lieu de faire la simulation sur la cellule A1 seulement, j'aimerai avoir une simulation dans les 4 cellules A1:B2, j'imagine qu il faut declarer un tableau de 1000 pour chaque cellule, mais je sais pas trop comment le faire.

3) enfin comme pour ma premiere question j'aimerai pouvoir enregistrer les datas moyennes dans un tableau de 4 aussi pour pouvoir continuer a faire manuellement les calculs.

le but dans tout ca c'est d'avoir 2 tableaux un tableau de 4 cellules pour la simulation qui va generer un tableau de 4 cellules ayant l'information statistique en l'occurence la moyenne et de pouvoir faire par apres des manipulations manuelles avec dans excel.

Merci d'avance pour toute reponse.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 févr. 2010 à 10:40
Bonjour,

essaies:
Option Base 1
Sub stat(cellule_test, cellule_moy)
Dim test As Double
Dim tablo(1000)

test = Range(cellule_test)
Randomize
For cptr = 1 To 1000
tablo(cptr) = test * Rnd()
Next
Range(cellule_moy) = "moyenne sur test en " & cellule_test & ": " & Application.Average(tablo)
End Sub

Sub plusieurstest()
Application.ScreenUpdating = False
stat "A1", "E1"
stat "B1", "E2"
stat "A2", "E3"
stat "B2", "E4"
End Sub


A1:B2 cellules de test
E1:E4: cellules de résultats

ainsi tu peux ajouter de nouveaux test et placer les résultats où tu le souhaites

cordialement,
Michel
0
Merci Michel

Une dernière question qui est différente de ma question initiale:

As tu une idée de comment générer des nombres aléatoires corrélés.

Par exemple:

On a le prix d'Aluminium, Cuivre & OR comme variables. Je veux générer un array (3,5) de nombres aléatoires pour chaque metal mais je veux qu'ils soit corrélés( en colonne j ai mettons les jours: lundi mardi...vendredi et en ligne j ai les 3 métaux) . Ainsi mettons qu'on est dimanche et que je veux calculer l'evolution du cuivre pour lundi ( cuivre (lundi) = cuivre(dimanche)*(1+aléatoire)), mais si la correlation cuivre aluminium est de 98% avoir un aleatoire de 0,25 pour cuivre pour lundi et -0,8 pour aluminium ne fait pas de sens puisque j'aurai une evolution des prix qui serait inverse a la correlation des 2 metaux.

Donc voila mon petit probleme, si tu as une solution je suis ouvert a toute suggestion.

Merci encore tes explications & code m'ont aidé a amélioré mon algorithmique en générale et facilité ma compréhension de certaines spécificité de VBA.
0