XL 2013 crer une liste de nombres aleatoires entre un min et un max avec une fonction VBA méthode particulière

patricktoulon

XLDnaute Barbatruc
Bonsoir à tous
c'est juste pour le fun
perso pour créer une liste de nombres aléatoires je préfère mélanger une liste ordonné(dans l'ordre au départ)
on a la garantie de non doublons et c'est largement plus rapide
sauf que là l'exercice est encore plus intéressant
je demarre avec une liste (un array vide(sans valeur)
alors pour faire de 1 à max ca va ,mais pour faire de min à max ca devient compliqué avec cette méthode tout du moins sans transformé un code très simple à la base en en centrale nucléaire

voici la méthode avec un array vide sans doublons et de 1 à max
VB:
Function randomListNumber(maxi)
   Dim i&, X&, temp
   Randomize
    ReDim t(1 To maxi)
    For i = 1 To maxi
        If t(i) = "" Then t(i) = i
        temp = t(i)
        X = 1 + Int((Rnd * (maxi - 1)))
        If t(X) = "" Then t(X) = X
        t(i) = t(X)
        t(X) = temp
    Next
    randomListNumber = t
End Function

Sub test()
    MsgBox Join(randomListNumber(30), vbCrLf)
End Sub
 

dysorthographie

XLDnaute Accro
VB:
Sub test()
MsgBox Join(TriFoutoir(Array(1, 2, 3, 4, 5)), vbCr)
End Sub
Function TriFoutoir(ByVal TB)
Dim C As New Collection, ID As Integer, I As Integer
For Each T In TB
    C.Add T
Next
Randomize Timer

For I = LBound(TB) To UBound(TB)
  ID = Int(C.Count * Rnd + 1)
  TB(I) = C(ID)
  C.Remove ID
Next
TriFoutoir = TB
End Function
 

patricktoulon

XLDnaute Barbatruc
re
oui mais dans ton exemple elle est absolument inutile puisque tu injecte TB qui est dans l'ordre
dans la boucle intervertir deux indexs est suffisant
bien que le jeu de la collection /rnd /ID/remove est intéressant
c'est pas une méthode que je vais retenir
mais l'idée est belle quand même
 

Statistiques des forums

Discussions
312 207
Messages
2 086 246
Membres
103 163
dernier inscrit
Pelaez