Tirage aleatoire sans doublon avec plusieurs boutons

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Mr Guizz

XLDnaute Junior
Salut a tous ,
j'ai creer un tableur excel avec 8 boutons qui, grace a des macros, affiche un chiffre entre 1 et 8 quand on appuie sur les differents boutons. Le probleme est que j'aimerai que les 8 chiffres soient tous differents!

Que dois je rajouter dans mon code pour que lorsque j'appuie sur les 8 differents boutons cela me sorte 8 differents! ( je veux garder les 8 boutons et pas en avoir qu'un seul !!)

Voici le code que je repetez 8 fois pour chaque boutons

Private Sub CommandButton1_Click()
'Initialiser le générateur de nombres aléatoires
'=> Randomize : à ajouter avant d'utiliser Rnd pour obtenir des valeurs complètement aléatoires
Randomize

'Nombre aléatoire entier entre 1 et 8 :
nombre_aleatoire = Int(8 * Rnd) + 1
Range("f6").Value = nombre_aleatoire
End Sub

Merci !!
 

Pièces jointes

Re salut Dranreb
En partant sur le meme principe mais avec UN SEUL BOUTON , est t'il possible d'avoir un bouton qui, lorsque l'on appuie dessus genere un chiffre en f6 (toujours de 1 a 8), puis lorsque l'on appuie dessus genere un chiffre en f7 (toujours de 1 a 8) et differement du precedent, puis lorsque l'on appuie dessus genere un chiffre en f8 (toujours de 1 a 8) et differement des precedent, puis etc .....

Merci
 
Oui, c'est possible.
Mais vous me feriez plaisir d'essayer de l'écrire vous même.
Parce que ça dépend si le classeur est fermé par exemple après avoir choisi 5 numéro, les suivants l'étant un autre jour, auquel cas c'est plus compliqué que si tout est toujours fait au cours d'une même période de quelques minutes. Dans ce dernier cas il suffit de définir un ListeAléat global, l'initialiser quand on veut le 1er numéro, puis d'épuiser simplement cet objet au fur et à mesure.
Sinon on peut par exemple encore mettre tout en une fois dans les cellules mais avec un format de nombre ";;;" puis découvrir à chaque clic sur le bouton en y mettant un autre le 1er qui porte ce format.
Mais on peut aussi écrire tout simplement un truc très voisin de ce que je vous ai déjà écrit.
Peut être même très légèrement plus simple. (Edit: après essai, non, pas plus simple mais extrêmement ressemblant !)
Il y a des commentaires guides d'utilisation dans le module de classe ListeAléat.
 
Dernière édition:
Bonsour®
@ Dranreb.... je vais essayer d'ecrire ca ...
Pour plus d'explication, le tirage des 8 chiffres ce fait le meme jour ( dans les meme 10 secondes d'ailleurs !)

Merci quand meme pour votre taf !
Un peu tard 🙁,
🙄 Alors pour le fun :
upload_2016-9-8_1-12-13.png
 

Pièces jointes

Bonjour
Êtes vous quand même arrivé à retoucher ma version pour qu'elle fonctionne avec un seul bouton ?
Solution la plus proche de la 1ère :
VB:
Private Sub CommandButton9_Click()
Dim Plg As Range, T(), L As Long, Numéros As New ListeAléat
Set Plg = Me.[F6:F13]
T = Plg.Value
Randomize
Numéros.Init UBound(T, 1)
For L = 1 To UBound(T, 1)
  If T(L, 1) < 1 Or T(L, 1) > UBound(T, 1) Then Exit For
  Numéros.Supprimer T(L, 1): Next L
If Numéros.Count > 0 Then
  Plg.Rows(L).Value = Numéros.Aléat
Else
  MsgBox "Il ne subsiste plus d'autre numéro disponible.", _
  vbCritical, "Générer": End If
End Sub
Mais on peut en écrire une qui ne fait qu'un seul ListeAléat.Init lors de la sortie du 1er numéro et en ressort ensuite simplement les positions P suivantes ListeAléat.Aléat(P). Il faut alors qu'il soit global, bien sûr. P aussi d'ailleurs.
VB:
Option Explicit
Private P As Long, Numéros As ListeAléat
Private Sub CommandButton10_Click()
P = P Mod 8 + 1
If P = 1 Then
  Set Numéros = New ListeAléat
  Randomize
  Numéros.Init 8
  [F6:F13].Value = Empty
  End If
Cells(5 + P, "F").Value = Numéros.Aléat(P)
End Sub
Là ça devient si simple qu'on peut aussi se passer du module de classe ListeAléat et utiliser un petit tableau à la place qu'on initialise de la même façon que dans la méthode Init de l'objet ListeAléat (sans RectifierPositions puisqu'on n'a jamais besoin de connaitre la position d'un numéro).
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour