On utilise pour cela FileDialog qui permet de choisir un fichier ou un dossier sur le disque à l'aide d'une boîte de dialogue.
Cette méthode a l'avantage de ne pas alourdir la base en gardant les fichiers à l'extérieur, mais nécessite cependant de prendre certaines précautions.
I - Précautions à prendre
I.1 - Enregistrer toutes vos pièces jointes dans un même dossier
Ce répertoire principal destiné à regrouper vos fichiers peut bien entendu contenir des sous-dossiers.
Cela permet une meilleure gestion de vos fichiers, et, notamment, en cas de déplacements de vos fichiers, par exemple dans un dossier partagé situé sur un serveur, de mettre à jour facilement les chemins des fichiers enregistrés dans la base.
Exemple :
On remplace l'ancien dossier "C:\Gestion Pièces jointes\Pièces jointes\" par le nouveau "C:\Data\Gestion Pièces jointes\Pièces jointes\" dans les chemins des fichiers :
ancien chemin: C:\Gestion Pièces jointes\Pièces jointes\Courrier.docx
nouveau chemin: C:\Data\Gestion Pièces jointes\Pièces jointes\Courrier.docx
nouveau chemin: C:\Data\Gestion Pièces jointes\Pièces jointes\Courrier.docx
I.2 - Utiliser une table pour enregistrer l'adresse du dossier contenant vos fichiers
C'est utile pour accéder directement au dossier depuis Access, ou pour changer facilement les chemins des fichiers saisis, en cas de déplacement de ceux-ci dans un autre répertoire.
II - FileDialog
Il permet, entre autres, à l'utilisateur de sélectionner un fichier ou un dossier dans une boîte de dialogue.
Synthaxe VBA
applicationn.FileDialog (fileDialogType)
applicationn.FileDialog (fileDialogType)
Paramètre | Valeur de la constante | Description |
msoFileDialogFilePicker | 3 | Permet à l'utilisateur de sélectionner un fichier |
msoFileDialogFolderPicker | 4 | Permet à l'utilisateur de sélectionner un dossier |
... | ... | ... |
III - Tables principales
III.1 - T_Dossier
Table permettant d'enregistrer le chemin du dossier contenant les fichiers.
Nom du champ | Type du champ | Description |
CheminDossier | Texte | Chemin du dossier contenant les pièces jointes |
Permet d'enregistrer les chemins des pièces jointes.
Nom du champ | Type du champ | Description |
IdPieceJointe | Numéro-auto | Identifiant de la pièce jointe |
IdFiche | Entier long | Identifiant de la fiche associée |
CategoriePieceJointe | Texte | Catégorie de la pièce jointe (Document, Tableau, Image, Vidéo, etc..) |
CheminFichier | Texte | Chemin du fichier sur le disque |
Un formulaire principal pour sauvegarder les fiches clients et un sous-formulaire pour enregistrer les chemins des fichiers associés à ces fiches.
V - Sous-formulaire pour enregistrer les pièces jointes
Il est relié à la table T_PieceJointe et permet d'enregistrer les chemins des fichiers dans cette table. Le champ IdFiche sert à faire le lien avec le formulaire principal.
Boutons de commande pour gérer les pièces jointes :
- Choix de la pièce jointe ;
- Ouverture de la pièce jointe ;
- Suppression de la pièce jointe.
V.1 - Procédure sur clic du bouton permettant de choisir le fichier sur le disque
On choisit le fichier sur le disque avec FileDialog, et on met à jour le champ avec le chemin du fichier sélectionné :
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | Private Sub CmdChoisirFichier_Click() Dim fd As Object ' Office.FileDialog ' Créer un objet FileDialog pour choisir un fichier Set fd = Application.FileDialog(3) ' msoFileDialogFilePicker : 3 ' Titre de la boîte de dialogue fd.Title = "Sélectionnez un fichier..." ' Ne pas autoriser la sélection multiple ' (donc 1 seul fichier est sélectionnable à la fois) fd.AllowMultiSelect = False ' Effacer les filtres précédents fd.Filters.Clear ' Afficher la boîte de dialogue If fd.Show() Then ' on a sélectionné un fichier Me.CheminFichier = fd.SelectedItems(1) ' on met à jour le champ avec le chemin sélectionné End If ' On libère la variable objet Set fd = Nothing End Sub |
V.2 - Procédure sur clic du bouton pour ouvrir le fichier enregistré sur le disque
On ouvre, avec la fonction Shell, le fichier dont le chemin est enregistré dans le champ CheminFichier :
Code : | Sélectionner tout |
1 2 3 4 5 | Private Sub CmdOuvrirFichier_Click() If Nz(Me.CheminFichier.Value, "") <> "" Then ' si un chemin est enregistré dans le champ CheminFichier Shell "explorer.exe " & Chr(34) & Me.CheminFichier.Value & Chr(34), vbMaximizedFocus ' on ouvre le fichier avec son chemin End If End Sub |
VI - Formulaire pour choisir ou ouvrir le dossier contenant les fichiers
VI.1 - Procédure sur clic du bouton de commande permettant de choisir un nouveau dossier avec FileDialog
On choisit le dossier sur le disque avec FileDialog, et on met à jour le champ avec le chemin du dossier sélectionné :
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Private Sub CmdChoisirDossier_Click() Dim fd As Object ' Office.FileDialog Dim sCheminDossier As String ' Créer un objet FileDialog pour sélectionner un dossier Set fd = Application.FileDialog(4) ' msoFileDialogFolderPicker : 4 ' Titre de la boîte de dialogue fd.Title = "Sélectionnez un dossier..." ' Ne pas autoriser la sélection multiple ' (donc 1 seul fichier est sélectionnable à la fois) fd.AllowMultiSelect = False ' Effacer les anciens filtres fd.Filters.Clear ' Afficher la boîte de dialogue If fd.Show() Then ' si un choix a été effectué sCheminDossier = Nz(Me.CheminDossier, "") ' on copie le chemin du dossier dans la variable Me.CheminDossier = fd.SelectedItems(1) ' le dossier sélectionné devient le nouveau UpdateCheminsFichiers sCheminDossier, Me.CheminDossier ' on met à jour les chemins des fichiers dans la base End If ' On libère la mémoire Set fd = Nothing End Sub |
Si les fichiers sont sur un serveur, il faut que le chemin du dossier soit de la forme \\NomDuServeur\NomDuPartage\Dossier\.
VI.2 - Procédure sur clic du bouton de commande permettant d'ouvrir le dossier contenant les fichiers
On ouvre, avec la fonction Shell, le dossier dont le chemin est enregistré dans le champ CheminDossier :
Code : | Sélectionner tout |
1 2 3 4 5 | Private Sub CmdOuvrirDosssier_Click() If Nz(Me.CheminDossier.Value, "") <> "" Then ' si un chemin est enregistré dans le champ CheminDossier Shell "explorer.exe " & Chr(34) & Me.CheminDossier.Value & Chr(34), vbMaximizedFocus ' on ouvre le dossier avec son chemin End If End Sub |
VI.3 - Procédure de mise à jour des chemins des fichiers :
Si vous souhaitez déplacer vos fichiers dans un autre répertoire, une fois le choix du dossier effectué, il faudra exécuter une procédure pour mettre à jour les chemins des fichiers enregistrés dans la base, en remplaçant dans ces chemins l'ancien dossier par le nouveau.
Code VBA : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | Sub UpdateCheminsFichiers(AncienDossier As String, NouveauDossier As String) Dim sSQL As String Dim db As DAO.Database Set db = CurrentDb ' référence à la base courante sSQL = "Update T_PieceJointe Set CheminFichier=Replace(nz(CheminFichier,""""),""" & AncienDossier & """ , """ & NouveauDossier & """)" db.Execute sSQL, dbFailOnError ' Exécute la requête permettant de remplacer l'ancien dossier par le nouveau dans les chemins des fichiers enregistrés dans la base Set db = Nothing ' on libère la variable End Sub |