Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Fréquences des numéros du loto
Nous progressons dans le développement de notre application destinée à analyser les
numéros des tirages du loto . Grâce aux travaux du volet précédent, nous avons réussi Ã
importer les numéros de tous les tirages passés, sur la
feuille Excel . Dans cette nouvelle étape, nous proposons de les analyser tous, pour livrer leurs fréquences de sorties respectives. En fonction des variations entre les uns et les autres, nous pourrons déjà commencer à comprendre s'il existe une certaine logique.
Classeur Excel à télécharger
Pour poursuivre le développement, nous devons commencer par récupérer les travaux au dernier indice.
Comme nous en avons l'habitude désormais, la décompression livre le
classeur Excel accompagné d'un
fichier texte , pour le
code VBA à réintégrer, mais aussi d'un
sous dossier nommé
tirages , pour accueillir le
fichier du loto Ã
télécharger et Ã
décompresser .
Double cliquer sur le fichier du classeur pour l'ouvrir 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. Tous les numéros des tirages passés apparaissent dans une grille, entre les colonnes B et H. Une
mise en forme conditionnelle prédéfinie aide à repérer, dans des couleurs différentes, les fréquences de sorties des numéros du dernier tirage dans l'ensemble des données récoltées.
Réintégrer le code VBA
Avant de poursuivre le développement, nous devons actualiser ces tirages au dernier indice pour livrer des statistiques pertinentes. Pour cela, il est question de réintégrer le
code VBA dans le projet pour procéder au
téléchargement du fichier distant , à sa
décompression et à l'
importation des données du
fichier Csv résultant.
A la racine du dossier de décompression, double cliquer sur le fichier texte pour l'ouvrir,
Réaliser le raccourci clavier CTRL + A pour tout sélectionner,
Puis, réaliser le raccourci clavier CTRL + C pour copier tout le code VBA ,
Revenir sur le classeur Excel et réaliser le raccourci ALT + F11 pour basculer dans l'éditeur VBA ,
Dans l'explorateur sur la gauche, double cliquer sur l'élément Feuil1 (tirages) ,
Ainsi, nous affichons la feuille de code qui lui est associée au centre de l'écran.
Dès lors, réaliser le raccourci CTRL + V pour importer le code des précédents travaux,
Ce code nécessite une
librairie bien précise pour exécuter des méthodes particulières, issues des lignes de commande de l'ancestral
système d'exploitation DOS . Cette librairie a disparu des références du fait que nous ayons enlevé les lignes de programmation, pour les besoins du téléchargement. Nous devons réintégrer cette référence.
En haut de l'éditeur, cliquer sur le menu Outils ,
Dans les propositions, cliquer sur la rubrique Références ,
Dans la boîte de dialogue, cocher la case Microsoft Shell Controls And Automation ,
Si elle est déjà cochée, vous n'avez rien à faire.
Cliquer sur le bouton Ok pour valider cette intégration,
Désormais, si vous cliquez sur le
bouton Actualiser de la première feuille, une erreur peut survenir. Nous le savons désormais, la
première requête http peut ne pas aboutir. Nous veillerons à intercepter et à gérer cette anomalie à l'avenir. Mais si vous cliquez une seconde fois, après avoir arrêté l'exécution du projet, plus aucune erreur ne jaillit. Et si vous consultez le
sous-dossier tirages , le
fichier téléchargé et sa
décompression sont bien présents. Grâce à eux, les
numéros des tirages du loto ont été mis à jour sur la
feuille Excel grâce à la
procédure nommée
importer . Nous allons donc pouvoir les analyser pour en ressortir les
fréquences respectives dans un premier temps.
Les grilles des fréquences
Nous l'avons avancé, l'objectif de ce volet est de dégager quelques statistiques. Et pour cela, une seconde feuille est prévue.
Revenir sur la feuille Excel (ALT + Tab),
En bas de la fenêtre, cliquer sur l'onglet frequences pour activer sa feuille,
Comme vous pouvez le voir, cette feuille héberge deux tableaux de deux colonnes. Le premier doit accueillir tous les numéros des boules tirées avec leurs fréquences à calculer à partir de l'historique dont nous disposons. Le second doit livrer tous les numéros chance avec les fréquences qui les ont vu apparaître au fil des tirages. Tous ces numéros, devront être triés dans l'ordre croissant, sur les deux tableaux, en fonction des
fréquences de sorties . Nous saurons ainsi quels sont ceux qui sont le moins souvent sortis et si les écarts sont importants.
La procédure VBA des statistiques
Pour commencer, nous devons créer la
procédure VBA qui se déclenchera au clic sur le second bouton de la première feuille.
En bas de la fenêtre Excel , cliquer sur l'onglet tirages pour revenir sur la première feuille,
En haut de la fenêtre Excel , cliquer sur l'onglet Développeur pour activer son ruban,
Dans la section Contrôles du ruban, cliquer sur le bouton Mode Création ,
Ainsi, nous accédons au mode conception des objets présents sur cette feuille.
De fait, double cliquer sur le bouton intitulé Stats ,
De cette manière, nous basculons dans l'
éditeur VBA Excel , entre les bornes de la
procédure événementielle stats_Click . Son
code VBA se déclenchera au clic de l'utilisateur sur ce bouton. Et c'est ce code qui doit livrer les statistiques sur les fréquences de sorties.
Les déclarations et affectations
Pour dresser ces
statistiques , nous avons inévitablement besoin de variables qu'il est impératif de déclarer et d'affecter.
Entre les bornes de la procédure, ajouter les déclarations et affectations suivantes :
...
Dim tabB As Variant: Dim tabC As Variant
Dim ligne As Integer: Dim colonne As Byte
Dim boule As Byte: Dim chance As Byte
ReDim tabB(1 To 49)
ReDim tabC(1 To 10)
ligne = 4
...
Les deux premières variables ne sont pas typées (As Variant). Nous les utiliserons comme
tableaux à dimensionner pour accueillir les
fréquences des boules et des
numéros chance . Les deux variables suivantes sont respectivement typées comme un entier classique (Integer) et comme un entier court (Byte). Nous les utiliserons comme
variables de boucle afin de parcourir les lignes et les colonnes des numéros tirés à analyser. Enfin, les
variables boule et
chance , elles aussi typées comme des entiers courts, serviront à mémoriser les numéros au fil de l'analyse par les boucles. En effet, nous devons parcourir le tableau de l'historique des tirages, aussi bien en ligne qu'en colonne, pour n'omettre aucun numéro. Ensuite nous dimensionnons les
deux tableaux de variables : Le premier sur les 49 boules possibles et le second sur les 10 numéros chance possibles. Puis, nous calons l'indice de ligne sur la ligne du dernier tirage à analyser, soit sur la première ligne (4) du tableau de la feuille tirages.
Parcourir les lignes des tirages
Pour analyser tous les numéros tirés, nous devons commencer par
parcourir toutes les lignes du tableau de la
feuille tirages , tant que la
première ligne vide n'est pas atteinte. Et pour cela, une
boucle Do While , émettant un critère, est particulièrement prédestinée.
A la suite du code de la procédure, créer la boucle suivante :
...
Do While Cells(ligne, 3).Value <> ""
ligne = ligne + 1
Loop
...
A partir de la quatrième ligne du tableau (ligne), tant que la
première cellule vide de la troisième colonne n'est pas atteinte (Do While Cells(ligne, 3).Value <> ""), nous engageons une analyse de toutes les lignes. A chaque passage et après des traitements qui restent à entreprendre, nous n'oublions pas d'
incrémenter la variable nommée
ligne . C'est ainsi que nous pourrons pointer précisément sur les cellules des lignes suivantes.
Toutes les colonnes de chaque ligne
Pour que chaque numéro sorti soit analysé, pour chaque ligne passée en revue, nous devons étudier les numéros de chaque colonne. Pour cela donc, nous devons intégrer une seconde boucle dans la première. Elle est forcément bornée car nous connaissons l'indice de colonne de la première comme de la dernière boule. Donc, une
boucle For Next fera parfaitement l'affaire.
Dans la boucle Do While , intégrer la boucle For Next comme suit :
...
Do While Cells(ligne, 3).Value <> ""
For colonne = 3 To 7
Next colonne
ligne = ligne + 1
Loop
...
Pour chaque ligne donc, nous parcourons les colonnes de chaque boule, de la C Ã la G (3 To 7).
Cumuler les fréquences
Désormais, grâce au
premier tableau de variables , dès qu'un numéro de boule est rencontré, nous allons pouvoir stocker sur son indice, les fréquences de ses sorties. Il suffit d'incrémenter les anciens décomptes au fur et à mesure des numéros passés en revue par cette
double boucle .
Dans la boucle imbriquée, ajouter les deux lignes VBA suivantes :
...
boule = Cells(ligne, colonne).Value
tabB(boule) = tabB(boule) + 1
...
Nous prélevons le numéro (Value) de la boule parcourue pour l'indice de ligne (ligne) et l'indice de colonne (colonne) en cours, dans la
variable boule . Sur cet indice (tabB(boule)), nous incrémentons la
fréquence de sortie (tabB(boule) + 1) à chaque fois que ce numéro est effectivement rencontré.
Fréquences des numéros chance
Concernant les numéros chance, il n'y a pas de colonne à parcourir. Ils sont tous dans la même rangée. Donc, dans la première boucle et en dehors de la seconde, il suffit de prélever les numéros pour
incrémenter leurs fréquences dans le tableau de variables dédié à cet effet.
Avant l'incrémentation de la boucle parent, ajouter les deux instructions VBA suivantes :
...
Next colonne
chance = Cells(ligne, 8).Value
tabC(chance) = tabC(chance) + 1
ligne = ligne + 1
Loop
...
Le principe est le même. Nous récupérons la valeur du numéro rencontré pour incrémenter sa fréquence dans le tableau de variables dédié (tabC), à chaque fois que ce chiffre est croisé.
Inscrire les fréquences
A l'issue du traitement de cette double boucle, les
deux tableaux de variables renferment toutes les fréquences de sorties des boules et des numéros chance. Dans l'ordre, nous n'avons donc plus qu'à les restituer dans les tableaux de la seconde feuille, nommée
fréquences .
Après la double boucle, créer la nouvelle boucle suivante :
...
Loop
For ligne = 4 To 52
Sheets("frequences").Cells(ligne, 4).Value = ligne - 3
Sheets("frequences").Cells(ligne, 5).Value = tabB(ligne - 3)
If (ligne < 14) Then
Sheets("frequences").Cells(ligne, 7).Value = ligne - 3
Sheets("frequences").Cells(ligne, 8).Value = tabC(ligne - 3)
End If
Next ligne
End Sub
...
Nous parcourons de nouveau toutes les boules du tableau (4 To 52). Sur la
feuille frequences , nous inscrivons les numéros en
colonne D (Cells(ligne,4).Value) pour la ligne en cours. Bien sûr, les numéros sont réajustés de trois unités pour partir du chiffre 1, étant donné que nous débutons à partir de la ligne 4. Pour chacun, nous inscrivons dans la
colonne E suivante (Cells(ligne, 5).Value), les fréquences correspondantes en partant là encore, du
premier indice du
tableau de variables , réajusté de trois unités (tabB(ligne - 3)), pour les mêmes raisons que précédemment.
Puis, nous nous occupons des
numéros chance par la même occasion jusqu'à la ligne 13 (<14) et cette fois pour les colonnes 7 et 8, soit G et H. Pour chaque numéro, nous inscrivons en regard la fréquence décelée et stockée dans le second tableau de variables (tabC(ligne -3)).
Trier les tableaux des fréquences
Il ne nous reste plus qu'Ã
trier les deux tableaux des fréquences par
ordres croissants . Ainsi, nous y verrons plus clair. Pour cela, nous proposons simplement de restituer un code que nous avions développé à l'occasion d'une
astuce VBA Excel pour
trier des tableaux de longueurs variables .
A la suite du code de la procédure, ajouter les instructions VBA suivantes :
...
Sheets("frequences").Sort.SortFields.Clear
Sheets("frequences").Sort.SortFields.Add2 Key:=Range("E3:E52")
With Sheets("frequences").Sort
.SetRange Range("C3:E52")
.Header = xlYes
.Orientation = xlTopToBottom
.Apply
End With
Sheets("frequences").Sort.SortFields.Clear
Sheets("frequences").Sort.SortFields.Add2 Key:=Range("H3:H13")
With Sheets("frequences").Sort
.SetRange Range("G3:H13")
.Header = xlYes
.Orientation = xlTopToBottom
.Apply
End With
Sheets("frequences").Activate
Sheets("frequences").Range("A1").Select
Set tabB = Nothing
Set tabC = Nothing
...
Nous agissons donc sur la feuille nommée
frequences . Tout d'abord, nous effaçons les anciennes potentielles préférences de tri (Clear). Puis, dans les deux cas, nous définissons la colonne à utiliser pour les tris (E3:E52 et H3:H13), soit les fréquences de sorties. Dès lors, nous engageons les réorganisations (Sort), sans toucher aux entêtes, soit aux titres (Header = xlYes). Enfin, nous déchargeons les objets utilisés comme tableaux de variables et comme nous en avons l'habitude, en les réinitialisant à Nothing.
Etablir les statistiques
Nous pouvons maintenant exécuter le
code VBA sur l'intégralité des tirages pour livrer les
statistiques sur les
fréquences de sorties des
numéros du loto .
Enregistrer les modifications (CTRL + S) et basculer sur la feuille (ALT + Tab),
Dans le ruban Développeur , cliquer sur le bouton Mode Création ,
Ainsi, nous désactivons la conception pour libérer l'exécution.
Cliquer alors sur le bouton Stats ,
Comme vous pouvez l'apprécier, les fréquences sont calculées et triées en un temps records, quand dans le même temps le visuel est rendu à la
feuille frequences pour permettre à l'utilisateur de consulter les données à décortiquer.
Comme vous pouvez le voir, au jour de l'exécution de ce programme, les boules 1 et 2 sont les moins souvent utilisées. Et si vous faites défiler le tableau vers le bas, vous constatez un net écart entre les numéros les plus souvent sortis et les moins souvent sortis. Le constat est assez similaire pour les numéros chance du second tableau. Pourtant ne dit-on pas qu'un équilibre existe et que statistiquement ces fréquences doivent se lisser dans le temps ? C'est tout l'enjeu de ce développement.
Comme vous le savez, il est très simple de vérifier ces résultats analytiques. Il suffit d'engager la
fonction Nb.Si sur le tableau des tirages pour confronter les fréquences avec celles calculées par le code VBA.