Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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,
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,
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 à la
ré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 à la
fonction 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 à la
fonction 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,
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.