Sub test()
Dim c As Range, Liste2
'liste des nombres à répartir dans les cellules de la colonne A
Liste2 = Array(579, 585, 591, 597, 603, 610, 616, 622, 629, 635, 642, 649, 656, 663, 670, 677)
'c est la plage A2 au départ
Set c = Feuil1.Range("A2")
'Pour toutes les cellules de D2 à Dxx où xx est le nombre de valeurs dans ta Liste2 +2
With Feuil1.Range("D2:D" & UBound(Liste2) + 2)
'On copie liste2 dans ces cellules en colonne C
.Value = Application.Transpose(Liste2)
' en colonne E, on met un nombre aléatoire (entre 0 et 1)
.Offset(, 1).Formula = "=rand()"
'dont on ne garde que le nombre et pas la formule : ainsi en colonne E on a des nombres aléatoire entre 0 et 1
.Offset(, 1).Value = .Offset(, 1).Value
End With
'Je trie la colonne E par ordre croissant, du coup, l'ordre des colonnes D est modifié (ça mélange les entrées)
Range("D2").Sort Key1:=Range("E1"), order1:=xlAscending, header:=xlYes
'Même opération que la colonne E sur la colonne B (pour mélanger la colonne A) :
With Range("B2:B" & Range("A10000").End(xlUp).Row)
.FormulaR1C1 = "=Rand()" 'on met des nombres entre 0 et 1 par formule
.Value = .Value 'on garde que les valeurs, pas les formules
End With
'Puis on trie sur l'ordre des nombres aléatoires de la colonne B, pour ordonner la colonne A
Range("A2").Sort Key1:=Range("B1"), order1:=xlAscending, header:=xlYes
'depuis la cellule c (A2), tant qu'elle est pas vide
Do Until c = ""
'copie la valeur de la colonne D, à l'adresse de la cellule c
Sheets(Split(c, "!")(0)).Range(Split(c, "!")(1)) = c.Offset(, 3)
'on descend la cellule c d'une ligne
Set c = c.Offset(1)
Loop
End Sub