Nombre "semi-aleatoire" ?
bonjour,
je cherche a creer un outil de revision (verbes irreguliers en anglais) avec une boite de dialogue demandant a l'utilisateur les bonnes reponse par rapport a un verbe en francais (la liste sera sur une feuille cachee...)
j'aimerai le faire de maniere aleatoire et pour ca j'ai trouve ceci qui fonctionne :
Dim NB As Integer
NB = Int((999 - 1 + 1) * Rnd + 1)mais ce que je voudrai c'est qu'un chiffre n'apparaisse qu'une seule fois (semi aleatoire quoi) tout le temps que le tour complet n'a pas ete fait... la je seche...
quelqu'un a surement une idee super simple, car cela m'etonnerai qu'il y ai besoin de stocker chaque ancien chiffre dans une variabvle differente pour comparer
merci d'avance, greg
PS desole pour les accent je suis a l'etranger
bonjour
une idée de départ :
un tableau avec les verbes en colonne,
une colonne de nombres =ALEA(). Cette colonne contient donc des nombres à virgules tous différents (vu la quantité de chiffres et le peu de verbes irréguliers
à ce stade il faut figer les ALEA() ainsi : copier tout, collage VALEURS
il te suffit de trier le tableau selon les chiffres, tu obtiens un classement aléatoire
pour le test des élèves, tu affiches les verbes en partant du haut
Salut Gratteux
Tu peux essayer en utilisant une collection, comme ceci
Dim NB As Integer, Liste As New Collection
On Error Resume Next
Do
' Tirer un nombre au sort
NB = Int((999 - 1 + 1) * Rnd + 1)
' L'ajouter dans la collection
Liste.Add NB, "" & NB
' En cas d'erreur = existe déjà, alors on recommence
Loop While Err.Number > 0
On Error GoTo 0Ensuite tout dépend comment est utiliser cette routine
A+
bonjour merci beaucoup pour vos reponses,
je viens d'essayer ce code, en utilisant la variable NB pour ecrire dans une MsgBox le contenu d'un tableau..
exemple si NB = 4, afficher le contenu de la cellule F a ligne 4...
mais ce code continue a faire des chiffres aleatoire sans exclure le 4 deja fait au passage precedant...
exemple de ce que je cherche sur un tableau de 6 lignes :
3 4 1 2 6 5 (puis stop et calcul d'une note, mais chaque chose en son temps..)
ce que me donne ce code :
2 4 1 1 6 3 5 5 4 2 1 3 6 etc....
sinon pourquoi pqs avec ALEA() mais j'aimerai autant que faire se peut du VBA par plaisir... quoi il devrait etre possible de faire ca aussi en VBA...
Bonjour,
Si j'ai bien compris..mettre dans un module général (Module1 par exemple)
Option Explicit
Dim Question() As Boolean
Dim NbQ As Long
'A initialiser avec le OPEN ou nouveau "client"
'0ù pour les tests mettre le cursuer dans la sub et tapre F5
Sub InitialiseTB()
NbQ = Sheets("FeuilleCachée").Cells(Rows.Count, 1).End(xlUp).Row
ReDim Question(N)
End Sub
Sub TirerQuestion()
Dim A As Long, Q As Integer
Randomize Timer 'Pour changer le "tableau aléatoire"
Do While Question(Q)
Q = Int(NbQ * Rnd) + 1
DoEvents 'si toute les question ont étés posées permet d'arèter.
Loop
Question(Q) = True
MsgBox Sheets("FeuilleCachée").Cells(Q, 1)
End Subdans le module ThisWorkBook
Private Sub Workbook_Open()
InitialiseTB
End SubUn bouton avec Question suivante qui pointe sur TirerQuestion
Chaque question ne pourra être posée qu'un seule fois.
A+