Supprimer une valeur dans un array avec Randomize
Résolu
Bonjour,
En ces périodes de fetes je fais une interface qui tire au "hasard" les gagnants ainsi que les cadeaux.
Pour traiter mes doublons dans mes tables je voudrais éliminer la valeur tiré au sort et ainsi réinitialisé ma table pour procéder a un nouveau tirage.
Je n´ai pas vu de remove ou autre fonction donc pense que je dois passer par une boucle et une autre table temporaire mais la je bloque un peu...
J´utilise tout récement des tables, donc si vous avez des commentaires ludiques je suis prenneur aussi :)
Merci d´avance!
En ces périodes de fetes je fais une interface qui tire au "hasard" les gagnants ainsi que les cadeaux.
Pour traiter mes doublons dans mes tables je voudrais éliminer la valeur tiré au sort et ainsi réinitialisé ma table pour procéder a un nouveau tirage.
' fonction gagnant 'TPar est un array contenant la liste des participants, et TGani un array vide pour enregistrer les gagnants Function TirageP(TPar As Variant, TGani As Variant) Dim i%, Inti% ' un peu plus de la moitié des participants ont un cadeau Inti = Int((UBound(TPar) / 2) + 0.5) ReDim TGani(Inti) Randomize For i = 0 To Inti TGani(i) = TPar(Int(UBound(TPar) * Rnd)) 'a ce moment sortir la valeur TGani dans ma table TPar Next End Function
Je n´ai pas vu de remove ou autre fonction donc pense que je dois passer par une boucle et une autre table temporaire mais la je bloque un peu...
J´utilise tout récement des tables, donc si vous avez des commentaires ludiques je suis prenneur aussi :)
Merci d´avance!
1 réponse
-
Contributeurbonjour, moi j'essaierais avec des Collections et pas des tables.
-
-
@GermPeruEst ce que tu saurais s´il est possible de faire un rnd sur un index d´une collection ?
-
@GermPeruEt ensuite de faire un remove sur l´items. Interessant la collection pas besoin de faire une redimension. gros avantage
-
Contributeur@GermPeruje trouve ceci très clair, en Anglais, cependant:
https://excelmacromastery.com/excel-vba-collections/ -
Contributeur@GermPerurnd sur index: je suggère, au lieu de:
Int(UBound(TPar) * Rnd)
de faire:Int(1+CPar.Count * Rnd)
-