Numeros aléatoires sans doublons

Le
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
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
garnote
Le #19872371
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" 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


MichDenis
Le #19872551
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" #
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" 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


MichDenis
Le #19872541
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" #
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" #
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" 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


LE TROLL
Le #19872831
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" 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


Fredo P.
Le #19873111
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" 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


Modeste
Le #19873181
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 !!!!!
Publicité
Poster une réponse
Anonyme