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

Nombres aléatoires sans doublons

29 réponses
Avatar
Emile63
Bonjour Í  tous

En ces temps de confinement j'en profite pour répéter un peu mon anglais :-)
en me basant sur un classeur, qui contient une table de mots anglais (col.2 -> français col.1)
Avec une petite procédure, partiellement copiée ci-après, il m'apparait aléatoirement un mot que je dois identifier et traduire.
Le problème c'est que comme cette proc. fonctionne avec un générateur de nombres aléatoires (Randomize) certains mots reviennent plusieurs fois, alors que d'autres jamais... :(
Comment puis-je modifier ça pour que la variable "VocPosition" de donne pas deux fois le même chiffre et les utiles tous ?

'-----------------------------------------------------------------------------------------
Set VocTbl = ThisWorkbook.Worksheets("Liste des mots")
MaxVoc = (VocTbl.Cells(12, 2).End(xlDown).Row) - 10 'Compte le NB de mots de la colonne 2
Do
Randomize ' Initialise le générateur de nombres aléatoires.
VocPosition = Int((MaxVoc * Rnd) + 1) 'choisir un mot aléatoirement
'Bla, bla, Bla.

Loop While NouvelleEntrée = True
'-----------------------------------------------------------------------------------------

Je vous remercie d'avance pour votre aide et dans cette attente vous souhaite une très bonne journée.

9 réponses

1 2 3
Avatar
MichD
C'est la version Í  retenir. https://www.cjoint.com/c/KDfvgIx6BAj
Tout fonctionne bien... mais je n'ai pas testé les 100 expressions.
MichD
Avatar
Emile63
Le Monday, April 5, 2021 Í  11:07:57 PM UTC+2, MichD a écrit :
C'est la version Í  retenir. https://www.cjoint.com/c/KDfvgIx6BAj
Tout fonctionne bien... mais je n'ai pas testé les 100 expressions.
MichD

Bonjour MichD,
Merci pour ton implication et pour ton aide. Cette version est meilleure et stable (a cause de la mémoire), merci.
J'ai une question complémentaire:
Vois -tu ma version compte (actuellement) env. 1000 mots et pour faire des leçons courtes (30 mn), j'aimerais me servir des thèmes [Leçon], en sélectionnant un thème générique de [Vocabulaire] par leçon.
Pour gérer la position (aléatoire) je pourrais substituer,
MaxVoc = VocTbl.Cells.Count
par
MAxVoc=WorksheetFunction.Subtotal(103, Range("B4:B" & Rows(Rows.Count).End(xlUp).Row)) - 1
Ce qui me donnerait le nombre de lignes filtrés " Í  étudier"
Mais je ne vois pas comment appliquer ce nombre Í  la sélection visible de la plage filtrée..
Je brode autour de ceci afin de déterminer un "VocPosition" des lignes visibles uniquement:
Dim Plage As Range
Set Plage = Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlVisible)
Mais je ne trouve pas de solutions, et me demande si c'est possible...
Aurait-tu une idée ou une solution?
Encore merci pour ton aide et ton support,
Très bonne journée,
Emile
Avatar
Emile63
Le Tuesday, April 6, 2021 Í  9:28:28 AM UTC+2, Emile63 a écrit :
Le Monday, April 5, 2021 Í  11:07:57 PM UTC+2, MichD a écrit :
C'est la version Í  retenir. https://www.cjoint.com/c/KDfvgIx6BAj
Tout fonctionne bien... mais je n'ai pas testé les 100 expressions.
MichD
Bonjour MichD,
Merci pour ton implication et pour ton aide. Cette version est meilleure et stable (a cause de la mémoire), merci.
J'ai une question complémentaire:
Vois -tu ma version compte (actuellement) env. 1000 mots et pour faire des leçons courtes (30 mn), j'aimerais me servir des thèmes [Leçon], en sélectionnant un thème générique de [Vocabulaire] par leçon.
Pour gérer la position (aléatoire) je pourrais substituer,
MaxVoc = VocTbl.Cells.Count
par
MAxVoc=WorksheetFunction.Subtotal(103, Range("B4:B" & Rows(Rows.Count).End(xlUp).Row)) - 1
Ce qui me donnerait le nombre de lignes filtrés " Í  étudier"
Mais je ne vois pas comment appliquer ce nombre Í  la sélection visible de la plage filtrée..
Je brode autour de ceci afin de déterminer un "VocPosition" des lignes visibles uniquement:
Dim Plage As Range
Set Plage = Range("A1:A" & Range("A65536").End(xlUp).Row).SpecialCells(xlVisible)
Mais je ne trouve pas de solutions, et me demande si c'est possible...
Aurait-tu une idée ou une solution?
Encore merci pour ton aide et ton support,
Très bonne journée,
Emile

Rebonjour MicheD,
Revenant sur mon message précédent, j'ai trouvé 2-3 choses par-ci par-lÍ , que voici, mais je n'arrive toujours pas Í  sélectionner la ligne visible qui est proposée dans "VocAléa" ... :-(
'---------------------------------------------------------------------------------
Sub ChercheLigne()
Dim rg As Range
Dim PasTrouve As Boolean
Set ws = Feuil3
PasTrouve = True
Application.EnableEvents = False
VocTotal = ws.Range("TableauMots").Rows.Count
VocFilter = WorksheetFunction.Subtotal(103, ws.Range("B4:B" & Rows(Rows.Count).End(xlUp).Row)) - 1
Do While PasTrouve
Randomize
VocAléa = Int((VocFilter * Rnd) + 1) 'choisi aléatoirement
PasTrouve = False
Loop
If VocTotal <> VocFilter Then
Set rg = ws.Rows("5:" & Application.Rows.Count)
Set rg = rg.SpecialCells(xlCellTypeVisible)
Set rg = rg.Cells(VocAléa) ' Ici, j'essaie de relever le n° de ligne correspondant, sans succès
VocPos = rg.Row
MsgBox "la " & VocAléa & " cellule visible se trouve Í  la ligne : " & VocPos
Else: VocPos = VocTotal
End If
Application.EnableEvents = False
End Sub
Quelle est mon erreur ??
Merci d'avance pour ton aide et (éventuelle) solution.
Très bonne fin de journée,
Emile
Avatar
MichD
Ton fichier : https://www.cjoint.com/c/KDgxTRu3vHj
MichD
Avatar
MichD
Le 06/04/21 Í  19:46, MichD a écrit :
Ton fichier : https://www.cjoint.com/c/KDgxTRu3vHj
MichD

Un dernier détail : https://www.cjoint.com/c/KDhaRPo8nRj
MichD
Avatar
MichD
Le 06/04/21 Í  20:44, MichD a écrit :
Le 06/04/21 Í  19:46, MichD a écrit :
Ton fichier : https://www.cjoint.com/c/KDgxTRu3vHj
MichD

Un dernier détail : https://www.cjoint.com/c/KDhaRPo8nRj
MichD

Formatage uniforme du "tableau" : ttps://www.cjoint.com/c/KDhliYSUc2j
MichD
Avatar
MichD
Le 07/04/21 Í  07:10, MichD a écrit :
Le 06/04/21 Í  20:44, MichD a écrit :
Le 06/04/21 Í  19:46, MichD a écrit :
Ton fichier : https://www.cjoint.com/c/KDgxTRu3vHj
MichD

Un dernier détail : https://www.cjoint.com/c/KDhaRPo8nRj
MichD

Formatage uniforme du "tableau" : ttps://www.cjoint.com/c/KDhliYSUc2j
MichD

Une toute dernière version avec Tableau de bord. Évidemment, tu vas
améliorer cette présentation. Seulement un petit exemple!
https://www.cjoint.com/c/KDhnkVRPmlj
À toi de voir comment ouvrir la fenêtre VBA... ;-))
Seulement pour le plaisir!
MichD
Avatar
Emile63
Le Wednesday, April 7, 2021 Í  3:17:52 PM UTC+2, MichD a écrit :
Le 07/04/21 Í  07:10, MichD a écrit :
Le 06/04/21 Í  20:44, MichD a écrit :
Le 06/04/21 Í  19:46, MichD a écrit :
Ton fichier : https://www.cjoint.com/c/KDgxTRu3vHj
MichD

Un dernier détail : https://www.cjoint.com/c/KDhaRPo8nRj
MichD

Formatage uniforme du "tableau" : ttps://www.cjoint.com/c/KDhliYSUc2j
MichD
Une toute dernière version avec Tableau de bord. Évidemment, tu vas
améliorer cette présentation. Seulement un petit exemple!
https://www.cjoint.com/c/KDhnkVRPmlj
À toi de voir comment ouvrir la fenêtre VBA... ;-))
Seulement pour le plaisir!
MichD

Bonjour MichD
Merci pour toutes ces bonnes idées ;-)
Tu va trop vite pour moi, je n'ai pas le temps d'adapter ces super idées dans mon fichier original....
Intégrer le choix de la leçon dans l'userform :)))))
Et le tableau de bord également...
Par ailleurs j'ai constaté que quand j'ajoute un mot dans l'userform (vers. précédente), la bdd originale s'efface et il ne reste que la leçon en cours ..
Je te tiens au courant dès que j'aurai digéré tout ça. ;-)
Merci encore et très bonne journée!
Emile
Avatar
MichD
Tu va trop vite pour moi, je n'ai pas le temps d'adapter ces super idées dans mon fichier original....
Intégrer le choix de la leçon dans l'userform :)))))
Et le tableau de bord également...

**** Comme j'ai terminé, tu as tout le temps voulu, il ne devrait pas y
avoir une nouvelle version!
Par ailleurs j'ai constaté que quand j'ajoute un mot dans l'userform (vers. précédente), la bdd originale s'efface et il ne reste que la leçon en cours ..

***** Tu as utilisé une version trop ancienne! Cela fut corrigé depuis lors.
MichD
1 2 3