formateur informatique

Télécharger une base de données distante compressée

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Télécharger une base de données distante compressée
Livres à télécharger


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


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Télécharger une base de données distante

Nous proposons de monter une application en trois étapes. L'objectif est de pouvoir importer les informations d'une base de données compressée hébergée sur un serveur distant. Trois sujets sont donc à l'affiche. Dans une première étape, il est question de procéder au téléchargement. Dans une deuxième, il s'agit de réaliser la décompression. C'est alors l'importation des données externes qui doit avoir lieu dans un troisième temps et tout cela, par le code VBA Access.

Base de données Access à télécharger
Pour amorcer ces travaux, nous suggérons d'appuyer l'étude sur une base de données offrant une table pour accueillir ces informations externes ainsi qu'un formulaire avec un bouton dédié au téléchargement. Comme vous pouvez le voir, la décompression livre le fichier de la base de données avec un fichier texte. Ce dernier héberge l'URL de la base de données distante que nous souhaitons télécharger par le code VBA Access.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Cliquer ensuite sur le bouton Activer le contenu du bandeau de sécurité,
  • Puis, dans le volet de navigation sur la gauche, double cliquer sur le formulaire fRecup,
Formulaire Access pour télécharger et importer des données Internet

Ce formulaire est doté d'un sous formulaire pour accueillir les données distantes à importer. Dans son entête, il propose aussi un bouton de téléchargement. En réalité, il s'agit d'un contrôle image que nous utiliserons comme un bouton. Au clic, le téléchargement doit intervenir dans un premier temps.

La procédure du bouton
Pour débuter, nous devons associer un code à déclencher au clic sur le bouton de téléchargement.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur l'image à l'icône du téléchargement,
  • Activer alors l'onglet Evénement de sa feuille de propriétés,
  • Cliquer sur le petit bouton associé à son événement Au clic,
  • Dans la boîte de dialogue qui suit, choisir le Générateur de code et valider par Ok,
C'est ainsi que nous basculons dans l'éditeur de code VBA Access, entre les bornes de la procédure événementielle telecharger_Click.

Les variables
Des variables et objets sont nécessaires, notamment pour émettre une demande http destinée à récupérer le fichier distant.
  • Dans les bornes de la procédure, ajouter les déclarations 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). Elles doivent respectivement stocker le chemin d'accès au fichier résultant du téléchargement sur le disque ainsi que l'Url du fichier distant. Nous typons les deux suivantes comme des objets. La première doit instancier la classe permettant notamment d'émettre des requêtes http sur le Web. La seconde doit instancier la classe permettant d'ouvrir un flux de lecture en mémoire pour réceptionner les données du fichier distant.

La demande de téléchargement
Il est maintenant temps d'initialiser les variables et notamment le premier objet pour effectuer la demande http de téléchargement. Pour cela, faut-il encore connaître l'url du fichier distant et l'emplacement sur le disque pour l'accueillir.
  • Après la déclaration des variables, ajouter les instructions VBA suivantes :
...
chemin = CurrentProject.Path & "\base-distante.zip"
adresse = "https://www.bonbache.fr/ .../base-distante.zip"
Set requeteHttp = CreateObject("Microsoft.XMLHTTP")
requeteHttp.Open "GET", adresse
requeteHttp.Send
...


Grâce à la propriété Path de l'objet VBA Access CurrentProject, nous désignons le chemin d'accès à l'application locale. Nous lui ajoutons (& "\...") le nom du fichier sous lequel nous souhaitons stocker le fichier téléchargé. Dans la variable adresse, nous mémorisons l'URL du fichier distant. Cette dernière est donnée dans le fichier texte issu du téléchargement et de la décompression. Ensuite, nous initialisons (Set) l'objet requeteHttp pour instancier la classe permettant de réaliser ces demandes distantes, grâce à la fonction VBA CreateObject. Dès lors, nous exploitons sa méthode héritée Open pour fournir l'URL. Puis, nous envoyons la demande de réception par le biais de sa méthode Send.

La requête Http
Puisque la classe est désormais instanciée, sur la base de l'Url mémorisée, il est temps de réaliser la demande http, ou plutôt de tester la réponse, pour récupérer le fichier distant en local.
  • A la suite du code, ajouter les instructions VBA suivantes :
...
DoEvents
If requeteHttp.Status = 200 Then

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


Tout d'abord, nous exploitons la commande DoEvents pour temporiser, suite à l'instanciation de la classe et à l'envoi de la demande, avant de tester la réponse de la requête http. Grâce à la propriété Status de la classe, nous sommes en mesure de vérifier (200) si la demande a bien été reçue et si elle a été jugée conforme. Dans ces conditions, nous prévoyons une branche (If) pour réceptionner les informations demandées. Le cas échéant (else), nous avortons le traitement et en informons l'utilisateur.

Télécharger le contenu distant
Si la demande a bien été reçue et autorisée, nous pouvons charger le contenu distant en mémoire pour ensuite le sauvegarder sur le disque dur local. Pour cela, nous devons créer un flux de lecture grâce à la classe ADODB.Stream qu'il s'agit d'instancier.
  • Dans la branche de l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
Set flux = CreateObject("ADODB.Stream")
flux.Open
flux.Type = 1
flux.Write requeteHttp.responseBody
flux.SaveToFile chemin, 2
flux.Close
...


Nous initialisons (Set) l'objet flux sur la classe ADODB.Stream. Nous ouvrons un flux de lecture en mémoire grâce à sa méthode héritée Open. Sa propriété Type ainsi définie, indique que le fichier doit être traité en mode binaire, car il s'agit d'un fichier compressé. Ensuite, nous récupérons le corps de la requête http (responseBody), soit le contenu du fichier distant. C'est alors que nous l'enregistrons physiquement sur le disque, grâce à la méthode héritée SaveToFile à l'emplacement défini en amont (chemin) et avec écrasement autorisé (2). Enfin et naturellement, nous refermons le flux de lecture.

Détruire les objets
Avant de tester le code de téléchargement, nous devons détruire les objets qui ne sont plus utilisés pour libérer la mémoire de l'ordinateur.
  • Après l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
Set requeteHttp = Nothing
Set flux = Nothing
...


Nous les réinitialisons (Set) simplement à Nothing.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
  • L'exécuter en enfonçant la touche F5 du clavier par exemple,
  • Puis, cliquer sur le bouton de téléchargement,
A la première exécution, une erreur peut survenir car la demande http n'a pas le temps d'aboutir malgré la temporisation (DoEvents) que nous imposons. Nous avions constaté ce phénomène à l'occasion du développement de la solution sur les numéros du loto en VBA Excel.
  • Si l'erreur intervient, cliquer sur le bouton Fin de la boîte de dialogue,
  • Puis, cliquer de nouveau sur le bouton de téléchargement,
Cette fois, aucune erreur n'est à déplorée. Mais rien ne se produit, en apparence en tous cas.

Télécharger un fichier Internet compressé en VBA Access

En effet, si vous ouvrez le dossier de l'application Access dans l'explorateur Windows, vous constatez la présence du fichier distant qui a parfaitement été téléchargé par notre code VBA Access.

 
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