Bonjour sandy.qt,
j'avais vu ton sujet précédent "calcul automatique", mais à ce moment-là,
je n'avais pas trouvé comment faire ; maintenant, j'ai trouvé une solution.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
je te propose ce fichier Excel : https://www.cjoint.com/c/MAEbadRWJp0
* il y a 10 nombres sur fond jaune clair ; tu pourras les modifier si besoin.
* clic / bouton "Combi4" ➯ 10 tirages de 4 nombres (sur fond vert clair)
* clic / bouton "Combi5" ➯ 10 tirages de 5 nombres (sur fond bleu clair)
* pour un tirage donné (de 4 ou 5 nombres), tous les nombres sont différents,
et c'est bien des nombres de la liste sur fond jaune clair.
* les 10 tirages sur fond vert clair sont forcément différents : il ne peut pas
y avoir 2 tirages identiques ; pour les 10 tirages sur fond bleu clair : idem.
* pour voir d'autres tirages, clique de nouveau sur l'un des 2 boutons.
* la feuille est protégée, mais c'est une protection simple sans mot de passe ;
il n'y a aucune formule, tout est fait par VBA ➯ inutile d'enlever la protection ;
cette protection est utile pour que l'utilisateur puisse modifier uniquement les
10 nombres sur fond jaune clair et rien d'autre.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
attention : quand tu saisis les 10 nombres de la liste sur fond jaune clair,
tous ces nombres sont censés être différents (il n'y a pas de contrôle) ;
si par exemple tu saisis 10 nombres identiques, ça bloquera la macro car
elle ne pourra pas trouver un tirage de 4 ou 5 nombres différents, encore
moins 10 tirages différents ➯ ça entre dans une boucle sans fin ! :(
si tu veux ajouter un contrôle pour éviter ce problème, je te laisse le faire. ;)
ce n'est pas difficile, mais là, j'ai préféré faire comme si l'utilisateur ne va
pas faire n'importe quoi ! ;)
si ça entrait dans une boucle sans fin : faire Ctrl Pause pour arrêter le code VBA
(c'est l'équivalent de Ctrl Break) ➯ message "Exécution interrompue" ; cliquer
sur le bouton "Fin" ; remplacer les nombres identiques par d'autres nombres ;
faire de nouveaux tirages en cliquant sur l'un des deux boutons.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
code VBA de Module1 :
Option Explicit
Private Sub Tirages(n As Byte)
Dim T0(9, 1) As Byte, T1(10, 4) As Byte, s$, c As Byte, v As Byte
Dim t As Byte, k As Byte, r As Byte, i As Byte, j As Byte
For i = 0 To 9: T0(i, 0) = Cells(i + 3, 3): Next i
c = 5 - 2 * (n = 5): n = n - 1: Randomize
Application.ScreenUpdating = 0: ActiveSheet.Unprotect
Do
1 For i = 0 To 9: T0(i, 1) = 0: Next i
For i = 0 To n
Do: r = Int(10 * Rnd): Loop Until T0(r, 1) = 0
T1(0, i) = T0(r, 0): T0(r, 1) = 1
Next i
For r = 1 To k
t = 0
For i = 0 To n
v = T1(0, i)
For j = 0 To n
If T1(r, j) = v Then t = t + 1: Exit For
Next j
Next i
If t = n + 1 Then GoTo 1
Next r
k = k + 1: s = ""
For i = 0 To n
T1(k, i) = T1(0, i): s = s & T1(0, i) & " "
Next i
Cells(k + 2, c) = Left$(s, Len(s) - 2)
Loop Until k = 10
ActiveSheet.Protect
End Sub
Sub Combi4()
Tirages 4
End Sub
Sub Combi5()
Tirages 5
End Sub
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. :)
rhodo