Randomize - Algorithme, mécanisme, comment fonctionne l'aléa sous VBA Excel
Bonjour,
Bonjour Jacques ;)
Lors de cette discussion (n'allez pas la consulter, elle est sans rapport avec la présente), a été soulevé le problème de la génération de nombres aléatoires sous VBA.
Dans cette même discussion, Marc-L utilise un code générant aléatoirement 5 lettres qu'il répartit sur 65000 lignes et 5 colonnes.
Ce code [donné dans cette réponse] génère systématiquement la même série de lettres :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| Sub Initialisation()
Const N = 65535
Dim C&, R&, S$(N, 4)
Randomize 666.666
ActiveSheet.UsedRange.Clear
[I1].Select
For R = 0 To N
For C = 0 To 4: S(R, C) = Chr$((5 * Rnd) + 65): Next
Next
Application.ScreenUpdating = False
[A1].Resize(N + 1, 5).Value = S
Application.ScreenUpdating = True
End Sub |
Rappel de Unparia :
Citation:
Envoyé par
unparia
Petite mise au point et/ou rappel en ce qui concerne les nombres aléatoires. Rien n'est plus hasardeux que de les traiter par l'informatique, du fait même de la répétition de ce sur quoi on assoit l'aléa.
C'est là un VRAI problème, dont il faut avoir conscience. Personne, jusqu'à présent, n'est parvenu avec un simple ordinateur, à tirer, sur une très longue série de tirages, un nombre à peu près égal de tirages pour chacun des éléments composant l'ensemble sur lequel on procède au tirage. ;)
Dans son code, Marc "assoit" son aléa sur la même valeur numérique : 666.666.
Il obtient systématiquement le même résultat.
Si l'on change 666.666 par une autre constante, on obtient une autre série qui, restera immuable avec cette autre valeur.
Si l'on supprime cette valeur (Randomize seul) la série évoluera à chaque appel (il en va de même si on lui donne une valeur changeante telle que Randomize Timer).
Je voudrais aujourd'hui approfondir le sujet et comprendre :
- Comment fonctionne Randomize,
- Est ce qu'il est initialisé à chaque appel de Rnd(),
- Quel est (ou quel serait) l'algorithme utilisé pour la génération des nombres aléatoires,
- Etc...
- Lister les cas d'utilisation les plus fréquents,
- En fonction de ces différents cas, trouver une solution adaptée.
- Etc...
Merci par avance de toutes contributions.