Sub tirage()
Dim k As Byte, Coln As Object, y As Long, n As Long, c As Byte, l As Byte
Dim Tablo(), i As Integer
Set Coln = CreateObject("Scripting.Dictionary") ' collection de Numéro unique sans doublon
With Sheets("Liste")
y = .Range("C65536").End(xlUp).Row 'N° de la dernière ligne feuille non vide "Liste"
Do 'la boucle se fait tant que k est < 14 (14 repas à choisir)
Randomize 'Initialise le générateur de nombres aléatoires
n = Int((y) * Rnd + 1) 'détermination d'un Numéro aléatoire entre 1 et y
If n <> 1 Then 'pour ne pas prendre en compte la ligne 1 de la feuille "Liste"
If Not Coln.Exists(n) Then 'si le N° "n" n'existe pas dans la collection "Coln"
Coln.Add n, n ' on l'ajoute
k = k + 1
ReDim Preserve Tablo(1, 1 To k) 'mise dans un tableau des repas
Tablo(1, k) = .Cells(n, 3)
End If
End If
Loop While k < 14
End With
c = 3 ' colonne 3
l = 5 'ligne 5
For i = 1 To UBound(Tablo, 2) ' boucle sur les éléments du tablo (de 1 à 14)
With Sheets("Grille")
.Cells(l, c) = Tablo(1, i) 'remplissage des celulles de la feuille "Grille"
c = c + 1 ' incrémente le n° des colonnes 3 à 9, ligne 5
If c = 10 Then c = 3: l = 8 'pour passer à la ligne 8 colonne 3 (cellule C8)
End With
Next
Set Coln = Nothing
End Sub