formateur informatique

Décompresser des bases de données téléchargées en VBA Access

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Décompresser des bases de données téléchargées en VBA Access
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 :


Décompresser des fichiers en VBA Access

Dans l'étape précédente, nous avons appris à télécharger des fichiers du Web par le code VBA Access. Dans ce nouveau volet, nous allons voir comment décompresser automatiquement ces fichiers téléchargés pour pouvoir les exploiter dans l'enchaînement, toujours par le code VBA Access.

Base de données Access à télécharger
Pour poursuivre les travaux, nous devons récupérer la base de données hébergeant le code VBA permettant le téléchargement de fichiers distants.
  • Télécharger le fichier compressé decompresse-fichier-telecharge.rar en cliquant sur ce lien,
  • Le décompresser dans le dossier de votre choix,
  • Double cliquer sur le fichier réceptionné pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité pour libérer les ressources,
  • Dans le volet de navigation sur la gauche, double cliquer sur le formulaire fRecup,
  • Dans l'entête du formulaire en exécution, cliquer sur le bouton de téléchargement,
  • Si une erreur survient, cliquer sur le bouton Fin de la boîte de dialogue,
  • Puis, cliquer de nouveau sur le bouton de téléchargement,
Télécharger des fichiers Internet en VBA Access

Dès lors, si vous affichez le dossier de décompression dans l'explorateur Windows, vous constatez la présence d'un nouveau venu. Il s'agit du fichier distant téléchargé par le code VBA Access déjà en place. Il est compressé et nous devons développer le code capable de fournir la version originelle après décompression.

La procédure de décompression
La procédure VBA de téléchargement existe donc déjà. Nous devons maintenant créer celle se chargeant de la décompression. Cette seconde procédure devra être appelée par la première pour que la décompression emboîte automatiquement le pas du téléchargement.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Access,
Vous découvrez effectivement la présence de la procédure telecharger_Click qui se déclenche au clic sur le bouton du formulaire.
  • Sous la procédure télécharger_Click, créer la procédure decompresser comme suit :
Sub decompresser(cheminFichier As String, dossier As String)

End Sub


Nous la déclarons avec deux paramètres en attente pour réceptionner respectivement le chemin d'accès au fichier téléchargé et le chemin du dossier de l'application locale.

Les commandes DOS
Pour réaliser cette décompression, nous allons devoir faire appel à des objets et fonctions empruntés au DOS. Pour instancier cette classe, une référence spécifique doit être ajoutée au projet.
  • En haut de l'éditeur, cliquer sur le menu Outils,
  • Dans les propositions, choisir la rubrique Références,
  • Dans la boîte de dialogue, cocher la case Microsoft Shell Controls And Automation,
  • Puis, valider cette intégration en cliquant sur le bouton Ok,
Ajouter la référence aux commandes DOS dans le projet VBA Access

Déclarer les variables
Maintenant, c'est en toute quiétude que nous pouvons réaliser la déclaration des variables qui permettront d'exécuter ces commandes DOS.
  • Dans les bornes de la procédure, ajouter les déclarations de variables suivantes :
Sub decompresser(cheminFichier As String, dossier As String)
Dim source As FolderItems: Dim commande As Shell

End Sub


Grâce à laréférence que nous avons ajoutée, l'objet source typé comme un FolderItems doit prendre le contrôle de l'archive compressée pour en extraire les fichiers et dossiers. Dans notre cas, il s'agit seulement du fichier de la base de données à sortir de la compression. Mais c'est grâce à l'objet commande déclaré comme tel (Shell) que ce précédent objet pourra ensuite intervenir. Nous le verrons et nous le comprendrons.

Supprimer l'ancienne décompression
L'opérateur ou un processus automatisé peut intervenir quotidiennement pour récolter les données distantes et les mettre à jour localement. En connaissance de cause, la précédente décompression doit d'abord être supprimée pour laisser la place au fichier de la base de données au dernier indice. Pour cela, c'est une commande DOS ancestrale qui intervient sous forme de fonction ici (Kill).
  • A la suite du code, ajouter l'instruction conditionnelle suivante :
...
If Dir(dossier & "base-distante.accdb") <> "" Then
Kill dossier & "base-distante.accdb"
End If
...


Grâce à lafonction Dir, nous testons l'existence de la base de données décompressée dont nous connaissons le nom (base-distante.accdb), dans le dossier de l'application passé en paramètre (dossier). Si le fichier existe (<> "") alors (Then), nous le détruisons grâce à la commande Kill issue du DOS et permise par cette référence ajoutée au projet.

Instancier la classe Shell
Désormais, pour accéder au coeur de l'archive et extirper les fichiers (La base de données ici) de ses entrailles, nous devons instancier la classe Shell. Cette instanciation est encore une fois permise par la référence ajoutée au projet.
  • A la suite du code VBA, ajouter les instructions suivantes :
...
Set commande = CreateObject("Shell.Application")
Set source = commande.Namespace(cheminFichier).Items
...


Grâce à lafonction CreateObject, nous instancions la classe Shell. C'est ainsi que l'objet commande initialisé de la sorte, offre la collection héritée Items de l'objet parent Namespace appliquée sur l'archive compressée cheminFichier. Notre objet source initialisé de cette manière, est désormais en mesure de piloter ce fichier compressé téléchargé pour le faire parler.

Décompresser l'archive
C'est le même objet paramétré (Namespace) que nous allons maintenant exploiter pour atteindre une méthode permettant de décompresser l'archive représentée par l'objet source.
  • Toujours à la suite du code VBA, ajouter la commande suivante :
...
commande.Namespace(dossier).CopyHere source
...


C'est donc la méthode CopyHere qui permet d'extirper de l'archive (source) tous les éléments qu'elle contient, dans le dossier de l'application (dossier).

Détruire les objets inutilisés
Comme vous le savez, pour coder proprement, les objets qui ne sont plus utilisés doivent être détruits à l'issue du processus.
  • A la fin du code, ajouter les deux instructions VBA suivantes :
...
Set commande = Nothing
Set source = Nothing
...


C'est en réinitialisant (Set) les objets à Nothing, que nous les enlevons de la mémoire.

Appeler la fonction de décompression
Bien entendu, cette fonction de décompression doit être appelée après le téléchargement.
  • Pour cela, il suffit d'annuler le commentaire (apostrophe) dans la procédure telecharger_Click,
...
flux.SaveToFile chemin, 2
flux.Close
decompresser chemin, CurrentProject.Path & "\"
Else
MsgBox "Une erreur est survenue"
...


Comme nous l'avons évoqué, nous lui passons le chemin d'accès à l'archive et à celui du dossier de l'application Access.

Décompresser le fichier téléchargé
Il ne nous reste plus qu'à tester ce code VBA pour le moins original mais pour autant relativement simple.
  • Enregistrer les modifications (CTRL + S) et basculer sur le formulaire Access (ALT + Tab),
  • Cliquer de nouveau sur le bouton de téléchargement situé dans l'entête du formulaire,
  • Afficher alors le contenu du dossier de téléchargement dans l'explorateur Windows,
Décompresser un fichier téléchargé en VBA Access

Comme vous pouvez l'apprécier, le fichier compressé téléchargé est cette fois accompagné du fichier de la base de données qu'il héberge. Grâce à cette avancée, dans le prochain volet, nous pourrons nous connecter à ses enregistrements pour les importer dans la base de données en cours.

 
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