Bonjour à toi !
Indéniablement la procédure la plus rapide est celle fournie par Eric... !
A son intention d'ailleurs j'indique que j'avais revu la mienne, pour compacter un peu plus les opérations, sans résultats, mais la seconde version revue à nouveau en plaçant les résultats dans un tableau de même forme que la plage pour affectation directe m'a fait réduire sensiblement mon temps...
Sub MélangerLettres3()
Dim TMix(1 To 30, 1 To 30), LstInit$, k$, i&, x&, t!
t = Timer
For i = 1 To 900
LstInit = LstInit & ChrW(i + 32)
Next i
Randomize
With ActiveSheet.Range("A1:AD30")
For i = 1 To 900
x = Int(Len(LstInit) * Rnd + 1)
k = Mid(LstInit, x, 1)
x = AscW(k) - 32
TMix((i - 1) \ 30 + 1, (i - 1) Mod 30 + 1) = .Cells(x)
LstInit = Replace(LstInit, k, "")
Next i
.Value = TMix
End With
MsgBox (Timer - t) * 1000
End Sub
Celle-ci se déroule en 46 millisecondes. Je suis encore au-dessus des 30 autour desquelles tu plafonnes mais c'est tout de même mieux (mais je ne vois plus avec cette méthode comment gagner encore 15 à 20 millisecondes, surtout que j'obtiens parfois 15 ou 16 avec la tienne, voire même 14 une fois)
Cordialement.