Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Gestion des doublons lors d'un tirage aléatoire

  • Initiateur de la discussion Initiateur de la discussion nougitch
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

nougitch

XLDnaute Occasionnel
Bonjour,

1/ J'aimerais savoir qu'elle est la façon la plus simple de gérer les doublons lors d'un tirage aléatoire utilisant la fonction Rnd.

Il faut qu'en fonction du nombre de joueurs (1 à 8), j'obtienne un nombre entre 1 et 52 (chaque nombre correspondant a une carte d'un jeu de 52), sachant qu'une carte ne peut apparaitre qu'une et une seule fois.

J'avais donc debute de la sorte...

For i = 1 To Range("B5")
Range("A" & 9 + i) = "Player " & i
Range("B" & 9 + i) = Int((52 * Rnd) + 1)
Next

2/ Est-ce que la fonction Rnd est la meilleure ? J'ai pu voir dans divers fichier du forum la fonctione Randomize.

Merci par avance pour votre aide.
 

Pièces jointes

Re : Gestion des doublons lors d'un tirage aléatoire

Bonjour

Une piste
RND est une fonction pseudo aléatoire, il faut pour la rendre un peu plus aléatoire utiliser en début de macro la fonction Randomize (cf aide VBA).
A chaque tirage il faut vérifier si le nombre n'est pas déjà sorti, s'il est est sorti il faut relancer la fonction RND.
Ce qui donne l'algorithme suivant en utilisant un boucle DO

DO
Tirage
Si le numéro n'est pas sorti alors
Inscription de la valeur
tirage = tirage +1
fin si

si le nombre de valeur est obtenu alors on sort (exit do)

Loop

JP
 
Re : Gestion des doublons lors d'un tirage aléatoire

Bonjour Nougitch

essaye comme ci dessous :

Code:
Sub test()
Dim x As New Collection, i As Byte
Randomize
Do While x.Count < Range("B5").Value
    i = Int(52 * Rnd) + 1
    On Error Resume Next
    x.Add i, CStr(i)
Loop
On Error GoTo 0

For i = 1 To x.Count
    Range("A" & 9 + i).Value = "Player " & i
    Range("B" & 9 + i).Value = x(i)
Next
End Sub

à noter, l'instruction "randomize" permet d'initialiser le générateur de nombres aléatoires, sans argument par rapport à l'horloge système, cf aide vba, sans cela à chaque lancement de la macro c'est exactement la même série qui serait renvoyée.

bonne journée
@+

Edition : boujour Jp
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
2 K
Réponses
23
Affichages
2 K
Réponses
2
Affichages
1 K
Réponses
8
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…