vba alea entre bornes sans doublon en VBA

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 !

pascal21

XLDnaute Barbatruc
bonsoir
j'ai trouvé ce code qui ma permet de générer une liste de nombres entre bornes mais sans doublons
c'est = à alea.entre.bornes mais sans les doublons
elle à fonctionné deux ou trois fois et voilà que à chaque fois maintenant excel bug dessus
avez-vous une idée du problème
ou mieux avez-vous une autre solution à ma proposer
merci
Code:
Sub HasardSansDoublons1()
Range("f6:f260").Value = ClearContents 'j'efface les anciens choix
a = 1
b = Range("f2") 'cellule qui contient le chiffre maxi que devra avoir la liste maxi dans tous les cas 256
n = 60 'je ne sais pas ce que c'est si vous avez une idée .....
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
[e6].Resize(i) = Application.Transpose(dico.items) 'colonne où se trouve la liste 'départ en E6
End Sub
 
Dernière édition:
Re : code vba qui fait bugguer excel

Bonjour,

je te propose cette adaptation :
VB:
Sub HasardSansDoublons2()
Range("e6:e261").ClearContents 'j'efface les anciens choix
a = 1 ' borne Mini
b = 256 ' borne Maxi
Set dico = CreateObject("Scripting.Dictionary")
Do Until i = b - a +1
v = Int((b - a + 1) * Rnd() + a)
If Not dico.Exists(v) Then
dico.Add v, v
i = i + 1
End If
Loop
[e6].Resize(i) = Application.Transpose(dico.items) 'colonne où se trouve la liste 'départ en E6
End Sub
 
Dernière édition:
Re : vba alea entre bornes sans doublon en VBA

Bonjour à tous


Une autre approche avec une fonction "tirage".
VB:
Sub test()
    [E6].Resize(Range("F2").Value) = tirage(1, Range("F2").Value)
End Sub

Function tirage(min&, max&)
Dim i&, tmp&, alea!
    If min > max Then Exit Function
ReDim Table&(min To max, 0)
    For i = min To max: Table(i, 0) = i: Next
    Randomize
    For i = min To max
        tmp = Table(i, 0)
        alea = Int(i + (max - min - i + 2) * Rnd)
        Table(i, 0) = Table(alea, 0): Table(alea, 0) = tmp
    Next
    tirage = Table
End Function


ROGER2327
#5524


Mardi 24 Gueules 139 (Conversion de Saint Matorel, bateleur - fête Suprême Quarte)
29 Pluviôse An CCXX, 0,0523h - chélidoine
2012-W07-6T00:07:32Z
 
Re : vba alea entre bornes sans doublon en VBA

Bonsoir,

Combien de valeurs aléatoires veux-tu générer? Tant que F2 est compris entre 1 et 256, ça devrait fonctionner...
Quel genre de message d'erreur reçois-tu ?

Peux-tu joindre ton fichier? Ça nous aiderait peut-être à cerner ton problème.
 
Re : vba alea entre bornes sans doublon en VBA

Bonjour à tous,

@ pascal21: une proposition à adapter.

Code:
Sub TirageUnique()
Dim Tablo(1 To 52)
Dim cpt As Byte, base As Byte, n As Byte, tmp As Byte, i As Integer
For n = 1 To 52: Tablo(n) = n: Next
cpt = UBound(Tablo): base = LBound(Tablo)
Randomize Timer
For n = base To cpt
i = Int((cpt - n + 1) * Rnd + base)
tmp = Tablo(i)
Tablo(i) = Tablo(cpt - n + base)
Tablo(cpt - n + base) = tmp
Next
Range("A1").Resize(52) = Application.Transpose(Tablo)
End Sub


A+ 😎
 
Re : vba alea entre bornes sans doublon en VBA

bonjour et merci pour vos réponses
j'ai pris celle de roger au final
et j'ai fini pas voir ce qui clochait sur mon fichier
j'avais tout simplement rajouté une colonne sans rectifier tout le code
 
- 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

Discussions similaires

Réponses
1
Affichages
2 K
Retour