Tirer un n° de question au hasard?

bonsoir à tous.

je suis sur office 365.

j'ai fait un série de questions numérotées de 1 à 150 car je suis en train de créés un QCM .

mais j'aimerai avoir un bouton via une macro pour changer le numéro de question par hasard.

j'ai essayer la fonction alea mais a chaque fois que je clique sur entré le numéro change.

mais j'aimerai pouvoir le changer que sur "ordre".

merci de votre aide

Bonjour,

A tester :

Sub ChangerLaGrille()
    With Range("AireAlea")
         .Formula = "=RANDBETWEEN(1,150)"
         .Calculate
         .Copy
         .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
         Application.CutCopyMode = False
    End With
End Sub

Hello une version un peu plus concise :

Sub ChangerLaGrille()
    Range("AireAlea").Value = Int((150 - 1 + 1) * Rnd + 1)
End Sub

Paul

Ah padon si tu veux remplir plusieurs nombre / une grille entière :

Sub ChangerLaGrille()
    Dim c As Range
    For Each c In Range("AireAlea")
        c.Value = Int((150 - 1 + 1) * Rnd + 1)
    Next c
End Sub

Bonne journée, Paul

Bonjour à tous,

Pour le fun, une autre :

Sub tirage()
   [a1] = Application.RandBetween(1, 150)
End Sub

...

ok merci à tous et si je veux incrémenté mon nombre de question j'ai fait une formule nbval qui me donne le nombre de question active, comment prendre en compte le nombre dans une cellule?

merci d'avance vous etes des chefs

Utilise la valeur de ta cellule contenant NBVAL comme borne haute :

[a1] = Application.RandBetween(1, Range("B1").Value)

(en supposant que B1 contient le résultat de NBVA

L).

merci à tous vraiment top

je vous remercie pour l'aide, mais comme dans chaque projet il y as des imperfections.

je me rend compte que des questions peuvent revenir très rapidement.

comment je peux faire un tirage au sort d'une liste de numéro avec excluant les numéro déjà sortis voir fichier.

merci de votre aide

Bonsoir,

Tu peux filter ceux jamais sortis

=FILTER(B3:B17,ISNA(MATCH(B3:B17,C3:C17,0)))

Puis tirage

=INDEX(D3:D100,RANDBETWEEN(1,ROWS(D3:D100)))

Alternative en VBA que je préfère

Function TirageUnique(plageTous As Range, plageSortis As Range) As Variant
    Dim dispo As Collection, c As Range, excl As Range
    Set dispo = New Collection

    For Each c In plageTous
        If IsNumeric(c.Value) Then
            If WorksheetFunction.CountIf(plageSortis, c.Value) = 0 Then
                dispo.Add c.Value
            End If
        End If
    Next c

    If dispo.Count = 0 Then
        TirageUnique = "Plus de numéros dispo"
    Else
        Randomize
        TirageUnique = dispo(Int((dispo.Count) * Rnd) + 1)
    End If
End Function

Puis dans une cellule fais appelle a la function VBA

=TirageUnique(B3:B17;C3:C17)

Bonsoir,

Une version pour le fun (un vieux truc remis au goût du jour) :

  • cliquer sur le bouton Tirer suivant
  • si on saisit une valeur en C1 alors le tirage est réinitialisé (les numéros tirés sont éliminés)
  • si on quitte le classeur en l'enregistrant, le tirage continuera à la prochaine ouverture avec la liste des numéros déjà tirés au moment de l'enregistrement

Le code est dans le module de la feuille 'Feuil1'.

edit : v1a -> modifications mineures (ajout de constantes)

Re,

Une autre méthode basée sur une colonne masquée (qu'on peut afficher pour voir) qui contient les numéros qu'il reste à tirer.

  • Modifier ou valider à nouveau la cellule du nombre de question réinitialise une nouvelle série de tirages sans remise
  • Cliquer sur le bouton Numéro suivant pour faire le tirage du numéro suivant de la série
  • Le code est dans le module de Feuil1 et il est commenté

Re,

Une autre méthode basée sur une colonne masquée (qu'on peut afficher pour voir) qui contient les numéros qu'il reste à tirer.

  • Modifier ou valider à nouveau la cellule du nombre de question réinitialise une nouvelle série de tirages sans remise
  • Cliquer sur le bouton Numéro suivant pour faire le tirage du numéro suivant de la série
  • Le code est dans le module de Feuil1 et il est commenté

On pourrait ( si ce n'est pas fait - pas ouvert le fichier) garder la liste de ce qui a été tiré aussi :)

Bonsoir @Patrick1957,

On pourrait ( si ce n'est pas fait - pas ouvert le fichier) garder la liste de ce qui a été tiré aussi :)

C'est pas faux. Entre les deux, j'ai choisi.

Mais de toute façon, le demandeur a ouvert une autre discussion ICI.

Solution VBA, avec mise en cache des tirages pour sans remise :

Dim cache As Collection

Sub InitCache()
    Set cache = New Collection
End Sub

Sub Tirage()
    Dim n As Long
    n = Int((10 * Rnd) + 1)
    If Not Existe(n) Then cache.Add n
End Sub

Function Existe(v) As Boolean
    Dim x
    For Each x In cache
        If x = v Then Existe = True: Exit Function
    Next
End Function
Rechercher des sujets similaires à "tirer question hasard"