Eviter les doublons dans un tirage aléatoire

  • Initiateur de la discussion Initiateur de la discussion paul87
  • 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 !

paul87

XLDnaute Impliqué
Bonsoir à tous, Bonsoir le Forum.
Dans la petite appli jointe,
J'ai besoin d'effectuer un tirage au sort aléatoire de 4 cellules dans une colonne qui en comporte 8.
Actuellement j'en suis à la plage C2:C9...(mais je dois réaliser la meme chose pour toutes les colonnes)
Le Backcolor des 4 cellules tirées au sort se colore en vert....jusque là tout va plutôt bien...
Mais, Mais...
Je ne sais pas comment faire pour éviter l'hypothèse ou le même nombre (entre 2 et 9) sort 2 fois dans le même tirage....ce qui fausse bien sur mon tableau..
Qui pourrait m'aider à solutionner ça?
Merci par avance..
 

Pièces jointes

Re : Eviter les doublons dans un tirage aléatoire

Bonjour Paul

regarde le code ci dessous, avec utilisation d'une collection :

Code:
Sub test()
Dim a As Byte, c As New Collection
Randomize
Do
    a = Int((8 * Rnd) + 2)
    On Error Resume Next
    c.Add a, CStr(a)
    If Err.Number = 0 Then Range("C" & a).Interior.ColorIndex = 4
Loop While c.Count < 4
On Error GoTo 0

bonne soirée
@+
 
Re : Eviter les doublons dans un tirage aléatoire

re
Bonsoir et merci à toi, Pierrot93
ça fonctionne tres bien,
mais je n'arrive pas à l'appliquer sur les autres colonnes...
j'ai pourtant bien modifié le range.. (voir PJ)
pourquoi..?
Merci
 

Pièces jointes

Re : Eviter les doublons dans un tirage aléatoire

Bonjour,

salut Pierrot 🙂

une autre approche, qui remplit tes deux tableaux dans ton fichier exemple :

Code:
Private Sub CommandButton1_Click()
Set MonTirage = CreateObject("Scripting.Dictionary")
For Tablo = 0 To 1
For Col = 3 To 8
On Error Resume Next
MonTirage.RemoveAll
On Error GoTo 0
For X = 1 To 4
    Do While Y = 0
        Randomize (Timer)
        Lig = Int((8 * Rnd) + 2)
        If Not MonTirage.Exists(Lig) Then
            Y = 1
            MonTirage.Add Lig, Lig
            Cells(Lig + (Tablo * 11), Col).Interior.ColorIndex = 4
        End If
    Loop
    Y = 0
Next X
Next Col
Next Tablo
End Sub
 
Re : Eviter les doublons dans un tirage aléatoire

Re Paul

code ci dessous pour tous tes groupes :

Code:
Option Explicit
Private Sub CommandButton1_Click()
Dim a As Byte, c As New Collection, i As Byte, j As Byte, k As Byte
Range("C2:H20").Interior.ColorIndex = xlNone
Randomize
For j = 0 To 1
    For i = 3 To 8
        Do
            a = Int((8 * Rnd) + 2)
            On Error Resume Next
            c.Add a, CStr(a)
            If Err.Number = 0 Then Cells(a + k, i).Interior.ColorIndex = 4
        Loop While c.Count < 4
        On Error GoTo 0
        Set c = Nothing
    Next i
    k = 11
Next j
End Sub

@+

Aarf, trop rapide bhbh, une bonne soirée à toi.
 
Re : Eviter les doublons dans un tirage aléatoire

re_
bonsoir bhbh
Merci à vous 2..
c'est parfait..
j'étais parti pour réussir moi aussi ...mais avec une version plus longue...
répétition de la boucle..etc..
bref..bien moins recherché....
Merci à vous
bonne soirée.
Paul
 
- 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
0
Affichages
1 K
Retour