formateur informatique

Télécharger des fichiers Internet en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Télécharger des fichiers Internet 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 :


Télécharger en VBA Excel

Dans l'optique de décortiquer les fréquences de sortie des numéros du loto et dans le but de dresser de potentielles probabilités pour les tirages suivants, nous proposons de monter une application en plusieurs étapes. Dans ce premier volet, il est question de télécharger le fichier compressé synthétisant tous les tirages. Ainsi dans les prochains volets, après décompression automatisée, nous pourrons accéder à ce fichier pour importer ses informations dans la feuille du classeur et mettre en place des méthodes d'analyse dans une séquence suivante.



Classeur Excel à télécharger
Nous proposons de débuter les travaux à partir d'un classeur Excel offrant un bouton d'importation et une grille destinée à la réception des numéros pour chaque tirage passé. Comme vous le constatez, le classeur est accompagné d'un fichier texte. Ce dernier stocke l'Url du fichier à télécharger depuis le site de la française des jeux.
  • 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é,
Feuille Excel avec une grille pour accueillir les tirages du loto

Nous découvrons une feuille accueillant une grille destinée à recevoir les numéros des lotos à importer. De même, dans le coin supérieur droit, vous notez la présence d'un bouton. C'est lui qui doit enclencher tout le processus, en commençant par le téléchargement du fichier compressé archivant l'historique de tous les tirages.

La procédure et ses variables
Nous devons commencer par créer la procédure VBA associée au clic sur le bouton de la feuille. Comme il s'agit d'un contrôle ActiveX, le lien peut s'établir très simplement.
  • 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,
  • Sur la feuille dès lors, double cliquer sur le bouton intitulé Actualiser,
C'est ainsi que nous basculons dans l'éditeur VBA Excel, entre les bornes de la procédure événementielle actualiser_Click. Son code VBA se déclenchera au clic de l'utilisateur sur ce bouton de feuille.
  • Dans les bornes de cette procédure, ajouter les déclarations de variables suivantes :
...
Dim chemin As String: Dim adresse As String
Dim requeteHttp As Object: Dim flux As Object
...


Nous typons les deux premières variables comme des textes (As String) pour stocker respectivement le chemin d'accès à l'application locale et l'Url du fichier à prélever sur le Web. Ensuite, nous déclarons deux objets (As Object). Le premier doit instancier la classe permettant d'émettre des requêtes http. Le second doit instancier la classe permettant d'accéder aux flux stockés en mémoire. Il s'agira naturellement du fichier à réceptionner depuis le Web.



La demande Http
Pour réaliser un téléchargement depuis une Url précise, nous devons exécuter une requête http. Pour cela, nous devons instancier la classe permettant d'émettre ces requêtes.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
chemin = ThisWorkbook.Path & "\tirages\loto.zip"
adresse = "https://media.fdj.fr/ ... /loto/loto_201911.zip"
Set requeteHttp = CreateObject("Microsoft.XMLHTTP")
requeteHttp.Open "GET", adresse
requeteHttp.send
...


Tout d'abord, grâce à la propriété Path de l'objet VBA Excel ThisWorkbook, nous pointons dans le dossier de l'application, pour descendre dans le sous dossier tirages, que vous devez créer. Puis, nous indiquons sous quel nom nous souhaitons récupérer le fichier compressé (loto.zip). Ensuite, nous stockons l'Url du fichier à télécharger dans la variable adresse. Rappelez-vous, vous pouvez récupérer cette adresse dans le fichier texte issu de la décompression. Il est à noter que cette Url peut varier dans le temps. Il s'agira alors d'aller la prélever directement depuis le site de la française des jeux pour la mettre à jour dans le programme. Ensuite, nous initialisons (Set) notre objet requeteHttp. Grâce à la fonction VBA CreateObject et à son paramètre Microsoft.XMLHTTP, nous instancions la classe permettant d'émettre des requêtes http. En d'autres termes, il s'agit de demandes distantes formulées sur le Web. Dès lors, nous exploitons la méthode héritée Open pour demander d'obtenir le fichier situé à cette adresse. Puis, nous envoyons la demande avec la méthode héritée Send.

Tester la réponse à la demande Http
Avant d'envisager de récolter le fichier distant, nous devons tester la réponse à notre requête http retournée par le site. Et pour cela, notre objet requeteHttp offre désormais la propriété status. ...
If requeteHttp.Status = 200 Then

Else
MsgBox "Une erreur est survenue"
End If
...


Si la valeur 200 est retournée, cela signifie que la demande est bien reçue, qu'elle est jugée conforme et qu'elle est acceptée. Dans ce cas, nous pourrons poursuivre le traitement consistant à récupérer le fichier distant. Le cas échéant, nous en informons l'utilisateur pour qu'il puisse recommencer ultérieurement. Il arrive parfois, pour des raisons de sollicitations des sites, que les demandes ne puissent pas être traitées complètement.



Lire dans le flux
C'est désormais en mémoire que nous devons accéder à ce fichier à télécharger. L'idée est de récolter toutes ses informations, de les consolider pour les sauvegarder sur le disque à l'emplacement indiqué par la variable chemin.
  • Dans la première branche de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
Set flux = CreateObject("ADODB.Stream")
flux.Open
flux.Type = 1
flux.Write requeteHttp.responseBody
...


Tout d'abord, nous initialisons (Set) notre objet flux en instanciant (CreateObject) la classe ADODB.Stream pour accéder aux contenus hébergés temporairement en mémoire. Grâce à sa méthode héritée Open, nous ouvrons l'un de ces flux pour accueillir les données. Avec la propriété héritée Type réglée à 1, nous indiquons qu'il s'agit de données binaires. En effet, le fichier est compressé. S'il s'était agi d'un banal fichier texte, nous lui aurions affectée la valeur 2. Puis, nous demandons de restituer (Méthode Write), le contenu émanant de la requête http que nous avons formulée (requeteHttp.responseBody).

Sauvegarder le contenu téléchargé
Il ne nous reste plus qu'à finaliser. Et pour cela, nous devons simplement enregistrer sur le disque, les données hébergées en mémoire par ce flux que nous avons ouvert. Bien entendu, notre objet ADODB.Stream offre une méthode tout à fait dédiée.
  • Toujours dans la branche du If et à la suite du code, ajouter les deux lignes VBA suivantes :
...
flux.SaveToFile chemin, 2
flux.Close
...


La méthode héritée SaveToFile de notre objet flux permet d'enregistrer sur le disque, les données chargées en mémoire. Pour cela, nous lui passons deux paramètres. Il s'agit tout d'abord de l'emplacement de la sauvegarde, déterminé par notre variable chemin. Ensuite, la valeur 2 passée en second argument indique d'écraser le fichier s'il existe déjà. Ce mode est nécessaire dans la mesure où nous souhaitons récolter régulièrement les grilles du loto, mises à jour à raison de trois fois par semaine.



Décharger les objets de la mémoire
Il ne nous reste plus qu'à détruire les objets qui ne sont plus utilisés avant de tester le code de téléchargement.
  • A la fin de la procédure, après l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
Set requeteHttp = Nothing
Set flux = Nothing
...


Ces réinitialisations permettent de sortir les objets de la mémoire.
  • Enregistrer les modifications (CTRL + S) et revenir sur la feuille Excel (ALT + Tab),
  • Dans le ruban Développeur, cliquer sur le bouton Mode création,
Ainsi, nous désactivons le mode conception.
  • Dès lors, cliquer sur le bouton Actualiser,
Rien ne se produit en apparence et pourtant !

Téléchargement du fichier des tirages du loto en VBA Excel

Mais si vous ouvrez le sous dossier tirages à la racine du dossier de décompression, vous notez bien la présence d'un fichier compressé nommé loto.zip. Si vous décompressez ce dernier, que vous double cliquez sur le fichier Csv résultant, vous obtenez bien toutes les grilles des lotos joués depuis des années. Quant à nous et à l'occasion du prochain volet, nous choisirons de maitriser cette importation pour ne conserver que certaines données à inscrire dans des cellules bien précises.

 
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