Sub Tirage()
Dim T, R, i&, ii&, aux, N&
With Feuil1
.Range("i2:k" & Rows.Count).ClearContents 'effacement dernier tirage
Application.ScreenUpdating = False
T = .Range("a1:c1").Resize(.Cells(Rows.Count, "a").End(xlUp).Row) 'acquisition données
If UBound(T) = 1 Then Exit Sub 'test si aucune donnée
ReDim R(1 To UBound(T)) 'tableau des numéros de lignes
For i = 2 To UBound(T): R(i) = i: Next i
Randomize 'reset du générateur de nombres aléatoires
For i = 2 To UBound(T) 'mélange du tableau des numéros de lignes
ii = 2 + Int(Rnd * (UBound(T) - 1))
aux = R(i): R(i) = R(ii): R(ii) = aux
Next i
N = Int((UBound(R) - 1) * .Range("f1")) + 1 'Nbr de lignes à tirer +une
Do 'tri du tableau des numéros de lignes
aux = Empty
For i = 2 To N - 1
If R(i) > R(i + 1) Then
aux = R(i): R(i) = R(i + 1): R(i + 1) = aux
End If
Next i
Loop Until IsEmpty(aux)
'copie des lignes tirées vers le haut du tableau des données
For i = 2 To N: For ii = 1 To 3: T(i, ii) = T(R(i), ii): Next ii: Next i
.Range("i1").Resize(N, 3) = T 'écriture des lignes tirées au sort
End With
End Sub