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

Numeros aléatoires sans doublons

6 réponses
Avatar
Philippe
Bonjour a tous,

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans les
cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons

Merci de votre aide

Philippe

6 réponses

Avatar
garnote
Salut Philippe,

À partir de A1 ???

Voici une macro donnant 60 entiers distincts
compris entre 1 et la valeur contenue en A1 :
Sub HasardSansDoublons()
a = 1
b = Range("A1")
n = 60
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
[a7].Resize(i) = Application.Transpose(dico.items)
End Sub

Si j'ai mal saisi ta question, tiens-moi au courant.

Serge






"Philippe" a écrit dans le message de news:
4a75bde0$0$31097$
Bonjour a tous,

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans les
cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons

Merci de votre aide

Philippe


Avatar
MichDenis
Bonjour Garnote,

Je ne suis pas d'accord avec toi sur le titre
de ta procédure "HasardSansDoublons"
si tu n'ajoutes pas la commande : "Randomize"

;-)

"garnote" a écrit dans le message de groupe de discussion :
#
Salut Philippe,

À partir de A1 ???

Voici une macro donnant 60 entiers distincts
compris entre 1 et la valeur contenue en A1 :
Sub HasardSansDoublons()
a = 1
b = Range("A1")
n = 60
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
[a7].Resize(i) = Application.Transpose(dico.items)
End Sub

Si j'ai mal saisi ta question, tiens-moi au courant.

Serge






"Philippe" a écrit dans le message de news:
4a75bde0$0$31097$
Bonjour a tous,

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans les
cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons

Merci de votre aide

Philippe


Avatar
MichDenis
Et j'ai oublié de mentionner que si tu ne fais pas
de test sur la valeur en A1, si a1 affiche une
valeur inférieure à 60, tu vas te retrouver dans
une boucle sans fin !


"MichDenis" a écrit dans le message de groupe de discussion :
#
Bonjour Garnote,

Je ne suis pas d'accord avec toi sur le titre
de ta procédure "HasardSansDoublons"
si tu n'ajoutes pas la commande : "Randomize"

;-)

"garnote" a écrit dans le message de groupe de discussion :
#
Salut Philippe,

À partir de A1 ???

Voici une macro donnant 60 entiers distincts
compris entre 1 et la valeur contenue en A1 :
Sub HasardSansDoublons()
a = 1
b = Range("A1")
n = 60
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
[a7].Resize(i) = Application.Transpose(dico.items)
End Sub

Si j'ai mal saisi ta question, tiens-moi au courant.

Serge






"Philippe" a écrit dans le message de news:
4a75bde0$0$31097$
Bonjour a tous,

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans les
cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons

Merci de votre aide

Philippe


Avatar
LE TROLL
Bonjour,

Tu mets tes résultats dans une listBox, et tu compares pour enlever les
doublons

Dim hasard As long
dim maxi as long
dim mini as long
dim pasPositif as long
dim i as long
maxi = 1000
mini = 1
pasPositif = 1
list1.clear
bis:
Randomize
hasard = Int((maxi - mini + pasPositif) * Rnd + mini)
for i = 0 to list1.listcount - 1
if hasard = list1.list(list1.listindex) then goto bis
next i
list1.additem hasard
if list1.listcount <> 60 then bis
for i = 0 to 59
taCellule(x) = list1.list(i)
next i
list1.clear


--
Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"Philippe" a écrit dans le message de
news:4a75bde0$0$31097$
Bonjour a tous,

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans les
cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons

Merci de votre aide

Philippe


Avatar
Fredo P.
Public Sub alea()
Dim c As Object, EQt%
Dim Pl As Range
Set Pl = Range("plg") 'pl.address
For i = 1 To 60
Do
EQt = Int([A1] * Rnd + 1)
Loop Until Pl.Find(EQt) Is Nothing
Pl(i) = EQt
Next
End Sub

"Philippe" a écrit dans le message de news:
4a75bde0$0$31097$
Bonjour a tous,

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans les
cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons

Merci de votre aide

Philippe


Avatar
Modeste
Bonsour® Philippe avec ferveur ;o))) vous nous disiez :

en A1 une valeur variable soit 1784
A partir de A1 , je souhaite obtenir 60 numéros uniques entiers dans
les cellules A7 à A66 en Visual Basic
J'ai essayé avec la fonction aléas entre bornes mais j ai des doublons




en B7 tu ecris : =ALEA()
en A7 tu ecris : =$A$1+ RANG(B7;$B$7:$B$66)

tu selectionnes A7:B7
à l'aide de la poignée de recopie en bas à droite de B7
tu tires l'ensemble vers le bas jusque la ligne 66

tu entre une valeur en A1
tu appuie sur F9 pour generer une nouvelle serie
;o)))
tu peux même masquer la colonne B

;o)))
garanti sans doublons !!!!!