Sub RemplissageAleatoire()
Dim ncol%, P1 As Range, P2 As Range, t1, t2
Dim i&, j%, lig1, lig2, cible
ncol = 5 'à adapter
Set P1 = [A1].CurrentRegion.Resize(, ncol) 'à adapter
Set P2 = [G1].Resize(P1.Rows.Count, ncol) 'à adapter
Application.ScreenUpdating = False
If IsError([Vides]) Then _
P2.SpecialCells(xlCellTypeBlanks).Name = "Vides"
[Vides] = "" 'RAZ de la plage nommée
t1 = P1: t2 = P2 'matrices, plus rapides
Randomize
For i = 1 To UBound(t1)
For j = 1 To ncol
If t2(i, j) = "" Then
lig1 = Application.Index(t1, i, 0)
lig2 = Application.Index(t2, i, 0)
Do
cible = lig1(Int(Rnd * ncol) + 1)
Loop While IsNumeric(Application.Match(cible, lig2, 0))
t2(i, j) = cible
End If
Next j, i
P2 = t2 'restitution
End Sub