Tirage au sort aleatoire selon chance d'apparition

Bonjour à tous,

J'ai un problème que je ne sais absolument pas comment résoudre car je n'ai même pas de point de départ.

Je souhaiterais faire un tirage au sort aléatoire dans une liste d'objets en fonction de leur chance d'apparition mais je n'arrive pas à trouver d'exemple qui correspond à ce que je souhaite faire. Est-ce qu'une bonne âme voudrait bien m'aider à réaliser cela ?

Merci d'avance pour vos réponses. Je vous mets le fichier concerné ci-joint.

bonjour,

une proposition via formule et ajout d'une colonne

Merci h2so4,

Ca correspond à ce que je cherche mais j'aimerais le mettre sous forme de macro afin de pouvoir l'utiliser pour plusieurs tableaux et je souhaiterais aussi ajouter une txtbox pour que la personne qui l'utilise puisse choisir le nombre d'objets à tirer au sort.

Bonjour,

Une solution en pièce jointe.

13alea-param-vg.xlsm (24.33 Ko)

A+

Bonjour galopin01,

Ta solution ressemble à ce que je veut et tu m'as donné une piste. Mais ca ne marche pas correctement, le texte ne correspond pas toujours à l'index.

Désolé : une étourderie...

Le fichier avec la formule modifiée.

13alea-param-vg.xlsm (24.33 Ko)

Explications sur demande...

A+

Merci galopin01,

Ce n'est pas tout a fait ce que je veut faire mais en combinant ta solution et celle de h2so4 je devrais réussir à me débrouiller.

Je n'en doute pas : J'ai bien décomposé le processus pour le rendre évident, mais à la limite pas besoin d'index. Tu peux partir directement... de ton tableau structuré.

Associer un caractère (J'ai utilisé l'alphabet car ton tableau est petit) à chaque produit. Tu créés un string de N caractères représentatif de tous les produits.

Donc dans ton exemple je crée un string de 1000 caractères AAAABBBCCCCCDDEEEE... Ensuite tu démontes ton string en retirant aléatoirement un des caractères.

Quand le string est vide. C'est que tu les as tous tirés... Si tu veux n'en tirer que 100 ben tu t'arrêtes quand ton string n'a plus que 900 caractères.

Quand à la correspondance finale j'ai utilisé un RECHERCHEV mais tu pourrais tout aussi bien utiliser un dico et afficher chaque sortie dans un MsgBox...

A+

bonjour à tous,

une fonction personnalisée pour un tirage aléatoire selon probabilités

Function aleaprob(proba)
    ' fonction qui retourne un numero de 1 au nombre de lignes du tableau de probabilités
    ' en fonction de sa probabilité de sortie
    Application.Volatile
    cumul = 0
    q = Rnd()
    tabprob = proba.Value
    somproba = Application.Sum(proba)
    For i = LBound(tabprob) To UBound(tabprob)
        cumul = cumul + tabprob(i, 1) / somproba
        If cumul >= q Then aleaprob = i: Exit Function
    Next i
    aleaprob = UBound(tabprob)
End Function

exemple d'utilisation dans fichier joint

Le même que précédemment mais cette fois sans modification de la feuille d'origine et sans formule. J'ai juste conservé l'affichage colonne F mais bien sur on peut afficher différemment...

Le programme demande le nombre de tirage à effectuer (de 1 à 1000)

18alea-param-vg2.xlsm (25.01 Ko)

Pour le reste la philosophie du programme est exactement la même sauf que la c'est le Dico qui remplace la colonne A et qui remplace la formule finale...

A+

Merci à tout les deux,

J'ai retenu la solution de h2so4, qui correspond plus à ce que je souhaite faire.

Rechercher des sujets similaires à "tirage sort aleatoire chance apparition"