Bon, c'est un truc à quatre sous espagnols, mais l'ouverture d'un récent sujet me donne à penser qu'il convient de déposer ce petit code.
Il permet d'extraire à très vive allure, dans doublons, des nombres aléatoires d'une fourchette de nombres.
La technique utilisée est très différente des techniques habituelles. Je ne vais jamais rechercher si un nombre a déjà été utilisé. J'app)lique tout simplement une technique du "pousse-toi de là que je m'y mette", largement inspirée des habitudes bien connues d'un sapeur pompier (il s'appelait Camembert.... je ne plaisante pas...) auquel son chef avait fait remarquer qu'il y avait un trou dans la cour de la caserne. Notre brave ami Camembert a bouché ce trou en creusant un peu plus loin pour récolter de la terre et boucher le 1er trou. Mais voilà ! le 1er était bouché, mais il y en avait alors un autre, ainsi créé... qu'il a bouché en faisant donc un 3ème trou... et ainsi de suite .....à l'infini !!!!
Attitude idiote ? Certes !... Mais je m'en suis servi souvent (je vous raconterai un jour comment on peut l'utiliser pour avoir 1.000.000 d'idarts apparemment identiques dans une base de données et les retrouver tous à la vitesse grand V..., aussi rapidement que si l'on connaissait chacun des idarts concernés... dur dur et à la fois facile facile... merci à cet innocent de sapeur Camembert...)
Amitiés d'un vieux fou.
Source / Exemple :
Non !
Pas de zip pour si peu :
Une form, une listbox nommée List1 et un bouton de commande nommé Command1.
Code :
Private Sub Command1_Click()
Const nbmini = 100 '-----ici la borne inférieure
Const nbmaxi = 200 '-----ici la borne supérieure
Const nbatirer = 101 'ici le nombre de numéros aléatoires à sortir entre les 2 bornes
fourch = nbmaxi - nbmini
If fourch + 1 < nbatirer Then
MsgBox "Il est impossible de tirer " & nbatirer & "nombres dans la fourchette comprise entre " _
& nbmini & " et " & nbmaxi & " qui ne comprend que " & fourch + 1 & " nombres, VOYONS !!!"
Exit Sub
End If
Randomize
Dim tabl(nbmaxi - nbmini + 1) As Integer, i As Integer, a As String, ou As Integer
For i = 0 To nbmaxi - nbmini
tabl(i) = nbmini + i
Next
List1.Clear
For i = 0 To nbatirer - 1
ou = Int(((fourch - i) * Rnd))
a = a & vbCrLf & tabl(ou)
List1.AddItem tabl(ou)
tabl(ou) = tabl(fourch - i)
Next
Erase tabl
End Sub
Voilà tout ! Vous aurez l'occasion de mesurer la vitesse de traitement !
Je signe ici mais aurait préféré y voir celle de notre ami sapeurpompier, décédé il y a des décennies....
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.