VBA - liste aléatoire cellule

Bonjour,

Je ne suis pas assez à l'aise avec VBA pour me débrouiller seul, pourriez vous me donner un coup de main ?

Le projet est de pouvoir créer un VBA permettant de m'interroger sur une liste de vocabulaire et ce de manière aléatoire.

Avant même le useform, je bloque à trouver comment à partir d'une cellule il est possible de me renvoyer aléatoirement le contenu texte d'une autre cellule d'une autre feuille.

Par exemple j'ai ma liste de vocabulaire sur ma colonne A, (A4:A28), de ma feuille 1. Je souhaiterai pouvoir en feuille 2 faire apparaître en (B4:B14), dix mots de ma liste.

Auriez vous une piste ?

En vous remerciant d'avance !

Bonne journée

Bonjour,

Tu as une liste de 25 mots et tu veux un tirage aléatoire de 10 mots sur cette liste ?

Sub TirageMots()
    Dim Mots(9, 0) As String, Lmts$, m$, i%, x%
    For i = 1 To 25
        Lmts = Lmts & ChrW(i + 32)
    Next i
    Randomize
    With Worksheets("Feuil1")
        For i = 1 To 10
            x = Int(Len(Lmts) * Rnd + 1)
            m = Mid(Lmts, x, 1)
            Mots(i - 1, 0) = .Cells(AscW(m) - 29, 1)
            Lmts = Replace(Lmts, m, "")
        Next i
    End With
    Worksheets("Feuil2").Range("B4").Resize(10).Value = Mots
End Sub

Cordialement.

Merci MFerrand !

En effet c'est bien un tirage de 10 mots parmi 25, mais ces deux nombres peuvent varier, afin de s'adapter à la longueur du thème de la liste. De ton code je pourrais donc, modifiez en conséquence, c'est parfait !

Peux tu m'expliquer ce qu'est : "Lmts = Lmts & ChrW(i + 32)" et "Lmts$, m$, i%, x%" lorsque tu définis ton Dim ?

Je tente d'adapter tout cela à mes liste et je vous tiens au courant

$ = As String, % = As Integer, c'est ce qu'on appelle des caractères de déclarations de type.

Pour procéder à un tirage sans doublon, on utilise une chaîne de caractères, à partir du caractère 33 (pour éliminer les 31 premiers [caract. de services] et l'espace), d'où le +32. A chaque tirage on ôte le caractère tiré et on rétablit sa valeur numérique pour aller chercher le mot dans la liste [-32+3=-29, car la liste commence ligne 4). Le W dans ChrW et AscW indique qu'on traite un caractère unicode (ce qui évite de se préoccuper du nombre de caractères).

Salut

Ce code fait le même travail sans répéter les mots

Sub Cmd()

Application.ScreenUpdating = False

For t = 4 To 14

1 Sheets("Feuil1").Cells(t, 2) = Int((24) * Rnd + 1)

Sheets("Feuil2").Cells(t, 2) = _

Sheets("Feuil1").Range("A" & Val(Sheets("Feuil1").Cells(t, 2)))

x = Application.WorksheetFunction.CountIf( _

Sheets("Feuil1").Range("B4:B" & t), Sheets("Feuil1").Cells(t, 2))

If x > 1 Or Sheets("Feuil1").Cells(t, 2) < 5 Then GoTo 1

Next

Application.ScreenUpdating = True

End Sub

Merci à tous les deux.

J'ai pu adapter le code pour l'ensemble de mes liste grâce à tes explications MFerrand, et par la même occasion pu prendre connaissance de plusieurs éléments, thanks !

Ton code fonctionne également belkacem64, au top !

J'avance sur mon projet et je re posterai si je bloque à nouveau, votre sympathie et réactivité m'incite déjà à vouloir être pointilleux

Rechercher des sujets similaires à "vba liste aleatoire"