1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Dim Tb As Variant, Tbm() As String
Dim LastLig As Integer, i As Integer, j As Integer, k As Integer, m As Integer
Dim Nb As Integer, t As Integer, s As Integer
Application.ScreenUpdating = False
With Sheets("Feuil1") 'à adpter
LastLig = .Cells(Rows.Count, 1).End(xlUp).Row
Nb = Application.CountIf(.Range("B1:B" & LastLig), "M")
If Nb * (LastLig - Nb) > 0 Then
Nb = Application.Min(Nb, LastLig - Nb)
Tb = .Range("A1:B" & LastLig).Value
ReDim Tbm(1 To 2, 1 To Nb)
Do
Randomize
m = Int(LastLig * Rnd() + 1)
If Tb(m, 2) = "M" And t < Nb Then
t = t + 1
Tbm(1, t) = Tb(m, 1)
ElseIf Tb(m, 2) = "F" And s < Nb Then
s = s + 1
Tbm(2, s) = Tb(m, 1)
End If
For k = m + 1 To LastLig
Tb(k - 1, 1) = Tb(k, 1)
Tb(k - 1, 2) = Tb(k, 2)
Next k
LastLig = LastLig - 1
Loop Until s = Nb And t = Nb
i = 1: j = 3: s = 1: t = 1
For k = 1 To 2 * Nb
If k Mod 2 = 0 Then
.Cells(i, j).Value = Tbm(1, t)
t = t + 1
Else
.Cells(i, j).Value = Tbm(2, s)
s = s + 1
End If
i = IIf(j = 6, 1, 0) + i
j = IIf(j = 6, 3, j + 1)
Next k
End If
End With |