Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nombres aléatoires sans doublons

4 réponses
Avatar
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

4 réponses

Avatar
Daniel.C
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


Avatar
MichDenis
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" a écrit dans le message de groupe de discussion :

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
Avatar
garnote
Merci à vous deux et bonne journée.

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

"garnote" a écrit dans le message de 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



Avatar
Mishell
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" wrote in message
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