VBA : nombre aléatoire suivant une loi normale

Signaler
Messages postés
1
Date d'inscription
vendredi 1 février 2008
Statut
Membre
Dernière intervention
1 février 2008
-
Messages postés
1
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
2 avril 2008
-
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
A voir également:

6 réponses

Messages postés
116
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
10 avril 2013
1
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...
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
déplacé de VBNET vers VBA !!
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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
Messages postés
1
Date d'inscription
vendredi 9 juin 2006
Statut
Membre
Dernière intervention
2 avril 2008
1
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,