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 -
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...)
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
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
Michel
..." 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!
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!
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!
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!
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.
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.