Tirage Aléatoire Macro excel

Messages postés
3
Date d'inscription
mardi 4 avril 2006
Statut
Membre
Dernière intervention
5 avril 2006
- - Dernière réponse : us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
- 6 avril 2006 à 01:01
Bonjour a tous et merci à tous ceux qui tenteront de m' aider.

J'ai fouillé un peu sur les nombreuses pages du forum et je n'ai pas remarqué de topic identique (désolé si je me suis trompé)

Voila ma question:
Je réalise une macro VBA.
L'une des fonctions doit etre de lire les valeurs contenues dans la colonne A1 composée de "n" lignes et ensuite d'effectuer "n" tirages aléatoires parmis les valeurs de A1.
Je récupere ensuite les n valeurs tirées pour effectuer des calculs dessus (moyennes,quartiles ... et autres)
Je fais cela "m" fois
Il faut savoir qu'il s'agit d'échantillons assez importants (environ 10 000 lignes)

Si quelqu'un pouvait me donner une formule de tirage aléatoire parmis les valeurs d'une colonne, avec probabilité egale pour chaque ligne.

Je ne sais pas si mon post est tres clair donc s'il ne l'est pas, posez moi des questions.
Merci a vous.
Afficher la suite 

8 réponses

Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
0
Merci
Salut,

En effet, c'est moyennement clair...

Veux-tu générer N valeurs aléatoirement, et remplir la colonne A avec ? ou veux-tu, à partir d'une liste de nb connus les tirer aléatoirement ?

On a l'impression que tu veux faire les deux... ce qui ne serait pas utile...

Amicalement,
Us.
Messages postés
32
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
3 août 2006
0
Merci
Salut,

Randomize
nbreAleatoire=CInt(Math.rnd()*NombresDeLignes) ca suffit pas?

Si tu as autant de lignes, mieux vaut d'abord les mettre dans tableau, traiter le tableau et ensuite éventuellement écrire
Dim tab as Variant
tab=Range("A1:A10000"). Si tu connais pas ton nombre de lignes, va voir la fonction End(xlDown) par exemple du genre Range(Range("A1"),Range("A1").End(xlDown)) (à vérifier)
et après tu travailles sur le tableau plutôt que sur les cellules

Michael
Messages postés
3
Date d'inscription
mardi 4 avril 2006
Statut
Membre
Dernière intervention
5 avril 2006
0
Merci
Ok merci a vous d'essayer.

Je vais expliquer mon probleme un peu plus clairement en vous présentant "l'algo" que j'essaie de suivre :

-Inserer dans la Colonne A un nombre 'n' de lignes contenant des entiers
-tant que :
-Le nombre de tirages est inférieur au nombre que l'on désire faire :
-Tirer 'n' valeurs contenues dans la colonne A totalement aléatoirement avec probabilité identique
-Calculer la moyenne des valeurs tirées
-Calculer la médiane des valeurs tirées
-Calculer les premiers et 4 eme quartiles des valeurs tirées
-Caluler l'ecart type des valeurs tirées
-Afficher sur la ligne 'm' toutes les informations
-faire m = m + 1
-Fin Tant que

Voila qui doit etre plus clair.
Pour le moment je pensait utiliser une colonne tampon sur mon document excel ou je place les valeurs tirées à un tirage 'x' , je m'en sert pour calculer ce dont j'ai besoin puis au tirage 'x+1' je recommence en écrasant les valeurs de la colonne.
Bien sur ensuite pour l'optimisation je préfererais ne pas utiliser de colonne tampon mais plutot un tableau.
Mais bon je suis novice en VB donc j'y vais molo.Meme s'il ne faut pas que je traine trop.

Mon explication est elle plus claire ?
Une fois un tirage effectué et les traitements réalisés, je n'ai plus utilité du tirage que je peux écraser par le suivant.
Messages postés
32
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
3 août 2006
0
Merci
Deux solutions:
- que Excel sans VBA (doit y avoir des bibliothèques pour faire ces calculs de médiane et tout). Pour ca tu peux utiliser n cases dans la colonne B sur lesquelless tu mets =RAND()*nombres de lignes. Ca va te donner n valeurs aléatoires. Puis dans la colonne C, tu mets =INDIRECT("A" & Bi) avec Bi=B1 si tu es dans la ligne 1, B2 si dans colonne 2... COmme ca dans la colonne C tu as bien n valeurs aléatoires de A. Et la tu fais la moyenne, ... sur tes valeurs dans C
- dans VBA (probab plus rapide), va falloir que tu remplisses le tableau comme l'ai marqué dans message précédent puis que tu traites ce tableau.
Conclusion: à mon avis par VBA c'est mieux et plus rapide mais si tu en as besoin que pour qques tests, EXcel va suffire et tu n'as pas de risques d'erreurs. Si tu me donnes ton mail, peux t'envoyer un truc qui ressemble à ce que je t'ai marqué
Michael
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
0
Merci
Ben...yyouuuuuuuu...

Comme le dit micmerle, tu peux utiliser Excel sans VBA. Mais...

il faut utiliser les fonctions : =ALEA() qui renvoit un nb entre 0 et 1, avec même probabilité.
Ou pour un nb entre a et b utiliser : =ALEA()*(b-a)+a

Pour la moyenne : =Moyenne ( plage )
Pour l'ecart type : =Ecartype( plage )
Pour la médiane : =Mediane ( plage )
Pour le quartile : =QUARTILE(matrice;quart) avec quart entre 0 et 4, selon...

Tout ça, c'est des fonctions inclus dans Excel... Pas besoin de s'embêter la vie à refaire ce qui est déjà très bien fait.

Maintenant, comme on ne sait pas à quoi cela te servira, [car en effet, toutes les informations que tu tentes d'obtenir sont déduisible en mathématique, par exemple la moyenne vaudra un peu près (a+b)/2 :); ] peut-être le mieux, c'est plutôt de faire une macro qui recopie ces données à ta place... enfin cela dépend du but recherché...

Amicalement,
Us.
Messages postés
3
Date d'inscription
mardi 4 avril 2006
Statut
Membre
Dernière intervention
5 avril 2006
0
Merci
Oui j'ai bien essayé avec les fonctions excel mais elles me posent de nombreux problemes :
Réactualisation a chaque tirage de toutes les cellules actives :
C'est a dire :
C2 = MOYENNE(colonne contenant le tirage 2)
C3 = MOYENNE(colonne contenant le tirage 2)
Cn = MOYENNE(colonne contenant le tirage n)
Le soucis c'est qu'une fois que C1 affiche la moyenne du tirage 1, le tirage 2 arrive, C2 affiche la moyenne, mais C1 s'actualise avec la nouvelle moyenne car je place mes tirages sur une meme colonne que j'ecrase...
Comme dire a une cellule d'arreter de bosser une fois qu'elle a fait son boulo ?? il doit y avoir une fonction
qui l'arrete ....
Sinon autre question : y a t'il une fonction (et non un bouton) qui fait le tri d'une colonne Excel ?
du genre C = SORT("C1" ..) <<c'est un exemple
Messages postés
32
Date d'inscription
mercredi 24 mars 2004
Statut
Membre
Dernière intervention
3 août 2006
0
Merci
Pas moyen je pense... Sauf à coder en VBA des fonctions qui feront ton tirage au sort...
Sinon tu peux te mettre en mode calculationManual: tu vas dans OPtion/Calcul et tu changes. La feuille ne se recalcule que quand tu tapes F9
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
0
Merci
Voilà, comme le dit micmerle... OU une autre solution, c'est qu'une fois tu as copié toutes tes formules ALEA() , tu les sélectionnes, puis tu fais COPIER. Ensuite dans édition COLLAGE SPECIAL. Dans le panneau qui s'ouvrira, choisi Valeurs. Les cellules prendront alors les valeurs aléatoires tirées en remplacement des formules, donc resteront forcément statitques...

Amicalement,
Us.