Nombres aléatoires sans doublons

Le
garnote
Bonjour,

Avec cette macro, j'obtiens en A1:A12, douze entiers
distincts compris entre 1 et 50 :
Sub HasardSansDoublons()
a = 1
b = 50
n = 12
Set dico = CreateObject("Scripting.Dictionary")
Do Until i = n
v = Int((b - a + 1) * Rnd() + a)
If Not dico.Exists(v) Then
dico.Add v, v
i = i + 1
End If
Loop
[a1].Resize(i) = Application.Transpose(dico.items)
End Sub
Mais voilà, j'aimerais me référer à ces nombres sans les
inscrire dans des cellules ?
Par exemple, quel est le deuxième trouvé ?
J'ai essayé dico(2) et dico.Items(2) mais
ça ne mène nulle part.

Serge
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #19754361
Bonjour.
Bizarrement :
Var = dico.items
toto = Var(2)
Cordialement.
Daniel

Bonjour,

Avec cette macro, j'obtiens en A1:A12, douze entiers
distincts compris entre 1 et 50 :
Sub HasardSansDoublons()
a = 1
b = 50
n = 12
Set dico = CreateObject("Scripting.Dictionary")
Do Until i = n
v = Int((b - a + 1) * Rnd() + a)
If Not dico.Exists(v) Then
dico.Add v, v
i = i + 1
End If
Loop
[a1].Resize(i) = Application.Transpose(dico.items)
End Sub
Mais voilà, j'aimerais me référer à ces nombres sans les
inscrire dans des cellules ?
Par exemple, quel est le deuxième trouvé ?
J'ai essayé dico(2) et dico.Items(2) mais
ça ne mène nulle part.

Serge


MichDenis
Le #19754501
Admettons que tu modifies ce bout de procédure comme ceci :

If Not dico.Exists(v) Then
g = g + 1 'Compteur
dico.Add g, v
i = i + 1
End If

Si tu veux retracer le deuxième item :
Msgbox dico(2)



"garnote"
Bonjour,

Avec cette macro, j'obtiens en A1:A12, douze entiers
distincts compris entre 1 et 50 :
Sub HasardSansDoublons()
a = 1
b = 50
n = 12
Set dico = CreateObject("Scripting.Dictionary")
Do Until i = n
v = Int((b - a + 1) * Rnd() + a)
If Not dico.Exists(v) Then
dico.Add v, v
i = i + 1
End If
Loop
[a1].Resize(i) = Application.Transpose(dico.items)
End Sub
Mais voilà, j'aimerais me référer à ces nombres sans les
inscrire dans des cellules ?
Par exemple, quel est le deuxième trouvé ?
J'ai essayé dico(2) et dico.Items(2) mais
ça ne mène nulle part.

Serge
garnote
Le #19754711
Merci à vous deux et bonne journée.

Serge
"L'art est long et la vie est courte".

"garnote"
Bonjour,

Avec cette macro, j'obtiens en A1:A12, douze entiers
distincts compris entre 1 et 50 :
Sub HasardSansDoublons()
a = 1
b = 50
n = 12
Set dico = CreateObject("Scripting.Dictionary")
Do Until i = n
v = Int((b - a + 1) * Rnd() + a)
If Not dico.Exists(v) Then
dico.Add v, v
i = i + 1
End If
Loop
[a1].Resize(i) = Application.Transpose(dico.items)
End Sub
Mais voilà, j'aimerais me référer à ces nombres sans les
inscrire dans des cellules ?
Par exemple, quel est le deuxième trouvé ?
J'ai essayé dico(2) et dico.Items(2) mais
ça ne mène nulle part.

Serge



Mishell
Le #19757171
Bonjour.
Tu peux aussi utiliser une collection pour obtenir douze entiers distincts.

Dim dico As New Collection

a = 1
b = 50
n = 12
ligne = 0
Randomize Timer
On Error Resume Next
Do Until dico.Count = n
v = Int((b - a + 1) * Rnd() + a)

ligne = dico.Count
dico.Add Item:=v, key:=CStr(v)

If ligne < dico.Count Then
[b1].Cells(dico.Count, 1) = dico.Item(dico.Count)
End If

Loop
On Error GoTo 0

Debug.Print dico.Item(2)

Mishell


"garnote" news:
Bonjour,

Avec cette macro, j'obtiens en A1:A12, douze entiers
distincts compris entre 1 et 50 :
Sub HasardSansDoublons()
a = 1
b = 50
n = 12
Set dico = CreateObject("Scripting.Dictionary")
Do Until i = n
v = Int((b - a + 1) * Rnd() + a)
If Not dico.Exists(v) Then
dico.Add v, v
i = i + 1
End If
Loop
[a1].Resize(i) = Application.Transpose(dico.items)
End Sub
Mais voilà, j'aimerais me référer à ces nombres sans les
inscrire dans des cellules ?
Par exemple, quel est le deuxième trouvé ?
J'ai essayé dico(2) et dico.Items(2) mais
ça ne mène nulle part.

Serge



Publicité
Poster une réponse
Anonyme