Procédure rand en VBA, mais 1 seule fois

Le
Alain Lebayle
Bonjour,
J'ai créé un petit jeu qui pose des questions, dans ce cas des pays dans
une colonne et il faut trouver les capitales qui sont dans l'autre
colonne masquée, j'ai pour cela utiliser rand, cela sort au hasard les
pays mais ils reviennent souvent. Comment faire pour qu'une fois le pays
sorti, il ne revient pas dans le rand ?

Je vous remercie
Alain

Sheets("Params").Range("T1").Value = index(R1:R26,int(rand()*(27-1)+1))]
Lbl_départ = Sheets("Params").Range("T1").Value
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
michdenis
Le #21487392
Bonjour,

Tu copies ceci dans un module standard :

'---------------------------------------------------------------
Sub Liste_Pays_au_hasard()
Dim A As Long, B As Long, I As Long, X As Integer
Dim Arr As Variant, N As Long, NbPays As Integer
'Dim D As Object, Texte As String
Dim NomFeuille As String, Adr As String

'Liste des caractères possible :
'Adapte le nom de la feuille où sont tes données
With Worksheets("Sheet1")
Arr = .Range("R1:R26") ' Plage contenant tes pays
End With

'********* Variables à renseigner **************

NbPays = UBound(Arr) 'Nombre de pays total
N = NbPays 'Nombre de pays que tu veux sortir
'lors du tirage. Ne peut pas être
'plus grand que le nombre de pays total
'Si tu veux un nombre moins grand que le total, tu soustrait
'N = NbPays - 5

NomFeuille = "Feuil1" ' nom de l'onglet de la feuille
'où la liste sera inscrite
Adr = "A1" ' Adresse de la première cellule
' où débutera la liste
'***************************************************

I = 0
Set D = CreateObject("Scripting.Dictionary")
Do Until I = N
For X = 1 To NbPays
Randomize
Texte = Texte & Arr(Int((UBound(Arr, 1) - _
LBound(Arr, 1) + 1) * Rnd + LBound(Arr, 1)), 1)

If Not D.Exists(Texte) Then
D.Add Texte, Texte
I = I + 1
End If
Texte = ""
Next
Loop

With Sheets(NomFeuille)
.Range(Adr).NumberFormat = "Genreral"
.Range(Adr).Resize(N) = Application.Transpose(D.Items)
End With
End Sub
'---------------------------------------------------------------




"Alain Lebayle" discussion :
Bonjour,
J'ai créé un petit jeu qui pose des questions, dans ce cas des pays dans
une colonne et il faut trouver les capitales qui sont dans l'autre
colonne masquée, j'ai pour cela utiliser rand, cela sort au hasard les
pays mais ils reviennent souvent. Comment faire pour qu'une fois le pays
sorti, il ne revient pas dans le rand ?

Je vous remercie
Alain

Sheets("Params").Range("T1").Value = index(R1:R26,int(rand()*(27-1)+1))]
Lbl_départ = Sheets("Params").Range("T1").Value
michdenis
Le #21487622
Bonjour,

Tu copies ceci dans un module standard :

'------------------------------------------------
Sub Lister_Pays_au_hasard_Sans_Doublon()
Dim A As Long, I As Long, X As Integer
Dim Arr As Variant, N As Long, NbPays As Integer
Dim D As Object, Pays As String
Dim NomFeuille As String, Adr As String

'Adapte le nom de la feuille où sont tes données
With Worksheets("Sheet1")
Arr = .Range("R1:R26") ' Plage contenant tes pays
End With

'********* Variables à renseigner **************

NbPays = UBound(Arr) 'Nombre de pays total
N = NbPays 'Nombre de pays que tu veux sortir
'lors du tirage. Ne peut pas être
'plus grand que le nombre de pays total
'Si tu veux un nombre moins grand que le total, tu soustrait
'N = NbPays - 5

NomFeuille = "Feuil1" ' nom de l'onglet de la feuille
'où la liste sera inscrite
Adr = "A1" ' Adresse de la première cellule
' où débutera la liste
'***************************************************

Set D = CreateObject("Scripting.Dictionary")

Do Until I = N
For X = 1 To NbPays
Randomize
Pays = Pays & Arr(Int((UBound(Arr, 1) - _
LBound(Arr, 1) + 1) * Rnd + LBound(Arr, 1)), 1)
If Not D.Exists(Pays) Then
D.Add Pays, Pays
I = I + 1
If I = N Then Exit For
End If
Pays = ""
Next
Loop

With Sheets(NomFeuille)
.Range(Adr).NumberFormat = "@"
.Range(Adr).Resize(N) = Application.Transpose(D.Items)
End With
End Sub
'------------------------------------------------





"Alain Lebayle" discussion :
Bonjour,
J'ai créé un petit jeu qui pose des questions, dans ce cas des pays dans
une colonne et il faut trouver les capitales qui sont dans l'autre
colonne masquée, j'ai pour cela utiliser rand, cela sort au hasard les
pays mais ils reviennent souvent. Comment faire pour qu'une fois le pays
sorti, il ne revient pas dans le rand ?

Je vous remercie
Alain

Sheets("Params").Range("T1").Value = index(R1:R26,int(rand()*(27-1)+1))]
Lbl_départ = Sheets("Params").Range("T1").Value
Alain Lebayle
Le #21488652
Bonjour, Michdenis,
Je suis parfaitement satisfait de ta procédure qui fonctionne à
merveille, un très grand merci à toi !
Bonne journée
Alain


michdenis a écrit :
Bonjour,

Tu copies ceci dans un module standard :

'------------------------------------------------
Sub Lister_Pays_au_hasard_Sans_Doublon()
Dim A As Long, I As Long, X As Integer
Dim Arr As Variant, N As Long, NbPays As Integer
Dim D As Object, Pays As String
Dim NomFeuille As String, Adr As String

'Adapte le nom de la feuille où sont tes données
With Worksheets("Sheet1")
Arr = .Range("R1:R26") ' Plage contenant tes pays
End With

'********* Variables à renseigner **************

NbPays = UBound(Arr) 'Nombre de pays total
N = NbPays 'Nombre de pays que tu veux sortir
'lors du tirage. Ne peut pas être
'plus grand que le nombre de pays total
'Si tu veux un nombre moins grand que le total, tu soustrait
'N = NbPays - 5

NomFeuille = "Feuil1" ' nom de l'onglet de la feuille
'où la liste sera inscrite
Adr = "A1" ' Adresse de la première cellule
' où débutera la liste
'***************************************************

Set D = CreateObject("Scripting.Dictionary")

Do Until I = N
For X = 1 To NbPays
Randomize
Pays = Pays & Arr(Int((UBound(Arr, 1) - _
LBound(Arr, 1) + 1) * Rnd + LBound(Arr, 1)), 1)
If Not D.Exists(Pays) Then
D.Add Pays, Pays
I = I + 1
If I = N Then Exit For
End If
Pays = ""
Next
Loop

With Sheets(NomFeuille)
.Range(Adr).NumberFormat = "@"
.Range(Adr).Resize(N) = Application.Transpose(D.Items)
End With
End Sub
'------------------------------------------------





"Alain Lebayle" discussion :
Bonjour,
J'ai créé un petit jeu qui pose des questions, dans ce cas des pays dans
une colonne et il faut trouver les capitales qui sont dans l'autre
colonne masquée, j'ai pour cela utiliser rand, cela sort au hasard les
pays mais ils reviennent souvent. Comment faire pour qu'une fois le pays
sorti, il ne revient pas dans le rand ?

Je vous remercie
Alain

Sheets("Params").Range("T1").Value = index(R1:R26,int(rand()*(27-1)+1))]
Lbl_départ = Sheets("Params").Range("T1").Value

Publicité
Poster une réponse
Anonyme