formateur informatique

Archiver les fichiers d'un dossier dans une base de données

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Archiver les fichiers d'un dossier dans une base de données
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 :


Enrichir une table avec un dossier

Dans une formation passée, nous avions appris à générer automatiquement un diaporama PowerPoint en fonction des informations contenues dans une table Access et tout cela, grâce au code VBA. Mais la question qui se posait était de savoir comment enrichir dynamiquement la table elle-même, pour que le diaporama évolue automatiquement. C'est le cas que nous proposons de résoudre ici.

Base de données Access à télécharger
Pour le développement de la solution, nous devons tout d'abord récupérer les travaux qui avaient permis de générer ces diaporamas dynamiques. Comme vous pouvez le voir, le fichier de la base de données est accompagné de deux sous dossiers. Ils hébergent des photos destinées à nourrir les diaporamas à générer.
  • Double cliquer sur le fichier de la base de données pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation, double cliquer sur le formulaire fExport pour l'exécuter,
Formulaire Access pour générer des diaporama PowerPoint en VBA

Ce formulaire offre deux boutons. Le premier doit permettre à l'utilisateur de désigner un dossier contenant des photos. Dès lors, le code VBA Access doit remplir la table archives avec les titres et noms de fichiers de ces photos. Le deuxième bouton est déjà fonctionnel puisqu'issu d'un développement précédent. Mais il est en attente d'une information. Il s'agit du chemin d'accès au dossier choisi pour lancer la génération du diaporama en fonction des données archivées dans la table.

La variable publique
Pour débuter, nous avons besoin d'une variable publique capable de mémoriser le chemin d'accès au dossier choisi, pour qu'il puisse être transmis entre les deux procédures associées aux deux boutons.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
Nous basculons ainsi dans la vue en conception du formulaire.
  • Réaliser le raccourci clavier ALT + F11 pour afficher l'éditeur VBA Access,
  • En haut de la feuille de code, après les deux premières instructions, ajouter la ligne suivante :
Option Compare Database
Option Explicit

Dim chemin As String

Private Sub Parcourir_Click()
...


La procédure et ses variables
Maintenant, nous devons déclencher un code au clic sur le premier bouton du formulaire. Son rôle sera notamment de purger la table pour pouvoir y insérer les nouvelles informations, relatives aux fichiers contenus dans le dossier désigné. Mais pour cela, nous devons commencer par déclarer les variables utiles.
  • Revenir sur le formulaire en conception,
  • Cliquer sur le premier bouton pour le sélectionner,
  • Activer l'onglet Evénement de sa feuille de propriétés,
  • Cliquer alors 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,
De cette manière, nous revenons dans l'éditeur VBA Access mais cette fois, entre les bornes de la procédure événementielle cible_Click. cible est le nom du bouton. Ce code se déclenchera au clic sur ce dernier.
  • Dans les bornes de cette procédure, ajouter les déclarations de variables suivantes :
...
Dim chemin As String

Private Sub cible_Click()
Dim boite As FileDialog
Dim objetFichier As Object: Dim leDossier As Object: Dim chaqueFichier As Object
Dim base As Database: Dim requete As String: Dim nomFichier As String

...


Tout d'abord et sachez-le, les références à PowerPoint et Office sont déjà attachées au projet. Pour le constater, il vous suffit de déployer le menu Outils et de choisir la rubrique Références. Nous déclarons tout d'abord un objet de type FileDialog pour instancier par la suite la classe des boîtes de dialogue Office standard. C'est grâce à cet objet que nous offrirons à l'utilisateur une boîte de dialogue lui permettant de désigner un dossier du disque. Ensuite, nous déclarons trois variables objets (As Object). Elles serviront à manipuler les fichiers et les dossiers du système pour notamment parcourir tous les fichiers contenus dans le dossier choisi par l'utilisateur. Puis, nous déclarons une variable de base de données (As Database) pour prendre possession de la base de données en cours. En effet, grâce à la variable qui suit (requete), nous allons construire une requête, à exécuter en boucle, pour insérer les informations des fichiers récoltés dans la table source. Enfin, la variable nomFichier sera utilisée pour mémoriser les noms des fichiers parcourus, purgés de leurs caractères illicites.

Initialiser les objets
Nous pouvons maintenant initialiser certaines variables notamment pour prendre possession de la base de données en cours, des boîtes de dialogue standard et des fichiers et dossiers du disque.
  • Après la déclaration des variables, ajouter les instructions VBA suivantes :
...
Set base = CurrentDb()
requete = "DELETE * FROM archives"
base.Execute requete
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)

If chemin <> "" Then
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)

End If
...


Tout d'abord, grâce à la fonction VBA Access CurrentDb, nous initialisons (Set) l'objet base sur la base de données en cours. Dès lors, avec la méthode héritée Execute, nous déclenchons une requête suppression sur la table archives pour la vider de tous ses enregistrements.

Ensuite, nous exploitons la propriété FileDialog de l'objet Application avec le paramètre msoFileDialogFolderPicker pour initialiser (Set) l'objet boite. C'est ainsi qu'il hérite des propriétés et méthodes pour piloter les boîtes de dialogue standards permettant de naviguer au travers des dossiers du disque. Avec sa méthode héritée Show, nous l'affichons à l'écran. Avec sa collection SelectedItems, nous récupérons le (1) dossier choisi par l'utilisateur.

Puis, nous testons si le chemin a bien été défini (If chemin <> "" Then) avant d'instancier (CreateObject) la classe permettant de manipuler les fichiers et les dossiers (scripting.filesystemobject). Dès lors, la variable objetFichier offre la méthode GetFolder pour permettre à la variable leDossier de représenter le répertoire dont le chemin est passé en paramètre de la méthode.

Parcourir les fichiers du dossier
Grâce à ces déclarations et initialisations, nous sommes désormais en mesure de passer en revue tous les fichiers du dossier choisi. Pour cela, nous avons besoin d'une boucle For Each.
  • A la suite, dans l'instruction conditionnelle, ajouter les lignes VBA suivantes :
...
For Each chaqueFichier In leDossier.Files
If (Right(chaqueFichier, 4) = ".jpg") Then
nomFichier = Mid(Replace(Replace(chaqueFichier.Name, "-", " "), ".jpg", ""), 4)
nomFichier = UCase(Left(nomFichier, 1)) & Mid(nomFichier, 2)

End If
Next chaqueFichier
...


Grâce à la variable objet chaqueFichier, nous parcourons la collection des fichiers (Files) contenus dans le dossier désigné par l'utilisateur (leDossier). Nous vérifions tout d'abord que l'extension est bien celle d'une image en contrôlant les quatre derniers caractères (Right(chaqueFichier, 4) = ".jpg"). Nous exploitons la fonction Mid pour sauter les quatre premiers numéros en préfixe. Avec l'imbrication des fonctions Replace, nous remplaçons les tirets par des espaces et nous supprimons l'extension. Nous exploitons ensuite la fonction UCase pour passer la première lettre du nom (Left(nomFichier, 1)) en majuscule, tout en conservant le reste en minuscules (Mid(nomFichier, 2)).

Ajouter les données de fichiers dans la table
Chacun de ces fichiers doit maintenant être inséré tour à tour dans la table archives avec le nom de l'image qui l'accompagne. En effet, la table archives est faite de deux champs, a_titre et a_image plus le champ de la clé primaire qui s'incrémente automatiquement. Nous devons donc exécuter une classique requête ajout sur cette table.
  • A la suite du If de la boucle For Each, ajouter les deux lignes VBA suivantes :
...
requete = "INSERT INTO archives (a_titre, a_image) VALUES ('" & nomFichier & "','" & chaqueFichier.Name & "')"
base.Execute requete
...


Dans la table archives, pour les champs a_titre et a_image, nous insérons le nom de fichier retravaillé avec le nom originel du fichier image. Puis, nous exécutons cette requête grâce à la méthode Execute de l'objet base qui désigne la base de données en cours. Comme cette action est produite dans la boucle For Each sur chaque fichier, nous devrions obtenir l'archivage des informations de tous les fichiers contenus dans le dossier désigné.

Libérer les ressources
Le code VBA est terminé mais il nous reste encore à détruire les variables objets qui ne sont plus utilisées, pour libérer la mémoire.
  • Après l'instruction conditionnelle parente, ajouter les lignes VBA suivantes :
...
End If

base.Close
Set base = Nothing
Set objetFichier = Nothing
Set leDossier = Nothing
Set chaqueFichier = Nothing

End Sub


La méthode Close de l'objet base permet de fermer proprement l'instance de la base de données ouverte. Ensuite et classiquement, c'est la réinitialisation (Set) de chaque objet à Nothing qui permet de les détruire tour à tour.

Il est temps de tester le code.
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire (ALT + Tab),
  • Exécuter ce dernier en enfonçant la touche F5 du clavier,
  • Désigner par exemple le sous dossier sources livré avec le fichier compressé et valider,
Maintenant, si vous ouvrez la table archives, vous constatez que toutes les informations retravaillées des fichiers présents dans le sous dossier, ont bien été importées.

Importer les fichiers d-un dossier dans une table en VBA Access

Si vous copiez les trois photos du dossier sources_bis dans le sous dossier sources et que vous réitérez le processus, vous constatez effectivement que toutes les nouvelles données sont bien archivées dans la table, avec les anciennes.

Enfin, si vous lancez le diaporama en cliquant sur le second bouton du formulaire, il intègre bien évidemment toutes les données archivées pour créer dynamiquement une présentation à partir des photos du dossier, sans en oublier aucune.

 
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