Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Calculer les fréquences au moment des tirages
Dans le volet précédent, pour notre
application destinée Ã
analyser les numéros du loto , nous avons dressé des
statistiques . Elles livrent les
fréquences de sorties des numéros en tenant compte de tout l'
historique des tirages . Pour tenter de dresser une certaine "logique comportementale", nous proposons ici de
calculer la fréquence qu'avait chaque numéro au moment où il a été appelé par un tirage. Et pour que la période soit suffisamment représentative, nous suggérons d'étudier les
48 derniers tirages . Comme trois tirages sont réalisés chaque semaine, nous allons agir sur pratiquement les quatre derniers mois. Et nous le verrons, il existe a priori une certaine logique. Et ce ne sont pas les numéros en déficit de fréquences qui sont forcément appelés, bien au contraire.
Classeur Excel à télécharger
Pour poursuivre le développement, nous devons commencer par récupérer les travaux au dernier indice.
Comme lors du volet précédent, le classeur Excel est accompagné d'un fichier texte et d'un sous dossier. Le fichier texte héberge le
code VBA à réintégrer au projet. Le sous dossier doit accueillir le
fichier téléchargé de l'
historique des tirages .
Double cliquer sur le fichier du classeur pour l'exécuter dans Excel ,
Puis, cliquer sur le bouton Activer la modification du bandeau de sécurité,
Nous débouchons sur la première feuille de ce classeur. Elle est nommée
tirages . C'est elle qui restitue tous les numéros des tirages passés, après un clic de l'utilisateur sur le
bouton Actualiser . Dès lors, un clic sur le
bouton Stats dresse les
statistiques sur les fréquences de sorties dans la deuxième feuille nommée
fréquence .
Désormais et dans l'enchaînement de ce traitement, nous souhaitons livrer une autre analyse. Deux tableaux sont prévus à cet effet dans la
feuille stats_sortie .
C'est le premier tableau qui nous intéresse ici dans un premier temps, entre les colonnes C et H. Pour chacun des derniers tirages, nous devons inscrire les boules et le numéro chance sortis, dans une première ligne. Les
fréquences respectives qu'ils détenaient au moment où ils ont été appelés doivent être calculées dans chaque ligne du dessous.
Réintégrer le code VBA
Nous l'avons expliqué dans un précédent volet, les antivirus sont sensibles au
code VBA que nous avons développé. Ils se trompent pourtant. Mais c'est la raison pour laquelle, nous devons néanmoins le réintégrer dans le projet.
A la racine du dossier de décompression, double cliquer sur le fichier texte pour l'ouvrir,
Sélectionner tout son contenu (CTRL + A),
Puis le copier (CTRL + C),
Dès lors, revenir sur le classeur Excel (ALT + Tab),
Basculer ensuite dans l'éditeur VBA Excel (ALT + F11),
Dans l'explorateur sur la gauche, double cliquer sur l'élément Feuil1 (tirages),
Nous affichons ainsi la feuille de code associée à la première feuille du classeur. Elle apparaît au centre de l'écran et elle est fort naturellement vierge.
Dans cette feuille de code, coller (CTRL + V) les lignes précédemment prélevées,
En haut de l'éditeur, cliquer sur le menu Outils ,
Dans les propositions, choisir la rubrique Références ,
Dans la boîte de dialogue, cocher la case Microsoft Shell Controls And Automation ,
Puis, valider cette intégration par le bouton Ok,
Dès lors, enregistrer le projet (CTRL + S),
Nous l'avons dit dans les développements précédents, cette librairie est essentielle pour notamment exécuter des fonctions qui réalisent des actions empruntées aux commandes du DOS.
La procédure et ses variables
Pour un code parfaitement structuré et articulé, nous proposons de réaliser ce développement dans une nouvelle procédure. Bien sûr, elle devra être appelée par la
procédure stats_Click .
Après cette procédure stats_Click, créer la procédure freq_sortie comme suit :
Private Sub freq_sortie()
Dim boule As Byte: Dim bouleC As Byte: Dim freq As Integer: Dim freqC As Integer
Dim lig1 As Byte: Dim col1 As Byte
Dim ligD As Integer: Dim col2 As Byte
Dim tabB As Variant: Dim tabC As Variant
Dim compteur As Byte: Dim ligR As Byte: Dim colR As Byte
Dim ligC As Integer: Dim ligCR As Byte
ReDim tabB(1 To 240, 1 To 3)
ReDim tabC(1 To 240, 1 To 3)
compteur = 1: ligR = 4: ligCR = 4: colR = 3
End Sub
Nous déclarons donc une tripotée de variables. Pour les analyses à engager, les traitements sont en effet relativement conséquents. Nous déclarons des
variables de boucle ainsi que des variables pour stocker et cumuler les
fréquences ou encore pour mémoriser les
boules et les
numéros chance . Nous exploitons la
fonction Redim pour dimensionner les deux
tableaux de variables qui doivent mémoriser l'indice, le numéro de boule et sa fréquence. C'est la raison pour laquelle nous les dimensionnons sur trois colonne (1 to 3) mais aussi sur 240 lignes. En effet 48 tirages multipliés par 5 boules correspondent bien à une analyse de 240 sorties. Comme le tableau des numéros chance sera engagé sur la même boucle que celui des boules, nous le dimensionnons de la même façon, quitte à ne pas le remplir complètement. Puis, nous calons les indices de ligne et de colonne sur les premières données du tableau de la feuille tirages.
Fréquences des numéros chance
Maintenant que les tableaux de variables sont dimensionnés, nous allons pouvoir les remplir. Nous allons commencer par le traitement le plus simple, celui des
numéros chance . Un seul est en effet choisi par tirage. Pour les parcourir sur les 48 derniers tirages, nous devons engager une
boucle For Next .
A la suite du code VBA , créer la double boucle suivante :
...
For lig1 = 4 To 51 'Pour 48 tirages car le 4 est inclus
freqC = 0
bouleC = Cells(lig1, 8).Value
ligC = lig1 + 1
Do While Cells(ligC, 3).Value <> ""
If (Cells(ligC, 8).Value = bouleC) Then freqC = freqC + 1
ligC = ligC + 1
Loop
tabC(compteur, 1) = compteur
tabC(compteur, 2) = bouleC
tabC(compteur, 3) = freqC
Sheets("stats_sortie").Cells(ligCR, 8).Value = tabC(compteur, 2)
Sheets("stats_sortie").Cells(ligCR + 1, 8).Value = tabC(compteur, 3)
ligCR = ligCR + 3
compteur = compteur + 1
Next lig1
...
Nous engageons donc une
première boucle sur les
48 derniers tirages , de la ligne 4 à la ligne 51. Nous réinitialisons la
fréquence de sortie (freqC = 0) pour qu'elle ne se cumule pas avec la précédente. En colonne H (8), nous prélevons le
numéro chance dans la
variable bouleC . Puis, nous positionnons le curseur sur la ligne suivante (ligC = lig1 + 1). C'est ainsi que nous pourrons engager une
boucle Do While sur tous les tirages jusqu'à celui en cours d'analyse, sans l'inclure. C'est avec cette astuce que nous pourrons connaître la
fréquence de sortie du numéro chance au moment de son tirage. Nous remplissons alors le
tableau de variables des informations avec la
fréquence cumulée pour le
numéro chance en cours. Puis, nous inscrivons ce numéro et cette fréquence sur la
feuille stats_sortie en colonne 8 pour la ligne en cours et la suivante. Et nous n'oublions pas de sauter 3 unités (ligCR = ligCR + 3), pour la prochaine inscription, en raison de la configuration de ce tableau. De même, nous incrémentons la
variable compteur pour que les prochaines inscriptions se fassent sur la ligne suivante du
tableau de variables .
Nous pouvons déjà tester ce premier traitement à ce stade. Mais pour cela, encore faut-il que la
procédure freq_sortie soit appelée par la
procédure événementielle stats_Click .
A la fin de la procédure stats_Click , ajouter l'appel suivant :
...
Set tabB = Nothing
Set tabC = Nothing
freq_sortie
End Sub
...
Enregistrer les modifications (CTRL + S) et revenir sur la première feuille du classeur,
Cliquer sur le bouton intitulé Stats ,
Puis, cliquer sur l'onglet stats_sortie pour afficher sa feuille,
Comme vous pouvez le voir, les numéros et leurs fréquences respectives sont effectivement retournés dans les bons emplacements du tableau de réception.
Fréquences de sorties des boules
Nous devons maintenant analyser les fréquences de sorties de chacune des cinq boules pour chacun des 48 derniers tirages. Pour cela, nous devons engager une nouvelle double boucle dans l'actuelle boucle For qui parcourt les lignes. En effet, en plus des lignes, nous devons parcourir les colonnes pour analyser les cinq numéros de chaque tirage.
A la suite du code, avant l'incrémentation du compteur, ajouter les instructions VBA suivantes :
...
ligCR = ligCR + 3
For col1 = 3 To 7
boule = Cells(lig1, col1).Value
freq = 0: ligD = lig1 + 1
Do While Cells(ligD, 3).Value <> ""
For col2 = 3 To 7
If (Cells(ligD, col2).Value = boule) Then
freq = freq + 1
End If
Next col2
ligD = ligD + 1
Loop
If (compteur < 241) Then
tabB(compteur, 1) = compteur
tabB(compteur, 2) = boule
tabB(compteur, 3) = freq
Sheets("stats_sortie").Cells(ligR, colR).Value = tabB(compteur, 2)
Sheets("stats_sortie").Cells(ligR + 1, colR).Value = tabB(compteur,3)
End If
compteur = compteur + 1
Next col1
Next lig1
...
Pour chacun des 48 derniers tirages, nous parcourons les colonnes de la 3 à la 7, soit de la C à la G, celles des boules. Nous prélevons le numéro de la boule en cours dans la
variable boule . Puis, nous parcourons tous les tirages (Do While Cells(ligD, 3).Value <> "") à partir de la ligne suivante (ligD = lig1 + 1). Pour chacun de ces tirages, nous analysons de nouveau chaque boule (For col2 = 3 To 7). Dès qu'un numéro concorde avec celui qui a été prélevé (If (Cells(ligD, col2).Value= boule) Then), nous incrémentons sa
fréquence de sortie (freq = freq + 1). A l'issue, nous remplissons le
tableau de variables nommé
tabB . Enfin, nous restituons ces données sur les deux lignes correspondantes de la
feuille stats_sortie . La
variable compteur doit être incrémentée dans cette
boucle For .
Sauter trois lignes
A chaque fois que le cinquième numéro est atteint, nous devons sauter trois lignes. C'est ainsi que nous pourrons poursuivre les inscriptions dans ce tableau architecturé d'une façon toute particulière. Pour cela, la question est de savoir si la valeur portée par la
variable compteur est un
multiple de 5 . En effet, elle est incrémentée après chaque boule analysée. C'est bien sûr l'
opérateur Mod que nous devons faire intervenir.
A la suite du code de la boucle For, ajouter les instructions VBA suivantes :
...
Sheets("stats_sortie").Cells(ligR + 1, colR).Value = tabB(compteur,3)
End If
colR = colR + 1
If compteur Mod 5 = 0 Then
ligR = ligR + 3
colR = 3
End If
compteur = compteur + 1
Next col1
...
Nous incrémentons naturellement la
variable colR d'une unité pour pointer sur la
colonne suivante , pour chaque nouvelle boule. Mais si la
fin de la rangée est atteinte (If compteur Mod 5 = 0 Then), non seulement nous sautons
trois lignes (ligR = ligR + 3) mais en plus de cela, nous replaçons le pointeur sur la
première colonne (colR= 3) de la
nouvelle ligne .
Récolter les fréquences
Le développement de cette nouvelle étape est terminé. Il est temps de tester.
Enregistrer les modifications et revenir sur la feuille tirages ,
Cliquer sur le bouton Stats puis afficher la feuille stats_sortie ,
Comme vous pouvez l'apprécier, sur les 48 derniers tirages, pour chaque numéro appelé, nous obtenons sa fréquence avant sa nouvelle sortie. Le moins que l'on puisse dire est que ces fréquences sont majoritairement élevées. Donc, le concept des numéros les moins tirés semble tomber à l'eau. Dans un prochain volet, nous proposerons une idée pour suggérer des
numéros à jouer , sur la base de ces
fréquences de sorties recoupées.