Option Explicit
Sub TriColonneAleatoire()
Dim Val As Range
Dim Lig As Byte
Dim Tableau()
Dim Tableau2()
Dim i As Byte, j As Byte, k As Byte
Dim Aleat As Integer
Lig = Range('C65536').End(xlUp).Row - 3
ReDim Tableau(Lig)
For Each Val In Range('C4:C' & Lig + 3)
Tableau(Val.Row - 4) = Val
Next Val
For i = 1 To Lig
Randomize
Aleat = Int(Rnd * UBound(Tableau)) + 1
Cells(i + 3, 3) = Tableau(Aleat - 1)
ReDim Tableau2(Lig - i)
For j = 1 To Lig - i
k = 0
If j >= Aleat Then k = 1
Tableau2(j - 1) = Tableau(j + k - 1)
Next j
ReDim Tableau(Lig - i)
For j = 1 To Lig - i
Tableau(j - 1) = Tableau2(j - 1)
Next j
Next i