Tirage au sort sans doublon

Bonjour à tous,

J'ai besoin de faire un tirage au sort pour le RIC local que l'on veut mettre en place à Drancy.

Je cherche la formule qui m'excluera les lots déjà tirés.

Dans le détail, j'ai une population de 35 000 inscrits.

On tire un échantillon de 384 inscrits.

puis on retire un échantillon de 100 personnes sur cet échantillon de 384 ou il y a donc plus de facilité de doublon.

merci pour votre aide

Fronck

178tirage-au-sort.xlsm (34.15 Ko)

Salut,

J'aurais raisonné dans l'autre sens, Tu copies ta liste complète et tu viens supprimer une ligne Aléatoire jusqu'à ce qu'il ne reste plus que 384 ou 100 lignes.

Tu te vois coder ça ?

Girodo,

bonjour,

une proposition à adapter

509tirage-au-sort.xlsm (36.57 Ko)

Bonjour,

Autre proposition (Si on part d'une série série continue 1/90, 100/384...)

Sub Sansdoublon()
Dim i%, k%, Nb%
k = 1 'pour résultat ligne 2...
Worksheets(1).Activate
For i = 1 To 384 'Nb au départ
   mVar = mVar & ChrW(32 + i)
Next
Do
   Nb = Int(Rnd * Len(mVar) + 1)
   k = k + 1
   Cells(k, 1) = AscW(Mid(mVar, Nb, 1)) - 32
   mVar = Left$(mVar, Nb - 1) & Mid$(mVar, Nb + 1)
Loop Until Len(mVar) = 284 '384 - 284 = 100 gagnants !
End Sub

A+

Merci à tous pour vos réponses, j'ai ce qu'il faut maintenant.

La solution de h2so4 fonctionne, et je vais regarder tout çà de plus prés,

a+

Fronck

Salut à tous,

30tirage-au-sort.zip (110.90 Ko)

Les 2 macros de h2s04 et galopin passent très bien pour 384,

mais j'en ai aussi besoin d'une pour passer de 35 604 à 384, comme l'a décrit girodo. Et là les 2 macros ne fonctionnent plus.

Et la macro de galopin m'affiche un problème de capacité sur la ligne :

For i = 1 To 35604 'Nb au départ

mais elle passe à 30 000 avec un bug ici:

Cells(k, 1) = AscW(Mid(mVar, Nb, 1)) - 32

Pour hs204, j'ai plus de résultat identifié puisque elle fait mouliner excel sans fin.

Excel serait t il limité en capacité pour les macros ?

merci

Fronck

Bonjour,

une petite fonction qui te génère tes 384 nombre dans un tableau :

Sub test()
    Dim t, nb As Long
    nb = 384
    t = RndSsDoublon(1, 35604, nb)
    'contrôle sur feuille
    [A2].Resize(nb) = Application.Transpose(t) ' attention, Transpose limité à 65532 (nombre de tirages voulus = 384)
End Sub

Function RndSsDoublon(min As Long, ByVal max As Long, nb As Long)
    Dim dict, i As Long
    max = max - min + 1
    If nb > max Then Exit Function ' impossible
    Set dict = CreateObject("Scripting.Dictionary")
    Do
        i = Rnd() * max + min
        dict(i) = 1
    Loop Until dict.Count = nb
    RndSsDoublon = dict.keys
    Set dict = Nothing
End Function

eric

Merci beaucoup eric (eriiic pour les filles) .

çà marche impecc.

merci

Fronck

Bonjour,

En ce qui me concerne, la limitation était connue. Je n'avais avancé cette macro originale que parce qu'il s'agissait d'une petite série.

A+

Bonjour …

Puisque c’était fait, une autre proposition (mélange Formules -VBA, avec Tableaux).

alea

Bonjour,

ce qui me permet de voir que j'ai complètement oublié le Randomize dans ma proposition.
A ajouter donc
eric

Bonjour,

Ok j'ai mis Randomize en premier dans la macro des 2 tirages.

Merci à tous

Fronck

Rechercher des sujets similaires à "tirage sort doublon"