VBA : nombre aléatoire suivant une loi normale

slider41 Messages postés 1 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 1 février 2008 - 1 févr. 2008 à 16:56
sergentgarcia666 Messages postés 1 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 2 avril 2008 - 2 avril 2008 à 22:41
Bonjour,

Voila je suis débutant en programmation et je cherche à programmer sous excel et donc en VBA une fonction pour pricer les options par la méthode de monte carlo. Or, pour cela j'ai besoin de tirer des nombres aléatoires suivant une loi normale, quelqu'un peut il me dire comment faire? J'ai penser a faire un truc du genre loi.nomale.standard (alea()) mais excel  donne des nombres aléatoires compris entre 0 et 1 donc je ne pense pas que ce soit une méthode valable.

Merci pour votre aide

6 réponses

BLUEBIBUBBLE Messages postés 116 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 10 avril 2013 1
1 févr. 2008 à 18:26
Des nombres aléatoires compris entre 0 et 1 ...
... c'est parfait !

Tu as un NombreAleatoire compris entre 0 et 1

et tu veux un nombre compris entre 0 et 52 fait:
x = NombreAleatoire * 52

si tu veux un nombre compris entre 1 et 52 fait:
x = NombreAleatoire * 51+1

si tu veux un nombre entier compris entre 500 et 600 fait:
Dim x as long
x = NombreAleatoire * 100+500

etc...
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
2 févr. 2008 à 14:45
déplacé de VBNET vers VBA !!
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
2 févr. 2008 à 21:06
Si tu ne veux pas de nombre entre 0 et 1 mais plutôt entre 2 bornes, tu peux changer Alea() pour ALEA.ENTRE.BORNES(10;20), 10 et 20 étant les limites min et max

Sinon, tu peux modifier la fonction Alea comme ceci
=ENT(ALEA()*100)
qui retourne un entier résultant de la fonction Alea, mais aussi multiplié par 100 pour ne pas avoir de valeurs entre 0 et 1 mais plutôt entre 0 et 100

Et si tu veux le faire en VBA, regarde la fonction Rnd associée à Randomize

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
2 févr. 2008 à 22:01
Bonsoir,

La question de Slider, n'est pas comment obtenir un nb aléatoire entre deux bornes, mais comment obtenir un nb aléatoire suivant la loi normale... C'est très différent. Dans le premier cas, les nb ont une répartition équiprobable (tous les nb sortiront autant de fois à peu de chose près). Dans le second, les nb seront centrés sur une moyenne avec un écart type (à préciser)...

loi.nomale.standard (alea()) : n'est évidemment pas du tout la solution, puisque LOI.NORMALE.STANDARD est une fonction d'Excel, qui calcul l'aire sous la courbe de la loi normale... Rien à voir avec un nb aleatoire... D'ailleurs, Slider fait bien de douter de cette syntaxe, qui n'a aucun sens...

Je ne peux que conseiller mon modeste site, où j'ai programmé une fonction pour réaliser la génération d'un nb aléatoire suivant une loi plus complète (qui s'appelle L-Stable ou encore Lévy Stable ou Alpha Stable suivant le sens de Lévy) dont le cas particulier réalise un tirage suivant une loi normale...
http://fordom.free.fr/ cliquer sur ALEASTABLE

Amicalement,
Us.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 23 août 2018 21
2 févr. 2008 à 22:06
Salut US_30.
Merci pour l'explication. Je m'éclipse donc puisque ce n'est pas dans mes compétences, ces histoires de loi normale...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
sergentgarcia666 Messages postés 1 Date d'inscription vendredi 9 juin 2006 Statut Membre Dernière intervention 2 avril 2008 1
2 avril 2008 à 22:41
Bonjour Slid41,

A priori, la solution est assez simple puisqu'il suffit :
    1 - d'utiliser une fonction Random afin de simuler un tirage entre 0 et 1.
    2 - d'uitliser une fonction intégrée correspondant à la loi normale inversée.

Par la suite le code devra intégrer ceci :

Randomize
epsilon = WorksheetFunction.NormSInv(Rnd)

Il suffit ensuite de stocker les résultats des différentes trajectoires dans une variable indicée (une variable tableau) pour trouver son bonheur.

Bien à toi,
0