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

User

[Actualité] Gérer vos pièces jointes depuis Access avec FileDialog

Note : 6 votes pour une moyenne de 3,67.
par , 11/03/2020 à 21h50 (4105 Affichages)
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.

Nom : F_Fiche.jpeg
Affichages : 9925
Taille : 147,7 Ko


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

Nom : Pièces-jointes.jpg
Affichages : 8661
Taille : 94,8 Ko

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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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

Nom : Choix-Dossier.jpg
Affichages : 8494
Taille : 29,9 Ko


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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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

Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Viadeo Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Twitter Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Google Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Facebook Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Digg Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Delicious Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog MySpace Envoyer le billet « Gérer vos pièces jointes depuis Access avec FileDialog » dans le blog Yahoo

Mis à jour 07/07/2022 à 13h59 par User

Catégories
Access , VBA

Commentaires

  1. Avatar de Baptou88
    • |
    • permalink
    Merci !
  2. Avatar de User
    • |
    • permalink
    Citation Envoyé par Baptou88
    Merci !
    Merci pour ce retour
  3. Avatar de Cedross
    • |
    • permalink
    Très pratiques… on peut l'avoir en téléchargement pour l'adapter???... Merci
  4. Avatar de esamy
    • |
    • permalink
    Bonjour,

    Merci pour cet article. Il y a un point seulement sur lequel je bute : comment faire pour insérer les boutons de commandes : Choisir, Ouvrir, ... dans la feuille de données.
    D'avance merci
  5. Avatar de User
    • |
    • permalink
    Citation Envoyé par esamy
    Bonjour,

    Merci pour cet article. Il y a un point seulement sur lequel je bute : comment faire pour insérer les boutons de commandes : Choisir, Ouvrir, ... dans la feuille de données.
    D'avance merci
    Bonjour,

    En fait le sous-formulaire inséré dans le formulaire principal n'est pas en mode feuille de données. Son affichage par défaut est en mode formulaires continus (cf. propriété "affichage par défaut" du sous-formulaire)

    Une fois en mode continu, vous pouvez ajoutez dans la section détail du sous-formulaire des contrôles zone de texte ou bouton de commande. L'en-tête servant à mettre les étiquettes des contrôles zone de texte ou autre.

    Cdlt,
  6. Avatar de esamy
    • |
    • permalink
    Citation Envoyé par User
    Bonjour,

    En fait le sous-formulaire inséré dans le formulaire principal n'est pas en mode feuille de données. Son affichage par défaut est en mode formulaires continus (cf. propriété "affichage par défaut" du sous-formulaire)

    Une fois en mode continu, vous pouvez ajoutez dans la section détail du sous-formulaire des contrôles zone de texte ou bouton de commande. L'en-tête servant à mettre les étiquettes des contrôles zone de texte ou autre.

    Cdlt,

    Ok Un grand merci. Top !
    Et surtout quelle réactivité !!!