XL 2013 Trie aléatoire d'une colonne vers des colonnes défini

maval

XLDnaute Barbatruc
Bonjour
J'ai une colonne B7:B56 avec des N° de joueurs de tarot que j'aimerais à l'aide d'un bouton les envoyer vers les cases J4: N24
Dans un trie aléatoire
Je joint mon fichier qui sera plus explicite
Je vous remercie d'avance
Max
 

Pièces jointes

  • tirage aléatoire2.xlsx
    15 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
Option Explicit

Sub GO()
   Dim TEnt(), NMax&, N&, TSor(1 To 21, 1 To 5), L4Max&, L&, C&, CMax&
   TEnt = [B7].Resize([B1000000].End(xlUp).Row - 6).Value
   NMax = UBound(TEnt, 1)
   L4Max = NMax \ 4 - NMax Mod 4
   CMax = 4
   For N = 1 To NMax
      C = C Mod CMax + 1
      If C = 1 Then
         If L = L4Max Then CMax = 5
         L = L + 1: End If
      TSor(L, C) = TEnt(N, 1)
      Next N
   [J4:N24].Value = TSor
   End Sub
 

dysorthographie

XLDnaute Accro
bonjour,
pour moi trie aléatoire veut dire random!
VB:
Sub test()
Dim c As New Collection, xy, i As Integer, a As String

For Each r In Range(Range("B7"), Cells(Cells.Rows.Count, "B").End(xlUp))
    c.Add r.Value
Next

Randomize ' Initialize random-number generator.
[J4: N24] = ""
For Each r In [J4: M24]
    i = Int((c.Count * Rnd) + 1) 'random-number generator'
   ' r.Select
    r.Value = c(i)
    c.Remove (i)
    a = r.Address
    If c.Count = 0 Then Exit For
Next
i = 0
xy = Split(a, "$")
While xy(1) < "M" And xy(1) > "I"
    i = i + 1
        Cells(xy(2) - i, "n") = Range(a)
        Range(a).Value = ""
        a = Range(a).Offset(0, -1).Address
       xy = Split(a, "$")
Wend
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Oui, apparemment il y avait une tentative déjà faite dans ce sens, mais mal, avec un 2 en double.
Je préparai aussi dans mon coin ça :
VB:
Sub Tirage()
   Dim TEnt(), L&, TAl&(), TSor(), NMax&, N&
   TEnt = [V7].Resize([V1000000].End(xlUp).Row - 6, 2).Value
   NMax = UBound(TEnt, 1)
   InitListeAl TAl, NMax
   ReDim TSor(1 To NMax, 1 To 3)
   For L = 1 To NMax
      N = TAl(L)
      TSor(L, 1) = N
      TSor(L, 2) = TEnt(N, 1)
      TSor(L, 3) = TEnt(N, 2)
      Next L
   [B:D].ClearContents
   [B7].Resize(NMax, 3).Value = TSor
   End Sub
Sub InitListeAl(TAl() As Long, Optional ByVal NMax As Long, Optional ByVal Graine As Double)
Rem. ——— Garnit un tableau à une dimension base 1 de numéros sans doublon ou change aléatoirement l'ordre
'        des numéros y étant déjà portés.
'  Arguments :
'     TAl :   Le tableau à traiter.
'     NMax:   Numéro maxi. Si spécifié, le tableau est redimensionné TAl(1 To NMax), puis garni de numéros de 1 à NMax.
'     Graine: Base de départ de la série. Si omis la série sera différente à chaque exécution.
   Dim P As Long, R As Long, X As Long
   If NMax >= 0 Then
      ReDim TAl(1 To NMax): For P = 1 To NMax: TAl(P) = P: Next P
   Else: NMax = UBound(TAl): End If
   If Graine <= 0 Then Randomize Else Rnd -1: Randomize Graine
   For P = NMax To 2 Step -1
      R = Int(Rnd * P) + 1: X = TAl(R): TAl(R) = TAl(P): TAl(P) = X
      Next P
   End Sub
 

dysorthographie

XLDnaute Accro
oui effectivement!
pour ma part j'ai changer la source des données!
VB:
For Each r In Range(Range("U7"), Cells(Cells.Rows.Count, "V").End(xlUp).Offset(, -1))
    c.Add r.Value
Next
Code:
Sub test()
Dim c As New Collection, xy, i As Integer, a As String

For Each r In Range(Range("U7"), Cells(Cells.Rows.Count, "V").End(xlUp).Offset(, -1))
    c.Add r.Value
Next

Debug.Print (c.Count - (c.Count Mod 5)) / 5
Randomize ' Initialize random-number generator.
[J4: N24] = ""
For Each r In [J4: M24]
    i = Int((c.Count * Rnd) + 1)
    r.Select
    r.Value = c(i)
    c.Remove (i)
    a = r.Address
    If c.Count = 0 Then Exit For
Next
i = 0
xy = Split(a, "$")
While xy(1) < "M" And xy(1) > "I"
    i = i + 1
        Cells(xy(2) - i, "n") = Range(a)
        Range(a).Value = ""
        a = Range(a).Offset(0, -1).Address
       xy = Split(a, "$")
Wend
End Sub
 

Dranreb

XLDnaute Barbatruc
Ça me semble bien plus compliqué que ma Sub InitListeAl utilisant l'algorithme Fisher et Yates.
J'ai aussi un module de classe ListeAléat autorisant en plus l'évacuation d'un numéro ou sa réinsertion, permettant de nombreuses applications de tirages aléatoire pour compétitions :
 

Pièces jointes

  • ListeAléat.xlsm
    413.4 KB · Affichages: 9
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal