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 :
Rappel de Unparia :
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
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.
Partager