Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Apprendre à gérer vos pièces jointes depuis Access avec FileDialog
Un billet de blog de Denis Hulo

Le , par User

0PARTAGES

On décrit dans ce billet une méthode pour gérer vos pièces jointes, consistant à enregistrer les chemins de vos fichiers dans la base Access plutôt que d'utiliser un champ de type pièce jointe.

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

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)

Paramètres 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
... ... ...
Par commodité, on utilise par la suite dans le code VBA du Late Binding, qui ne nécessite pas de référencement de librairie.

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
III.2 - T_PieceJointe

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
IV - Interface Access

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
Private 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(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

Une erreur dans cette actualité ? Signalez-le nous !