Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Propriétés des fichiers en VBA Access
Avec l'astuce précédente, nous avons vu comment
remplir une table des
noms de fichiers placés dans un dossier désigné par l'utilisateur, par le biais d'une boîte de dialogue. Sur cette lancée, nous souhaitons maintenant démontrer comment
lister les
attributs et
propriétés de chacun de ces
fichiers récupérés dans une
table .
Sur l'exemple illustré par la capture, après avoir désigné un
dossier du disque à l'aide d'un bouton dédié, l'utilisateur récolte
tous les noms de fichiers du dossier avec leurs
attributs , dans un
sous-formulaire .
Base de données Access à télécharger
Pour la démonstration de cette technique, nous suggérons d'appuyer l'étude sur une
base de données Access hébergeant un
formulaire avec un
bouton , déjà associé à un
code VBA pour désigner un
dossier et le
parcourir .
Comme l'indique le
volet de navigation sur la gauche de l'écran, cette
base de données est constituée d'une
table , d'une
requête , d'un
formulaire et d'un
sous-formulaire . La table est destinée à accueillir les informations des fichiers. La requête agira alors sur cette table pour réorganiser l'information avec des tris, dont un sur le type de fichier pour les regrouper par catégorie. Cette requête servira alors de source au sous-formulaire pour restituer les données importées sur le formulaire parent. Toute cette architecture est déjà construite.
Mais ce n'est pas tout, un
code VBA que nous avons déjà développé ensemble à plusieurs reprises, existe. Il offre une
boîte de dialogue standard à l'utilisateur pour que celui-ci puisse désigner un
dossier à scruter. Dès lors, c'est une boucle qui parcourt tous les fichiers de ce dossier. Nous allons le constater.
Dans le volet de navigation, cliquer droit sur le formulaire nommé fExport ,
Dans le menu contextuel, choisir de l'ouvrir en mode création ,
Sur le formulaire en conception, cliquer sur le bouton rouge à l'icône du dossier,
Dès lors, activer l'onglet Evénement de sa feuille de propriétés ,
Puis, cliquer sur le petit bouton associé à son événement Au clic ,
C'est ainsi que nous basculons dans l'
éditeur VBA Access entre les bornes de la
procédure événementielle cible_Click qui est effectivement déjà implémentée.
Cible est le nom du bouton.
Deux parties sont marquantes. Il s'agit dans un premier temps de l'instanciation de la classe pour piloter une
boîte de dialogue d'Office :
...
Set boite = Application.FileDialog(msoFileDialogFolderPicker)
If boite.Show Then chemin = boite.SelectedItems(1)
...
Il s'agit dans un deuxième temps de l'instanciation de la classe pour pouvoir
parcourir les fichiers contenus dans le dossier désigné par cette boîte de dialogue :
...
Set objetFichier = CreateObject("scripting.filesystemobject")
Set leDossier = objetFichier.getfolder(chemin)
For Each chaqueFichier In leDossier.Files
nomFichier = chaqueFichier.Name
Next chaqueFichier
...
Les variables pour les propriétés
Pour poursuivre le développement, nous devons commencer par ajouter certaines
déclarations de variables .
Dans la partie déclarative de la procédure, ajouter les déclarations de variables suivantes :
...
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
Dim fTaille As Long: Dim fDate As Date: Dim fType As String: Dim fAttr As Integer
Set base = CurrentDb()
...
Il s'agit simplement de variables destinées à récolter les
attributs de fichiers que nous allons parcourir. Elles sont typées en conséquence, au format date pour la date de création par exemple.
Récolter les attributs de fichiers
Maintenant que les variables existent, nous allons pouvoir les exploiter pour récolter ces
attributs , d'autant que la classe permettant de manipuler les fichiers du disque, est déjà instanciée.
Dans la boucle For Each , après la récupération du nom, ajouter les instructions VBA suivantes :
...
For Each chaqueFichier In leDossier.Files
nomFichier = chaqueFichier.Name
fTaille = chaqueFichier.Size
fDate = chaqueFichier.DateLastModified
fType = chaqueFichier.Type
fAttr = chaqueFichier.Attributes
Next chaqueFichier
...
Le nom du fichier est déjà récupéré dans la
variable nomFichier . Ensuite, ce sont des propriétés spécifiques de l'
objet chaqueFichier qui permettent de récolter les attributs qui nous intéressent.
Remplir la table des fichiers et de leurs attributs
Et maintenant que ces attributs sont stockés, à chaque passage dans la boucle, donc pour chaque fichier analysé, nous devons en profiter pour insérer ces renseignements dans la table. Pour cela et comme vous le savez, nous devons engager une
requête Insert Into .
A la suite du code de la boucle, ajouter les instructions VBA suivantes :
...
fTaille = chaqueFichier.Size
fDate = chaqueFichier.DateLastModified
fType = chaqueFichier.Type
fAttr = chaqueFichier.Attributes
requete = "INSERT INTO fichiers (f_nom, f_taille, f_date, f_type, f_attr) VALUES ('" & nomFichier & "'," & fTaille & ",#" & fDate & "#,'" & fType & "'," & fAttr & ")"
base.Execute requete
Next chaqueFichier
...
Dans la table nommée
fichiers , nous listons tous les champs à enrichir dans les parenthèses. Pour chacun de ces champs et dans le même ordre, nous listons (VALUES) les données à y insérer. Attention à l'alternance des simples et doubles côtes ('" & ... & "') dans le cas de données textuelles. De plus et il s'agit d'une spécificité, une information de
date doit être encadrée par le symbole du Sharp (#" & ... & "#). Les informations numériques quant à elles (fTaille et fAttr) ne nécessitent aucun artifice.
Rafraichir la liste des fichiers sur le formulaire
Une dernière intervention est nécessaire. Une fois la table remplie de tous les fichiers avec leurs attributs, pour que la synthèse s'affiche sur le formulaire parent, le sous-formulaire doit automatiquement être actualisé. Et pour cela, nous pouvons exploiter la
méthode Requery de l'
objet VBA Access DoCmd .
Après l'instruction conditionnelle qui englobe la boucle, ajouter la ligne VBA suivante :
...
base.Execute requete
Next chaqueFichier
End If
DoCmd.Requery
base.Close
Set base = Nothing
...
Il est temps de tester le
code VBA .
Enregistrer les modifications (CTRL + S) et basculer sur le formulaire (ALT + Tab),
L'exécuter avec la touche F5 du clavier par exemple,
Cliquer sur le bouton à l'icône du dossier,
Dans la boîte de dialogue qui suit, choisir un dossier contenant des fichiers,
Puis, valider par Ok pour revenir sur le formulaire,
Comme vous pouvez l'apprécier, tous les fichiers du dossier désigné sont parfaitement importés et regroupés avec leurs attributs. Concernant l'avant dernier champ, ce sont des codes numériques qui définissent le statut du fichier. Par exemple, le code 32 comme ici signifie que le fichier a été modifié depuis la dernière sauvegarde et que son statut est en lecture/écriture.