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

Nombres aléatoires différents

  • Initiateur de la discussion Initiateur de la discussion oliverthekid
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

O

oliverthekid

Guest
Bonjour,

Je souhaite donner une identification personelle a plus de 4000 éléments sur une base de donnée.
Il me faut donc pour cela un tirage aléatoire avec des nombres différents à chaque fois, idéalement entre 1000 et 9999.
J'ai vu beaucoup de solutions différentes pour des tirages entre 1 et 5 ou 1 et 16, mais pas entre 1000 et 9999!

Avez-vous une solution???

Merci d'avance!
 
Re : Nombres aléatoires différents

Salut Oliverthekid,
voici une proposition. Vous n'avez qu'à changer les paramètres à votre guise.

VB:
Sub Test()
Dim Limite_Haut As Integer, Limite_Bas As Integer, NB_Aleatoire As Integer, i As Integer
Dim Nombre_Iterations As Integer

Randomize

Limite_Bas = 1000
Limite_Haut = 9999
Nombre_Iterations = 1000

For i = 1 To Nombre_Iterations
    NB_Aleatoire = Int((Haut - Bas + 1) * Rnd) + Bas
Next i

End Sub

Cordialement,

Étienne
 
Re : Nombres aléatoires différents

Bonjour oliverthekid,

et pourquoi aléatoire ?
pourquoi pas des identifiants qui vont de 1000 à 5000 (dans l'ordre) ?

Edit : Bonjour Etienne
Pas mal le code, mais il me semble que pour 1 Randomize, 256 valeurs aléatoires sont générées et qu'après il boucle dessus, donc tu risque fortement d'avoir des doublons

ReEdit : Il semblerait que les 256 soient dans les versions antérieures à 2003... Il ont amélioré le moteur aléatoire depuis Office 2003, mais le risque de doublons subsiste puisqu'il y a "arrondi" à un entier entre 1000 et 9999, et plusieurs valeurs aléatoires différentes peuvent produire le même entier
 
Dernière édition:
Re : Nombres aléatoires différents

Re,

Sur la base du code d'Etienne

Code:
Sub Test()
Dim Limite_Haut As Integer, Limite_Bas As Integer, NB_Aleatoire As Integer, i As Integer
Dim Nombre_Iterations As Integer, Dico, Tablo

Randomize
Set Dico = CreateObject("Scripting.Dictionary")

Limite_Bas = 1000
Limite_Haut = 9999
Nombre_Iterations = 1000
On Error Resume Next
Do
    NB_Aleatoire = Int((Limite_Haut - Limite_Bas + 1) * Rnd) + Limite_Bas
    Dico.Add NB_Aleatoire, NB_Aleatoire
Loop Until Dico.Count >= Nombre_Iterations
On Error GoTo 0
Tablo = Dico.Items
For i = 1 To Nombre_Iterations
Range("A" & i).Value = Tablo(i - 1)
Next i
End Sub
 
Re : Nombres aléatoires différents

Bonjour a tous

en supposant les 4000 elements en colonne A a partir de A1 la macro ci-dessous affectera aleatoirement un N° entre 1000 et 9999 a chacun ecrit en colonne B

VB:
Sub alea()
Dim coll As Collection
Set coll = New Collection
While coll.Count < 4000
Randomize
x = Int((8999 * Rnd) + 1000)
On Error Resume Next
coll.Add Item:=x, Key:=CStr(x)
On Error GoTo 0
Wend
For n = 1 To 4000
Range("B" & n) = coll(n)
Next n
End Sub
 
Re : Nombres aléatoires différents

Salut oliver, tototiti, le fil,
@ tototiti : C'est un ajout absolument brillant que d'avoir pensé à créer une liste sans doublon. Petite question, pourquoi passer, à la fin de votre code, par une boucle et un tablo ? Pourquoi ne pas vider le dico directement sur la plage ?

Par exemple :

VB:
Sub Test()
Dim Limite_Haut As Integer, Limite_Bas As Integer, NB_Aleatoire As Integer, i As Integer
Dim Nombre_Iterations As Integer, Dico

Application.ScreenUpdating = False

Randomize
Set Dico = CreateObject("Scripting.Dictionary")

Limite_Bas = 1000
Limite_Haut = 9999
Nombre_Iterations = 1000
On Error Resume Next
Do
    NB_Aleatoire = Int((Limite_Haut - Limite_Bas + 1) * Rnd) + Limite_Bas
    Dico.Add NB_Aleatoire, NB_Aleatoire
Loop Until Dico.Count >= Nombre_Iterations
On Error GoTo 0

Range("A1:A" & Nombre_Iterations).Value = Application.Transpose(Dico.items)

End Sub

Cordialement,

Étienne
 
Dernière édition:
Re : Nombres aléatoires différents

Re,
Bonjour PierreJean,

@PierreJean : c'est vrai que je ne pense pas à la solution Collection, il faudra que je m'y mette 😉
@Etienne :

Pourquoi ne pas vider le dico directement sur la plage ?

Euh, à cause du Transpose qui m'était sorti de l'esprit ?
Pour me la péter, je dirais que dans les anciennes version d'Excel transpose était limité à un certain nombre d'éléments et que j'évite de l'utiliser pour une meilleure compatibilité, mais en vrai la façon de l'écrire ne me revenais plus 😉
 
Re : Nombres aléatoires différents

Re

Mais non tototiti

Le dictionary est très bien aussi
Une version a ma sauce

VB:
Sub alea()
Set dico = CreateObject("Scripting.Dictionary")
 Randomize
While dico.Count < 4000
  x = Int((8999 * Rnd) + 1000)
  dico(x) = 1
Wend
Range("B1").Resize(4000, 1) = Application.Transpose(dico.keys)
End Sub
 
Re : Nombres aléatoires différents

Merci pour tous vos messages,

Tototiti, il me faut des nombres aléatoires car je ne veux aucune influence chronologique ou alphabétique sur mes ID.

Je suis extrèment débutant sur VBA, je vais donc essayer vos codes!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
0
Affichages
887
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…