XL 2019 Fonction aléatoire sans doublons pour quizz

Cesar1275

XLDnaute Occasionnel
Bonjour à tous,

Je suis en train de faire un tableur pour un quizz.
Un cellule est dédiée au choix aléatoire d'un numéro de question (de 1 à 41)

Je souhaiterai une fonction qui donne un numéro aléatoire mais qui n'affiche pas 2 fois le même numéro (on ne peut pas poser la même question 2 fois).

J'ai essayé avec la fonction ALEA mais celle-ci donne des numéros qui sont déjà sortis avant d'être passé par tous les numéros de questions.

N'hésitez pas si vous avez des questions.

Merci d'avance
 

Cesar1275

XLDnaute Occasionnel
Bonsoir,
heu ... après ... une simple recherche sur le forum de "aléatoire sans doublon" retourne un sacré nombre résultat ... il n'y aurait pas ton bonheur dans tout cela ?
Bonjour, j'ai déja cherché dans ce forum mais rien ne correspond exactement à ce que je veux.

Etant donné que je suis débutant en excel, c'est difficile pour moi d'adapter des solutions pour qu'elles correspondent à mon besoin.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour César1275, le fil,

je te propose le fichier Excel joint en fin de post. :)

regarde "Feuil1", puis fais Ctrl t : ça affiche un nombre aléatoire en B1, entre 1 et 41 ; recommence plusieurs fois ; tu peux vérifier que c'est bien un tirage sans remise ; même que si tu continues de faire Ctrl t, tu vas aboutir, inévitablement, à ce message d'erreur :

Image 1.jpg


eh oui, hein ? à force de puiser des boules de loto dans le sac sans les y remettre, ben à la longue, le sac finit tôt ou tard par s'épuiser ! c'est là qu'on entend la voix de Coluche qui dit : « circulez, y'a rien à voir ! » 😜

bon, alors qu'est-ce qu'on fait maint'nant qu'tu as vidé ton sac ? c'est fini ? tu vas en taule ou on continue à jouer ? tu préfères continuer à jouer, hein ? à vrai dire, j'm'en doutais bien un peu ! 😄

bon, alors soit : fais Ctrl i ; puis lis le message de la boîte de dialogue ; ah oui, hein ? ça change la donne ! clique sur le bouton OK pour fermer la boîte de dialogue (tu peux aussi appuyer sur la touche Entrée ou sur la touche Echap : même réaction : ça ferme la boîte de dialogue ; c'est vrai qu'elle ne sert pas à grand chose vu qu't'es pas très loquace ! y'a qu'moi qui cause, ici !) ; bon, ben maint'nant qu't'es d'retour sur la feuille de calcul, tu peux de nouveau t'amuser à faire Ctrl t : comme ils disent au casino : « faites vos jeux ! » 😛 (j'me dégage de toute responsabilité si tu perds ta chemise au Loto ; idem si tu finis ruiné, sur la paille, sans un sou vaillant en poche !)



code VBA de ThisWorkbook (3 lignes) :

VB:
Private Sub Workbook_Open()
  T(1) = 255: TblInit
End Sub

code VBA de Module1 (22 lignes) :

VB:
Option Explicit: Option Base 1

Public T(41) As Byte

Sub TblInit()
  Dim i As Byte: Randomize: [B1].ClearContents
  If T(1) < 255 Then MsgBox "Initialisation effectuée"
  For i = 1 To 41: T(i) = i: Next i
End Sub

Sub Tirage()
  Dim n As Byte, i As Byte
  Do
    For i = 1 To 41
      If T(i) > 0 Then n = 1: Exit For
    Next i
    If n = 0 Then MsgBox "Tous les numéros ont été tirés.", 64, "Terminé !": Exit Sub
    n = Int(41 * Rnd + 1): If T(n) > 0 Then T(n) = 0: Exit Do
  Loop
  [B1] = n
End Sub

soan
 

Pièces jointes

  • Exo Cesar1275.xlsm
    17.6 KB · Affichages: 12
Dernière édition:

Cesar1275

XLDnaute Occasionnel
Bonjour César1275, le fil,

je te propose le fichier Excel joint en fin de post. :)

regarde "Feuil1", puis fais Ctrl t : ça affiche un nombre aléatoire en B1, entre 1 et 41 ; recommence plusieurs fois ; tu peux vérifier que c'est bien un tirage sans remise ; même que si tu continues de faire Ctrl t, tu vas aboutir, inévitablement, à ce message d'erreur :

Regarde la pièce jointe 1141427

eh oui, hein ? à force de puiser des boules de loto dans le sac sans les y remettre, ben à la longue, le sac finit tôt ou tard par s'épuiser ! c'est là qu'on entend la voix de Coluche qui dit : « circulez, y'a rien à voir ! » 😜

bon, alors qu'est-ce qu'on fait maint'nant qu'tu as vidé ton sac ? c'est fini ? tu vas en taule ou on continue à jouer ? tu préfères continuer à jouer, hein ? à vrai dire, j'm'en doutais bien un peu ! 😄

bon, alors soit : fais Ctrl i ; puis lis le message de la boîte de dialogue ; ah oui, hein ? ça change la donne ! clique sur le bouton OK pour fermer la boîte de dialogue (tu peux aussi appuyer sur la touche Entrée ou sur la touche Echap : même réaction : ça ferme la boîte de dialogue ; c'est vrai qu'elle ne sert pas à grand chose vu qu't'es pas très loquace ! y'a qu'moi qui cause, ici !) ; bon, ben maint'nant qu't'es d'retour sur la feuille de calcul, tu peux de nouveau t'amuser à faire Ctrl t : comme ils disent au casino : « faites vos jeux ! » 😛 (j'me dégage de toute responsabilité si tu perds ta chemise au Loto ; idem si tu finis ruiné, sur la paille, sans un sou vaillant en poche !)



code VBA de ThisWorkbook (3 lignes) :

VB:
Private Sub Workbook_Open()
  T(1) = 255: TblInit
End Sub

code VBA de Module1 (22 lignes) :

VB:
Option Explicit: Option Base 1

Public T(41) As Byte

Sub TblInit()
  Dim i As Byte: Randomize: [B1].ClearContents
  If T(1) < 255 Then MsgBox "Initialisation effectuée"
  For i = 1 To 41: T(i) = i: Next i
End Sub

Sub Tirage()
  Dim n As Byte, i As Byte
  Do
    For i = 1 To 41
      If T(i) > 0 Then n = 1: Exit For
    Next i
    If n = 0 Then MsgBox "Tous les numéros ont été tirés.", 64, "Terminé !": Exit Sub
    n = Int(41 * Rnd + 1): If T(n) > 0 Then T(n) = 0: Exit Do
  Loop
  [B1] = n
End Sub

soan
Ouahhhh merci beaucoup pour cette réponse plus que complète !!! Ton fichier fonctionne super bien !
 

Discussions similaires

Statistiques des forums

Discussions
311 078
Messages
2 076 846
Membres
241 953
dernier inscrit
dave15