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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 Voir le message
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 :
  1. Comment fonctionne Randomize,
  2. Est ce qu'il est initialisé à chaque appel de Rnd(),
  3. Quel est (ou quel serait) l'algorithme utilisé pour la génération des nombres aléatoires,
  4. Etc...
  5. Lister les cas d'utilisation les plus fréquents,
  6. En fonction de ces différents cas, trouver une solution adaptée.
  7. Etc...


Merci par avance de toutes contributions.