Tirage aléatoire sans remise et avec taille de tirage variant

Résolu
Jack_88 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 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

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
0
Jack_88
 
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!
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
re,

Si tu étais inscrit, on le retrouverait facilement; donc.... :o)
0
Jack_88
 
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!
0
Jack_88
 
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 :)
0
romain
 
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.
0