Microsoft 365 Tirage au sort avec handicap

Informatique661

XLDnaute Nouveau
Bonsoir !

Je suis tombé sur un site qui permet de réaliser des tirages au sort avec différents niveaux de pondération (https://www.tirage-au-sort.net/tirage-pondere) et je voudrai parvenir à obtenir le même résultat dans un fichier excel, cependant, je ne sais pas du tout par où commencer...

Mon objectif est de réaliser des tirages au sort (pour un nombre de participant pouvant aller de plusieurs dizaines à plusieurs centaines de participants) avec un seul gagnant, mais de permettre à trois participants de bénéficier de plus de chances que les autres d'être tiré au sort.

Dans le générateur cité, il me suffit de mettre les trois participants dans un "pot" avec une probabilité par exemple de 400 % (les probabilités sont alors augmentées par 4), tandis que je rentre tous les autres participants dans un autre "pot" avec la probabilité basique de 100 % (sans pondération).

Est-il possible d'obtenir la même chose avec excel ? Si oui, par ou commencer ? Je suis un bleu dans ce domaine, mais j'apprends vite !

Merci d'avance à ceux qui pourront m'apporter des éléments de réponse :)
 
Solution
Bonjour à tous,

La même chose en VBA.
Les chances sont exprimés en unité: 1 correspond à 100%, 10 correspond à 10 fois plus de chance, 2,5 correspond à deux fois et demi plus de chance (se limiter à un chiffre après la virgule)

Cliquez sur le bouton Hop!
Dans le code (dans le module de la feuille Feuil1), une constante nTirage permet de modifier le nombre de tirage (de base c'est 1 000 000 de tirages).
VB:
Const nTirage = 1000000

Sub tirage()
Dim der&, n, t, t0, i&, j&, k&, m&, aux
   der = Cells(Rows.Count, 2).End(xlUp).Row: t = Range("a2:c" & der)
   For i = 1 To UBound(t): n = n + 10 * t(i, 2): t(i, 3) = 0: Next
   ReDim t0(1 To n)
   For i = 1 To UBound(t): For k = 1 To 10 * t(i, 2): m = m +...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

La même chose en VBA.
Les chances sont exprimés en unité: 1 correspond à 100%, 10 correspond à 10 fois plus de chance, 2,5 correspond à deux fois et demi plus de chance (se limiter à un chiffre après la virgule)

Cliquez sur le bouton Hop!
Dans le code (dans le module de la feuille Feuil1), une constante nTirage permet de modifier le nombre de tirage (de base c'est 1 000 000 de tirages).
VB:
Const nTirage = 1000000

Sub tirage()
Dim der&, n, t, t0, i&, j&, k&, m&, aux
   der = Cells(Rows.Count, 2).End(xlUp).Row: t = Range("a2:c" & der)
   For i = 1 To UBound(t): n = n + 10 * t(i, 2): t(i, 3) = 0: Next
   ReDim t0(1 To n)
   For i = 1 To UBound(t): For k = 1 To 10 * t(i, 2): m = m + 1: t0(m) = i: Next k, i
   Randomize
   For i = 1 To n: For j = 1 To 5: k = 1 + Int(Rnd * n): aux = t0(i): t0(i) = t0(k): t0(k) = aux: Next j, i
   For i = 1 To nTirage: k = 1 + Int(Rnd * n): t(t0(k), 3) = t(t0(k), 3) + 1: Next i
   Range("a2").Resize(UBound(t), 3).Value = t
   Range("c" & der + 1 & ":c" & Rows.Count).Clear
End Sub
 

Pièces jointes

  • Mot661- tirage pondéré- v1.xlsm
    19.7 KB · Affichages: 18
Dernière édition:

Informatique661

XLDnaute Nouveau
Bonjour Mot661, le forum,

C'est très simple voyez le fichier joint.

Pour que les joueurs Nom1 Nom2 Nom3 aient 4 fois plus de chances que les autres il suffit que leurs noms soient 4 fois dans la liste du tirage.

Formule en D2 =INDEX(A:A;ALEA.ENTRE.BORNES(2;110))

A+

Merci beaucoup ! J'y avais pensé mais je me demandai si cela donnerait le même résultat que sur le site (cela me paraissait presque trop simple) XD
 

Informatique661

XLDnaute Nouveau
Bonjour à tous,

La même chose en VBA.
Les chances sont exprimés en unité: 1 correspond à 100%, 10 correspond à 10 fois plus de chance, 2,5 correspond à deux fois et demi plus de chance (se limiter à un chiffre après la virgule)

Cliquez sur le bouton Hop!
Dans le code (dans le module de la feuille Feuil1), une constante nTirage permet de modifier le nombre de tirage (de base c'est 100 000 tirages).
VB:
Const nTirage = 100000

Sub tirage()
Dim der&, n, t, t0, i&, j&, k&, m&, aux
   der = Cells(Rows.Count, 2).End(xlUp).Row: t = Range("a2:c" & der)
   For i = 1 To UBound(t): n = n + 10 * t(i, 2): t(i, 3) = 0: Next
   ReDim t0(1 To n)
   For i = 1 To UBound(t): For k = 1 To 10 * t(i, 2): m = m + 1: t0(m) = i: Next k, i
   Randomize
   For i = 1 To n: For j = 1 To 5: k = 1 + Int(Rnd * n): aux = t0(i): t0(i) = t0(k): t0(k) = aux: Next j, i
   For i = 1 To nTirage: k = 1 + Int(Rnd * n): t(t0(k), 3) = t(t0(k), 3) + 1: Next i
   Range("a2").Resize(UBound(t), 3).Value = t
   Range("c" & der + 1 & ":c" & Rows.Count).Clear
End Sub

C'est presque de la magie pour moi ce que tu viens de faire XD juste hop et j'obtiens le tirage. Merci énormément !

Est-ce qu'il y aurait un moyen de mettre une case pour obtenir en plus, le gagnant d'un seul tirage ? Parce que je trouve très utile d'avoir les proba sur 10 000 tirages pour avoir une idée, mais je ne sais pas comment faire pour annoncer le gagnant ^^

En gros, c'est un mix entre vos deux fichiers ^^

Merci infiniment de votre aide par avance !
 

Statistiques des forums

Discussions
312 215
Messages
2 086 326
Membres
103 179
dernier inscrit
BERSEB50