XL 2016 Générateur de chiffres aléatoires sans doublons

JDL33

XLDnaute Nouveau
Bonjour Jetted !

Bonjour à vous tous !

Je recherche depuis longtemps un générateur de chiffres aléatoires sans doublons pour l’affichage de l’EuroMillions fonctionnant sous Excel Pro 2016 mais avec une condition complémentaire.

  • Que les cinq chiffres s’affichent dans cinq cellules et dans deux cellules pour les deux étoiles (sur une même ligne, horizontalement ou verticalement) aucune importance.
  • Que les cinq chiffres affichés (entre 1 et 50) soient sans doublons.
  • Que les deux chiffres affichés (entre 1 et 12) pour les étoiles soient sans doublons.
  • Que le défilement des chiffres soit visible dans chaque cellule.
  • Ce qui correspond au fonctionnement du logiciel ci-dessous, voir lien.
Générateur de numéros aléatoires de l'EuroMillions (euro-millions.com)

  • Voici la condition complémentaire
  • Affichage dans une cellule d’un minuteur (00 h 00 mn 00 s) qui doit arrêter l’affichage suivant la durée indiquée.
  • Dans une cellule, un bouton de commande pour lancer le générateur de chiffres aléatoires.
  • Que la fonction « Randomize » soit effectuée à chaque lancement du générateur de N° aléatoires.
La fréquence d’affichage des chiffres après un timing personnalisé est pour moi très importante.

Merci beaucoup à vous tous pour votre aide

Cordialement
 
Solution
Bonjour JDL, Dranreb,
Un essai en PJ pour le fun.

Bonjour Sylvanu,

Merci beaucoup pour votre excellent travail, car c’est parfaitement ce que je désire.

Je ne voudrais pas abuser, le minuteur c’est parfait, mais dans la configuration du programme j’ai oublié de préciser si c’est possible :

  • De voir défiler les chiffres dans toutes les cellules jusqu’à l’affichage correspondant à la durée du timing indiqué au minuteur (cellule I1 et J1)
  • Que l’affichage s’effectue chiffre après chiffre en tenant compte du timing indiqué au minuteur.
  • Que si le chiffre qui doit s’afficher est un doublon, lui seulement doit subir un reset avec la durée du timing indiqué au minuteur et surtout pas les autres.
Excusez-moi d’avoir...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous,

Ma p'tite version dont le code est dans le module de code de la feuille "Feuil1".
Les résultats sont dans les cellules A5 à G5.
VB:
Private Sub CommandButton1_Click()
Dim duree, debut, i&, dico As New Dictionary
   Randomize
   duree = Range("j1") * 24# * 60 * 60
   debut = Timer
   Do While (Timer - debut) <= duree
      DoEvents
      dico.RemoveAll
      Do: dico(Int(Rnd() * 50) + 1) = "": Loop Until dico.Count = 5
      Range("a5").Resize(, 5) = dico.Keys
      dico.RemoveAll
      Do: dico(Int(Rnd() * 12) + 1) = "": Loop Until dico.Count = 2
      Range("f5").Resize(, 2) = dico.Keys
      For i = 1 To Int(Range("b1")): DoEvents: Next
   Loop
End Sub

Private Sub CommandButton2_Click()
   End
End Sub
 

Pièces jointes

  • JDL33- tirage- v1.xlsm
    27.5 KB · Affichages: 29
Dernière édition:

JDL33

XLDnaute Nouveau
Bonjour JDL, Dranreb,
Un essai en PJ pour le fun.

Bonjour Sylvanu,

Merci beaucoup pour votre excellent travail, car c’est parfaitement ce que je désire.

Je ne voudrais pas abuser, le minuteur c’est parfait, mais dans la configuration du programme j’ai oublié de préciser si c’est possible :

  • De voir défiler les chiffres dans toutes les cellules jusqu’à l’affichage correspondant à la durée du timing indiqué au minuteur (cellule I1 et J1)
  • Que l’affichage s’effectue chiffre après chiffre en tenant compte du timing indiqué au minuteur.
  • Que si le chiffre qui doit s’afficher est un doublon, lui seulement doit subir un reset avec la durée du timing indiqué au minuteur et surtout pas les autres.
Excusez-moi d’avoir oublié de préciser ces informations qui sont importantes pour un fonctionnement parfait.

Avec tous mes remerciements

Bonne année

Cordialement
 

JDL33

XLDnaute Nouveau
Bonjour et bonne année.
Il y a des bouts de codes intéressants dans ces deux classeurs.
Bonjour Dranreb,
Merci beaucoup pour vos pièces jointes que je vais conserver.
Je suis novice en programmation et Sylvanu m'a réalisé un programme excel complet et j'espère qu'il va pouvoir affiner son programme à ma convenance.
Encore merci pour vos efforts.
Bonne année
Cordialement
 

JDL33

XLDnaute Nouveau
Bonjour à tous,Salut,

Ma p'tite version dont le code est dans le module de code de la feuille "Feuil1".
Les résultats sont dans les cellules A5 à G5.
VB:
Private Sub CommandButton1_Click()
Dim duree, debut, i&, dico As New Dictionary
   Randomize
   duree = Range("j1") * 24# * 60 * 60
   debut = Timer
   Do While (Timer - debut) <= duree
      DoEvents
      dico.RemoveAll
      Do: dico(Int(Rnd() * 50) + 1) = "": Loop Until dico.Count = 5
      Range("a5").Resize(, 5) = dico.Keys
      dico.RemoveAll
      Do: dico(Int(Rnd() * 12) + 1) = "": Loop Until dico.Count = 2
      Range("f5").Resize(, 2) = dico.Keys
      For i = 1 To Int(Range("b1")): DoEvents: Next
   Loop
End Sub

Private Sub CommandButton2_Click()
   End
End Sub
Bonjour mapomme
Re,

La v2 où le tirage final est trié (d'abord les 5 premières valeurs puis les deux dernières).
Merci mapomme !
,
Merci beaucoup pour vos pièces jointes que je vais conserver.
Je suis novice en programmation et Sylvanu m'a réalisé un programme excel complet et j'espère qu'il va pouvoir affiner son programme à ma convenance.
Encore merci pour vos efforts.
Bonne année
Cordialement
 

JDL33

XLDnaute Nouveau
Bonjour à tous,Salut,

Ma p'tite version dont le code est dans le module de code de la feuille "Feuil1".
Les résultats sont dans les cellules A5 à G5.
VB:
Private Sub CommandButton1_Click()
Dim duree, debut, i&, dico As New Dictionary
   Randomize
   duree = Range("j1") * 24# * 60 * 60
   debut = Timer
   Do While (Timer - debut) <= duree
      DoEvents
      dico.RemoveAll
      Do: dico(Int(Rnd() * 50) + 1) = "": Loop Until dico.Count = 5
      Range("a5").Resize(, 5) = dico.Keys
      dico.RemoveAll
      Do: dico(Int(Rnd() * 12) + 1) = "": Loop Until dico.Count = 2
      Range("f5").Resize(, 2) = dico.Keys
      For i = 1 To Int(Range("b1")): DoEvents: Next
   Loop
End Sub

Private Sub CommandButton2_Click()
   End
End Sub
Merci mapomme !
 

maart

XLDnaute Junior
Bonjour, le code de Sylvanu est bien écrit et respecte le timing, mais à quoi peut donc servir ce timing?
C'est de la curiosité certes, même si je sais que l'on combat le hasard par le hasard.
Pourquoi ne pas vous tourner vers des books Python (sous tensorflow)? Ce serait cohérent par rapport à un apprentissage séquentiel ou utiliser des greffons Excel de calcul de prévision (Xstat)?
C'est juste une idée.
Bonne soirée
Maart.
 

JDL33

XLDnaute Nouveau
Re le fil,
Un nouvel essai. [Edit : V3 ]
C’est presque parfait, il reste l’affichage qu’il faudrait modifier si possible.

Je pense que je m’explique très mal sur ce que je désire, je laisse un lien ci-dessous pour voir par étape comment doit se réaliser l’affichage.


Lancer la vidéo et la faire défiler avec le curseur pour vous positionner au compteur à (0 : 50 / 3 : 01) soit 50 secondes de visionnage.

N°1 : Comme vous voyez les boules tournent dans la sphère

N°2 : Les chiffres aléatoires doivent défiler dans les 7 cellules de votre programme.

N°3 : En admettant que le minuteur de votre programme (I1 et J1) est réglé à 5000 ms, dès que le minuteur sera à « 0 » le premier chiffre aléatoire doit apparaître dans la cellule « D5 » de votre programme et dans les autres cellules les chiffres doivent défiler.

Voir la vidéo à partir de : 59 secondes de visionnage

N°4 : Quand le minuteur va de nouveau être à « 0 » le deuxième chiffre aléatoire doit apparaître dans la cellule « E5 » de votre programme et dans les autres cellules les chiffres doivent défiler.

Voir la vidéo à partir de : 1 mn : 07 secondes de visionnage

N°5 : Si le deuxième chiffre est un doublon, seul celui-ci doit subir un reset de « 5000 ms » et idem pour tous les autres chiffres.

N°6 : Même procédure pour tous les autres chiffres.

La première vidéo que j’ai laissé c’est pour démontrer le défilement des chiffres aléatoires.

Excusez-moi d’avoir mal présenté ce que je désire.

Encore merci
 

JDL33

XLDnaute Nouveau
Bonjour, le code de Sylvanu est bien écrit et respecte le timing, mais à quoi peut donc servir ce timing?
C'est de la curiosité certes, même si je sais que l'on combat le hasard par le hasard.
Pourquoi ne pas vous tourner vers des books Python (sous tensorflow)? Ce serait cohérent par rapport à un apprentissage séquentiel ou utiliser des greffons Excel de calcul de prévision (Xstat)?
C'est juste une idée.
Bonne soirée
Maart.
Bonsoir maart,

Pour répondre à votre question, comme je suis joueur et surtout à l’EuroMillions je recherche depuis longtemps un programme sous Excel pour améliorer ma façon de faire mes recherches de grilles.

Jusqu’à ce jour je n’ai jamais eu de résultat pour avoir un programme fiable avec :

  • Générateur de chiffres aléatoires sans doublons fonctionnant avec Excel. (Sûrement que je ne suis pas chanceux, car je n’ai rien trouvé sur internet de fiable)
  • Un minuteur pour régler la fréquence d’affichage, et comme vous me posez la question, vous devez savoir que tous les PC sont différents sur la puissance de calcul. C’est pour cette raison que le minuteur va compenser ce problème. Ensuite contrairement à ce que vous pouvez constater sur internet, toutes les boules ne sortent pas en même temps. Une temporisation entre chaque boule se réalise au tirage, le minuteur permet de synchroniser l’affichage de chaque chiffre aléatoire.
Générateur de numéros aléatoires de l'EuroMillions (euro-millions.com)

Je suis nul en programmation et à mon niveau, je remercie beaucoup Sylvanu ainsi que vous tous pour votre aide si précieuse.

Merci

Bonne année

Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Ah! la martingale! Y'en a des gens qui l'ont cherchée. Aucun ne l'a encore trouvée! 🙃

je sais que l'on combat le hasard par le hasard.
Ça c'est un scoop pour moi ! o_O Mais pourquoi pas?

En plus, je ne vois pas en quoi un minuteur changerait quoi que ce soit au niveau tirage.
On tire 5 puis 2 boules au hasard. Qu'on fasse 1 ou 500 tirages, comme on n'en retient qu'un, la probabilité de sortie d'une combinaison sera toujours la même que ce soit le premier tirage ou le 500ième.
 

patricktoulon

XLDnaute Barbatruc
Bonsoir a tous
le model de @sylvanu est pas mal mais il y a des moment ou les cellules sont vide pendant le moulin c'est pas esthétique et ça pique les yeux
je vous propose de faire sans dico sans doublon et l'effet est un peu celui des machines a sous
c'est a dire que au fur est a mesure de la case 1 à 7 les chiffres s’arrête de tourner (sans blanc bien sur )et il n'y a pas de doublons et on peut régler le time lapsed avec la variable Tlaps
démonstration
demo.gif


le code somme toute est assez simple
on boucle de 1 a 7
dans cette boucle on sous boucle (do/loop) avec timelapsed et onmet n'importe quel nombre dans toute les cellules sauf la colonne cde la boucle 1 à 7
quand cest fait on fait un countif pour controler les doublons
si c'est le cas on remet le timer au temps actuel + Tlaps
sinon on sort du do/loop et on passe au suivant de boucle c de 1 à 7
ET!! pour en rajouter une couche je joue avec le vertcalalignment pour que l'effet fasse plus rouleau

rigolo non ?😁😂😇
dans le module de la feuille 1 avec un bouton
VB:
Private Sub CommandButton1_Click()
    Dim T#, F, C&, Tlaps#, a&, VaL
    Randomize
    Set F = ActiveSheet
    Tlaps = 0.7
    VaL = Array(xlBottom, xlCenter, xlTop)

    For C = 1 To 7
        T = Timer + Tlaps
        a = -1
        Do
            'DoEvents
            a = a + 1: If a = 3 Then a = 0
            F.Cells(2, C).Resize(, 7 - (C - 1)) = Round(1 + (Rnd * 49))
            F.Cells(2, C).Resize(, 7 - (C - 1)).VerticalAlignment = VaL(a)
            F.Cells(2, C) = Round(1 + (Rnd * 49))
            If Timer > T Then
                If C = 1 And Timer + Tlaps > T Then F.Cells(2, C).VerticalAlignment = xlCenter: Exit Do
                If C > 1 Then
                    If WorksheetFunction.CountIf(F.Range(F.Cells(2, 1), F.Cells(2, C)), F.Cells(2, C)) > 1 Then
                        T = Timer + Tlaps
                    Else
                        F.Cells(2, C).VerticalAlignment = xlCenter: Exit Do
                    End If
                End If
            End If
        Loop
    Next
End Sub
 

Discussions similaires

Réponses
12
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette