Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

patricktoulon

XLDnaute Barbatruc
j'avais lu ta réponse déjà
et ton classeur s'ouvre en mode protégé
le fait que randomize provoque plus de doublons ça me conforte dans l'idée que c'est une pile
pour tester ma théorie je vais tester la boucle 3628 dans la sub de la serie
 

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
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…