Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Importer les numéros du loto
Nous poursuivons la conception de l'
application VBA Excel consistant à analyser les
numéros du loto . Lors des volets précédents, nous avons franchi trois étapes. Nous sommes parvenus Ã
télécharger le
fichier distant puis à le
décompresser . Dans un troisième temps, nous y avons remplacé tous les
sauts de ligne par des
retours à la ligne pour que le
code VBA soit en mesure de parcourir le
fichier Csv ligne à ligne. C'est précisément le point qui nous concerne dans ce nouveau volet. Nous devons réaliser l'
importation sélective des données dans la grille prévue à cet effet sur la
feuille Excel .
Classeur Excel à télécharger
Pour poursuivre le développement, nous devons tout d'abord récupérer les travaux au dernier indice.
Vous le voyez, la décompression livre le
fichier Excel accompagné d'un
fichier texte et d'un
sous dossier nommé
tirages . Ce dernier est vide pour l'instant. Il est destiné à accueillir le
fichier à télécharger et Ã
décompresser . Le
fichier texte héberge le
code VBA Excel à réintégrer au projet. Dans les volets précédents, nous avons expliqué pour quelle raison nous l'avons détaché du classeur.
Réintégrer le code VBA
La première tâche qui nous attend consiste donc à réimplanter le
code VBA dans le
projet Excel .
Double cliquer sur le fichier texte pour afficher son code,
Réaliser le raccourci clavier CTRL + A pour tout sélectionner,
Effectuer alors le raccourci clavier CTRL + C pour copier tout le code,
Double cliquer sur le fichier du classeur pour l'ouvrir dans Excel ,
Cliquer sur le bouton Activer la modification du bandeau de sécurité,
Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel ,
Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Feuil1 (tirages) ,
C'est ainsi que nous affichons la feuille de code associée à la feuille du classeur.
Dans cette feuille de code, coller (CTRL + V) les instructions précédemment copiées,
Puis, enregistrer le projet (CTRL+ S),
La
procédure actualiser_Click est associée au
bouton de la feuille . C'est elle qui enclenche le
téléchargement du
fichier internet . Dans l'enchaînement, elle appelle les deux autres procédures :
decompresser et
importer . La première s'occupe de la
décompression du
fichier téléchargé . La seconde
remplace les sauts de ligne . C'est elle que nous devons continuer d'implémenter pour procéder à l'
importation sélective des données du
fichier Csv .
Comme le
code VBA a été détaché du projet, une
référence absolument nécessaire a automatiquement été désactivée. Elle permet d'exécuter des
lignes de commande issue du
DOS . Nous devons la réactiver.
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 ,
Cliquer alors sur le bouton Ok pour valider cette intégration au projet,
Positions des données à importer
Les données doivent être importées sur la feuille à partir de la
ligne 4 et de la
colonne B Ã la
colonne H . Il s'agit de la date du tirage, des cinq boules et du numéro chance. Toutes les informations du
fichier Csv ne sont donc pas concernées. Nous devons donc les repérer pour établir la correspondance avec les cellules de la feuille, par le
code VBA Excel . Pour cela, nous devons commencer par exécuter le programme pour
télécharger et
décompresser le fichier de la française des jeux.
Remonter en haut de la procédure actualiser_Click ,
Préfixer l'instruction On Error Resume Next d'une apostrophe,
Nous la passons ainsi encommentaire.
Revenir sur la feuille du classeur (ALT + Tab),
Cliquer sur le bouton Actualiser ,
Il n'est pas impossible qu'un second clic soit nécessaire. Nous en avions expliqué les raisons. Il arrive que la première demande http soit traitée partiellement.
Dans le dossier de décompression, double cliquer sur le sous dossier tirages pour l'ouvrir,
Dès lors, cliquer droit sur le fichier Csv ,
Dans le menu contextuel, choisir de l'ouvrir dans un éditeur comme le Notepad ++,
C'est le point-virgule (;) qui est utilisé comme séparateur de liste. C'est ce délimiteur que nous allons devoir transmettre au VBA pour fractionner les informations à importer.
La
date du tirage est située en troisième position dans l'énumération, soit à l'indice 2 dans le
tableau de variables que nous allons remplir. Les numéros à extraire sont placés entre les positions 5 et 10. Ils correspondent donc aux indices 4 à 9 dans le tableau de variables.
Fermer l'éditeur Notepad pour libérer le fichier de la mémoire,
Stocker dans un tableau de variables
La
procédure importer se charge déjà de parcourir ligne à ligne le
fichier Csv corrigé. A chaque passage, nous devons stocker la date du tirage et les numéros sortis dans un tableau de variables. C'est alors que nous pourrons faire la correspondance entre les données de ce tableau et les cellules de la feuille Excel, pour réaliser l'importation de toutes les informations souhaitées.
Revenir dans l'éditeur VBA Excel, entre les bornes de la procédure importer ,
Comme vous pouvez le voir, un objet nommé
elements est déjà déclaré. C'est lui que nous devons transformer en
tableau de variables par découpes des informations ligne à ligne, sur le
point-virgule .
Dans la seconde instruction de lecture, ajouter les lignes VBA suivantes :
...
Open Fichier For Input As #1
Do While Not EOF(1)
Line Input #1, texte
If compteur > 1 Then
elements = Split(texte, ";")
Cells(ligne, 2).Value = DateValue(Format(elements(2), "dd/mm/yyyy"))
ligne = ligne + 1
End If
'MsgBox texte
'If compteur > 5 Then Exit Do
compteur = compteur + 1
Loop
Close #1
...
Grâce au test sur la
variable compteur , nous ignorons le premier passage pour ne pas considérer la ligne des titres de champs. Ils existent déjà sur notre feuille. Ensuite, nous exploitons la
fonction VBA Split pour découper la ligne récupérée (texte) sur le délimiteur (;). C'est ainsi que chaque donnée de la ligne en cours est désormais rangée indépendamment dans l'
objet elements qui pour l'occasion, a été transformé en
tableau de variables . Dès lors pour la ligne en cours qui démarre à l'indice 4 et pour la deuxième colonne (B), nous importons la
date , placée en troisième position dans le fichier, soit à l'indice 2 dans le tableau de variables (elements(2)). Nous exploitons les
fonctions DateValue et
Format pour que le
VBA ne soit pas tenté de transformer les dates importées dans le format américain (Mois avant les jours).
Revenir sur la feuille Excel et cliquer sur le bouton Actualiser ,
Comme vous pouvez l'apprécier, nous sommes parvenus à importer toutes les dates des tirages, les unes en-dessous des autres et en débutant à partir de la première ligne vide du tableau de réception.
Importer les numéros des lotos
Désormais pour
importer les numéros des lotos , nous avons moyen d'optimiser le code dans la mesure où ils se suivent tous dans l'énumération du
fichier Csv . Il en va de même pour leur implantation sur la feuille. Il y a simplement un décalage d'une unité entre l'indice de colonne sur la feuille et l'indice dans le tableau de variables. Nous proposons donc d'engager une
boucle For Next pour traiter ensemble tous ces numéros.
Dans la boucle, avant l'incrémentation, imbriquer la nouvelle boucle suivante :
...
If compteur > 1 Then
elements = Split(texte, ";")
Cells(ligne, 2).Value = DateValue(Format(elements(2), "dd/mm/yyyy"))
For i = 3 To 8 'Correspondance - décalage une colonne
Cells(ligne, i).Value = elements(i + 1)
Next i
ligne = ligne + 1
End If
...
Pour les cellules de la colonne C à la colonne H (For i = 3 To 8), nous insérons sur la ligne en cours (Cells(ligne, i).Value) les valeurs correspondantes détenues par le tableau de variables (elements(i + 1)).
Revenir sur la feuille Excel et cliquer de nouveau sur le bouton Actualiser ,
C'est avec plaisir que vous pouvez constater le rapatriement intégral des
numéros des lotos sur la grille prévue à cet effet sur la
feuille Excel .