IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

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.

544429


V - Sous-formulaire pour enregistrer les pièces jointes

544421

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é :

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 :

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

545015


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é :

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 :

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.

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

Vous avez lu gratuitement 5 812 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

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