Banque d’images : charger une image unique
Voici un nouvel article qui complète la saga « Gérer une banque d’images sous Access » (cliquez ici pour les épisodes précédents !). Un lecteur a souhaité savoir comment intégrer une seule image à la fois dans la banque d’images, plutôt que toutes les images d’un dossier. Voici une façon de faire…
Mise en place du bouton
Par rapport aux articles précédents, j’ai simplement rajouté le bouton « Charger une image unique« , dans l’en-tête du formulaire.
- Ce bouton est construit sans l’Assistant. En d’autres termes : avant d’utiliser l’icône Bouton du ruban d’Access 2007 (ou de la boîte à outils d’Access 2003), cliquez sur l’icône « Utiliser les Assistants de contrôle » (la baguette magique) pour la désactiver.
- Faites ensuite apparaître les propriétés du bouton, et nommez-le
btnImageUnique
(propriétéNom
). - Sous l’onglet
Evénement
de la feuille de propriétés, réglez l’événementSur clic
surPropriété événementielle
. - Cliquez sur les points de suspension à droite de l’événement pour passer dans le code VBA, et recopiez ce qui suit.
Le code du bouton
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
' --- ' SELECTION D'UNE SEULE IMAGE ' --- ' Private Sub btnImageUnique_Click() Dim fd As Office.FileDialog ' Boîte de dialogue Fichier/Ouvrir On Error Resume Next Set fd = Application.FileDialog(msoFileDialogOpen) ' Titre de la boîte fd.Title = "Sélectionnez une image..." ' Un seul fichier à la fois fd.AllowMultiSelect = False ' Liste des fichiers acceptés fd.Filters.Clear fd.Filters.Add "Fichiers JPG", "*.jpg" fd.Filters.Add "Fichiers GIF", "*.gif" fd.Filters.Add "Fichiers PNG", "*.png" fd.Filters.Add "Fichiers BMP", "*.bmp" fd.Filters.Add "Tous les fichiers", "*.*" fd.FilterIndex = 1 If fd.Show() Then ' Se placer sur un enregistrement vierge DoCmd.GoToRecord , , acNewRec ' Renseigner les informations sur l'image Me.Nom_Image = FilenameWithoutExt(fd.SelectedItems(1)) Me.Nom_Fichier = Filename(fd.SelectedItems(1)) Me.txtRepBase = FilePath(fd.SelectedItems(1)) ' Sauvegarder DoCmd.RunCommand acCmdSaveRecord ' Forcer l'affichage de l'image Chemin_AfterUpdate End If Set fd = Nothing End Sub |
Quelques compléments
- Le code du bouton repose principalement sur l’objet
FileDialog
, qui est détaillé sur cette autre page du blog. Il faut donc ajouter, dans votre base de données, une référence à la bibliothèque Microsoft Office Object Library. Si vous complétez la base de données des autres articles, vous avez déjà cette référence. - Pour manipuler les noms de fichiers, j’utilise aussi un certain nombre de fonctions qui sont décrites sur cette page (sans quoi, les fonctions
FilenameWithoutExt
,Filename
etFilePath
ne marcheront pas).
Angel > En fait, les 2 problèmes sont liés… à cause de moi… 🙂
Me.txtRepBase
parMe.Dossier
. Ça alimentera correctement le champDossier
de la table.txtRepBase
est utilisé comme dossier de base, mais dans d’autres articles.Bonsoir,
J’ai 2 questions
1_ Lorsque je charge une image unique, la cellule « dossier » de la tblImages n’est pas renseignée et empêche l’affichage de l’image.
Je n’ai pas de message d’erreur
2_ Dans le « frmImages » la zone » txtRepBase » affiche : = »C:UsersPublicPicturesSample Pictures »
Quel est fonction de cette zone texte que je vois reprise dans les Module
Merci
Cordialement