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