Tirage aléatoire sans remise et avec taille de tirage variant [Résolu/Fermé]

Signaler
Messages postés
1
Date d'inscription
jeudi 4 juillet 2013
Statut
Membre
Dernière intervention
4 juillet 2013
-
 romain -
Bonjour,

Je viens ici car je suis bien bloqué...
Voici mon objectif:
Je cherche à effectuer une sélection aléatoire sans remise sur plusieurs populations à partir d'une taille spécifique d'échantillon.
J'ai donc repris le programme donné ici précédement et essayé de l'améliorer.
J'ai pu faire en sorte d'effectuer plusieurs sélections aléatoire à partir de plusieurs tailles de "tirage".

Néanmoins il me reste deux problèmes:
- La sélection aléatoire se fait avec remise,
- Même si la taille du "tirage" varie la sélection se fait toujours sur la même population.

Dans l'exemple en pièce jointe mes deux population sont séparés par des cellules vides.
J'essaye donc pour le moment d'effectuer une itération pour trier mes échantillons séparés par une ligne vide.

J'espère avoir été clair et vous remercie d'avance de l'aide que vous pourrez m'apporter.


http://cjoint.com/data/0GerfwZPtxs.htm



Quelqu'un pour me donner une piste?
D'avance merci!
P.S: Je précise que mes connaissance en Vba sont pour le moins limité. Je m'y suis remis depuis quelque jours pour mener à bien ce projet... Merci de votre compréhension.


P.S:Pour résumer dans l'exemple de deux populations:
1*Sélection aléatoire sans remise sur population 1 (de A1 à A70) à partir de la taille D2=10;
2*Sélection aléatoire sans remise sur population 2 (de A72 à A111) à partir de la taille D3=20;
Le but final serait de le faire sur 92 population et donc avec 92 tirages différent.
(Le 2nd fichier est un brouillon, s'il peut apporter plus de détails...)

3 réponses

Messages postés
16477
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
10 juin 2021
3 189
Bonjour,

..." J'ai donc repris le programme donné ici précédement "...
Ou çà ? Il y a quelques 14 800 discussions dans le forum VB/VBA :o)

principe de tirage sans remise à adapter à ton contexte par macro paramétrée

Sub tirer_sans_remise(nbre, plage, retour)
Dim Dico As Object, Popu As Byte,Col as Byte, Tirage As Double

If nbre = "" Then GoTo vide
Set Dico = CreateObject("scripting.dictionary")
Popu = Range(plage).Count
Col = Range(plage).Column

Randomize
While Dico.Count < nbre
     Tirage = Cells(Int(Rnd * Popu) + 1, Col)
     If Not Dico.exists(Tirage) Then Dico.Add Tirage, ""
Wend
Range(retour).Resize(nbre, 1) = Application.Transpose(Dico.keys)
Exit Sub

vide:
MsgBox "nombre de sélectonnés vide", vbCritical
End Sub

Sub test1()
     tirer_sans_remise [D2], "A1:A70", "G1"
End Sub

Sub test2()
     tirer_sans_remise [D3], "A72:A111", "H1"
End Sub

Michel
Bonjour,

Merci beaucoup pour cette réponse!
Et désolé pour le ..." J'ai donc repris le programme donné ici précédement "... , surtout que j'en ai perdu le lien...:s

Je vais essayer cela et j'espère pouvoir l'adapter.
Merci encore et bonne journée!
Messages postés
16477
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
10 juin 2021
3 189
re,

Si tu étais inscrit, on le retrouverait facilement; donc.... :o)
Re,
Super ce petit programme! Marche très bien.

Par contre juste une chose:
Sub test1()
Call tirer_sans_remise([D2], "A1:A40", "G1")
End Sub

Sub test2()
Call tirer_sans_remise([D3], "A42:A70", "H1")
End Sub

Le problème est que quand j'appel le test2, il me prend quand même les valeurs de de "A1:A40" et non celle de "A42:A70"...
Pourquoi?
Mais merci encore, sincérement!
Bon, excuse moi.
Il suffit de mettre les échantillons sur chaque colonne et là ça marche!

J'ai passé plusieurs jours à essayer de faire ce code sans résultat...
Une dernière fois, merci :)
Bonjour,

Merci pour votre code qui m'ai très utile!!!

J'ai cependant un petit souci, je fais mon tirage sur sur plage allant de B8 à la dernière ligne de la colonne B, mais le tirage me retourne des valeurs se trouvant également entre B1 et B7...

Avez-vous une idée d'où peut provenir le problème?

Je vous remercie pour votre aide.