formateur informatique

Importer les données d'un fichier compressé en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Importer les données d'un fichier compressé en VBA Excel
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Inscription Newsletter
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,
Référence VBA Excel, lignes de commande Dos, Microsoft Shell

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,
Positions des données à extraire et séparées par un point-virgule dans le fichier CSV



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,
Importer les dates des tirages des lotos depuis le fichier CSV dans la feuille Excel

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,
Importer les données du loto dans la feuille Excel en VBA

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.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn