XL 2016 Modifier ou créer une macro de tri aléatoire par équipe de trois joueurs en lui ajoutant une colonne

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

berru76

XLDnaute Occasionnel
Bonjour

J'ai une macro de tri par équipes (merci a son auteur Dranreb)
J'aimerais pouvoir lui intégrer "si cela est possible" les valeurs de la colonne D
comme dans l'exemple ci joint

Merci de votre aide

------------
Sub TriParÉquipes()
DéclasserGroupesDe3 [C4:C99]
Dim wsh As Worksheet

End Sub
---------------------------------
Sub DéclasserGroupesDe3(ByVal rng As Range)
Dim TEntrée(), TSortie(), n As Long, LE As Long, LS As Long, dl As Long, C As Long
TEntrée = rng.Value
ReDim TSortie(1 To UBound(TEntrée, 1), 1 To 1)
With New ListeAléat
Randomize
.Init UBound(TEntrée, 1) \ 3
For n = 1 To .Count
LE = 3 * (n - 1): LS = 3 * (.Aléat(n) - 1)
For dl = 1 To 3: TSortie(LS + dl, 1) = TEntrée(LE + dl, 1): Next dl
Next n
End With
rng.Value = TSortie
Dim dlg&: dlg = Cells(Rows.Count, 3).End(3).Row: If dlg < 4 Then Exit Sub
Dim Tbl, plg As Range, lg1&, lg2&: lg2 = 4: Application.ScreenUpdating = 0
Set plg = Range("C4:C" & dlg): Tbl = plg: plg.ClearContents: dlg = dlg - 3
For lg1 = 1 To dlg
If Tbl(lg1, 1) <> "" Then Cells(lg2, 3) = Tbl(lg1, 1): lg2 = lg2 + 1
Next lg1
End Sub
 

Pièces jointes

Solution
Bonsoir.
Vous pouvez l'écrire comme ça par exemple :
VB:
Sub TriParÉquipes()
   DéclasserGroupesDe3 [C4:D4]
   End Sub
Sub DéclasserGroupesDe3(ByVal Rng As Range)
   Dim TEntrée(), TSortie(), N As Long, LE As Long, LS As Long, dL As Long, C As Long
   Set Rng = Rng.Resize(Rng(10000, 1).End(xlUp).Row - Rng.Row + 1)
   TEntrée = Rng.Value
   ReDim TSortie(1 To UBound(TEntrée, 1), 1 To UBound(TEntrée, 2))
   With New ListeAléat
      Randomize
      .Init UBound(TEntrée, 1) \ 3
      For N = 1 To .Count
         LE = 3 * (N - 1): LS = 3 * (.Aléat(N) - 1)
         For dL = 1 To 3: For C = 1 To UBound(TEntrée, 2)
            TSortie(LS + dL, C) = TEntrée(LE + dL, C)
            Next C, dL, N
      End With
   Rng.Value = TSortie
   End Sub
Bonsoir.
Vous pouvez l'écrire comme ça par exemple :
VB:
Sub TriParÉquipes()
   DéclasserGroupesDe3 [C4:D4]
   End Sub
Sub DéclasserGroupesDe3(ByVal Rng As Range)
   Dim TEntrée(), TSortie(), N As Long, LE As Long, LS As Long, dL As Long, C As Long
   Set Rng = Rng.Resize(Rng(10000, 1).End(xlUp).Row - Rng.Row + 1)
   TEntrée = Rng.Value
   ReDim TSortie(1 To UBound(TEntrée, 1), 1 To UBound(TEntrée, 2))
   With New ListeAléat
      Randomize
      .Init UBound(TEntrée, 1) \ 3
      For N = 1 To .Count
         LE = 3 * (N - 1): LS = 3 * (.Aléat(N) - 1)
         For dL = 1 To 3: For C = 1 To UBound(TEntrée, 2)
            TSortie(LS + dL, C) = TEntrée(LE + dL, C)
            Next C, dL, N
      End With
   Rng.Value = TSortie
   End Sub
 
- 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
3
Affichages
485
Réponses
5
Affichages
379
Réponses
3
Affichages
518
Retour