Gérer une banque d’images dans Access
Comment gérer une banque d’images dans Access ?
On pourrait penser que le type de champ Liaison OLE
ou Objet OLE
est approprié pour gérer des images dans Access, puisqu’il agit comme « container générique » pour le texte, l’image, le son… Le problème est que le stockage d’images dans une base de données va considérablement augmenter la taille de la base.
L’idée est donc de placer les images dans un dossier spécifique du disque dur, et de faire référence à ce dossier depuis Access.
Mise en place de la table
La table d’exemple est composée de 4 champs :
Nom du champ | Type de données | Description |
Id Image |
NuméroAuto | Numéro de l’image attribué automatiquement par Access. |
Nom Image |
Texte, 30 caractères | Nom de l’image en clair. |
Nom Fichier |
Texte, 255 caractères | Le nom du fichier image (sans le chemin d’accès complet). Par exemple : logo.gif |
Dossier |
Texte, 255 caractères | Le nom du dossier contenant l’image. Par exemple : C:UsersHervéPictures Ce dossier peut se terminer ou non par un . |
C:Documents and SettingsUTILISATEURMes documents
, alors que sur Vista ils sont plutôt C:UsersUTILISATEURDocuments
. Merci Vista, de faire enfin plus efficace sur ce point !
Le formulaire
Le formulaire est construit à partir de la table tblImages
. Il en reprend donc les 4 champs. A ces 4 champs, on ajoute manuellement 1 champ supplémentaire, qui est un objet Image, nommé imgApercu
.
Quelques remarques :
- Le champ
imgApercu
, de type Image, affichera l’image, une fois qu’elle sera chargée depuis le disque (et non lue dans la table). - Ce champ
imgApercu
contient une image quelconque visible en mode Création de formulaire. Il faut au moins cette image pour que le champ existe, sur les anciennes versions d’Access. - La propriété
Mode d'affichage
du champimgApercu
a été réglée surZoom
au lieu deDécoupage
, de façon à ce que chaque image s’adapte à la zone rectangulaire. - Si le formulaire est tabulaire (propriété
Format d'affichage
égale àContinu
au lieu deMode simple
), l’image est identique pour tous les enregistrement affichés, et elle change pour tous à chaque déplacement. En résumé : ça ne marche pas sur un formulaire tabulaire !
Le code Visual Basic
Comme aucune image n’est stockée dans la table, il faut un peu de code VB pour lire l’image du disque et la placer dans le champ imgApercu
. Le meilleur endroit pour placer ce code est l’événement Après Màj
du champ Nom Fichier
. De cette façon, à chaque fois qu’on modifie le nom du fichier image, l’image est (ré)affichée.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Private Sub Chemin_AfterUpdate() Dim strCheminComplet As String On Error Resume Next If IsNull(Me![Nom Fichier]) Then Me.imgApercu.Picture = "" Else ' Chemin d'accès à l'image = Répertoire de base + Nom de l'image strCheminComplet = AddBackslash(Nz(Me![Dossier], "")) & Me![Nom Fichier] ' Charger l'image Me![imgApercu].Picture = IIf(strCheminComplet = "", "", strCheminComplet) End If End Sub |
AddBackSlash()
qui n’existe pas en VBA. Vous trouverez cette fonction sur cette page du grenier (et vous la recopierez, comme le reste, dans un module standard de votre base de données).Quelques finitions
Ceci fonctionne bien si l’on change le nom de l’image. Mais il faut aussi gérer le fait de se déplacer d’une image à une autre (d’un enregistrement de table à un autre), sinon l’image affichée sera toujours la même. Pour ceci, il faut recopier le code VB dans l’événement Sur activation
du formulaire, ou plus simplement, placer la ligne suivante dans ce même événement :
1 2 3 |
Private Sub Form_Current() Chemin_AfterUpdate End Sub |
Et maintenant, l’impression !
Une fois votre formulaire au point, vous souhaiterez peut-être imprimer le résultat sur papier. Il faut donc pour cela concevoir un état (rappelons qu’un formulaire n’a pas suffisamment d’options pour gérer l’impression, il n’est tout simplement pas fait pour ça !).
Le principe est le même que précédemment :
- Réalisez par l’assistant un état basé sur la table des images.
- Ajoutez dans la zone Détail de votre état un objet
Image
(pioché dans la boîte à outils). Cette zone fera office de container servant à afficher chaque image. - Via la feuille de propriétés, donnez le nom
imgApercu
à votre objet Image. - Comme sur le formulaire, définissez la propriété
Mode d'affichage
de l’objet Image surZoom
. - Copiez le code ci-dessous dans l’événement
Au formatage
de la section Détail :
1 2 3 4 5 6 7 8 9 10 |
Private Sub Détail_Format( _ Cancel As Integer, _ FormatCount As Integer) Dim strChemin As String On Error Resume Next strChemin = AddBackslash(Me.Dossier) & Me.Nom_Fichier Me.imgApercu.Picture = strChemin End Sub |
Apuka acheter des cartouches d’encre :o)
Merci beaucoup pour ce tuto.
Une petite question concernant le champ Dossier et le chemin d’accès aux photos. Vous écrivez qu’il est possible de modifier le Dossier par une requête mise à jour. Comment feriez-vous pour modifier automatiquement le nom de lecteur dans le chemin d’accès du dossier (C: vers E: ou G:) sans savoir à l’avance qu’elle sera le lettre du lecteur?
Merci encore pour votre aide et vos précieux conseils.
C’est à dire que le champ Dossier pourrait contenir « C:\Test », « E:\Test2 », « G:\Test », et qu’il faudrait tous les remplacer par « T:\Test » ou « T:\Test2 » selon les cas ?
C’est-à-dire que le champ Dossier contient
« C:\Photo\Test », « C:\Photo1\Test1″, C:\Photo1\Test2 », « C:\Photo2\Test3 »
et qu’il faudrait tous les remplacer par
« G:\Photo\Test », « G:\Photo1\Test1″, G:\Photo1\Test2 », « G:\Photo2\Test3 »
ou
« H:\Photo\Test », « H:\Photo1\Test1″, H:\Photo1\Test2 », « H:\Photo2\Test3 »
selon le lecteur choisi (ici la base de donnée est sur clé USB)
En vous remerciant encore pour votre aide.
Quelque chose comme ceci peut faire l’affaire (je suppose qu’on connaît la lettre du lecteur) :
Je n’ai pas de quoi tester, mais on doit être proche du résultat souhaité.
Bonjour Hervé,
Est-ce que vous auriez une solution à ce problème de chemin d’accès? J’ai beau cherché, je ne sais pas vraiment comment le résoudre et je suis loin d’être une star en VBA. Merci beaucoup.
Tom
le logiciel répond a mes besoin dont je vous en remercie mais il y à un tout petit
problème à l’impression je n’est pas la totalité des images que je voudrais imprimer
imprimer est ce que c’est possible de m’aider
Est-ce qu’il y a un message d’erreur ?
Est-ce que le volume des images (leur nombre et/ou leur poids) est important ?
Merci pour cet article qui m’a bcp aidé pour la réalisation d’un catalogue d’articles illustrés par des photos.
J’ai juste un léger problème esthétique: lorsque j’affiche mon état, les photos apparaissent avec des défauts de qualité sous forme d’un léger quadrillage… Que faire? Merci de votre aide.
Pas facile à diagnostiquer dans ce cas… Il se peut que les images soient de qualité inférieure à l’affichage, mais un quadrillage me semble curieux.
Est-ce qu’il y a possibilité de me donner un lien vers un exemple en ligne ?
Bonjour,
Je voudrais pouvoir construire un trombinoscope à partir de ma table des membres. J’en suis aux premiers essais.
J’ai essayé de suivre au plus près la procédure décrite ci-dessus, et je l’ai recommencée à plusieurs reprises sans grand succès, avec toujours le même résultat…
Access affiche une erreur de compilation – Variable ou procédure attendue, et non un module.
Il met une flèche jaune en face du code VB – Private Sub Chemin_AfterUpdate et surligne cette ligne en jaune et par ailleurs il surligne en bleu AddBackSlash.
J’ai bien auparavant intégré dans un module de ma base le code VB AddBackSlash.
Concernant le formulaire, il est en Affichage par défaut en Formulaire Unique. Je n’ai pas trouvé ou ce n’est pas à disposition dans Access 2003 Mode simple (j’utilise un formulaire qui est déjà créé pour la saisie des membres, la Clé Primaire est sur le champ Nom_Prénom, auquel j’ai ajouté les champs Nom de Fichier et Dossier, puis le champ imgApercu).
Quand on met le code VB après MaJ du champ Nom Fichier, je clique sur l’icone 3 petits points et je fait un copier coller de code VB mis à disposition. Faut-il aussi cliquer surl’icone de la petite flèche (à gauche des 3 petits points) et cliquer sur « Procédure événementielle » ?
Je n’aurai pas des photos de tous les membres, aussi je devrai ensuite adapter la base avec la gestion d’enregistrement vide, j’ai vu dans le grenier qu’il existait une procédure à mettre en oeuvre. Est-ce la bonne méthode de travail ?
Merci pour l’aide que vous pourrez m’apporter pour me débloquer.
Le problème doit venir de l’intégration de AddBackSlash. Cet article devrait aider.
Ouala !
Merci Hervé,
Effectivement en chageant le nom du module, tout fonctionne corectement dans le formulaire.
Par ailleurs, je n’ai pas besoin pour l’instant de gérer l’absence de photo pour un membre. Quand il n’y a pas de photo « jointe » le champ imgApercu n’apparait pas ce qui est parfait pour mes besoins. Donc pas d’intégration pour ma part de du code VB pour gérer les photos « vide ».
Je vais donc m’attaquer maintenant à construire l’état, et si possible de la construire sur un type genre impresssion d’étiquette (avoir sur une page 3 colones et autant de lignes que nécessaires) pour gagner en nombre de page.
Encore merci pour ton aide.
Super. Bons tests !
Ca y est j’ai ce que je voulais Merci Hervé.
Mon état est construit sur une requête. La seule difficulté que j’ai rencontrée, c’est qu’il faut bien afficher dans l’état les champs « Nom Fichier » et « Dossier » sinon cela provoque une erreur de compilation avec une donnée introuvable. Comme je ne voulais pas les voir apparaitre, je les ai mis en « blanc » donc invisible à l’impression…
Très cordialement Norbert.
Super. Au lieu d’être en blanc, les champs peuvent aussi être marqués comme
Visible = Faux
, par exemple.bonjour, merci pour ces lumière, Comment peut-on chargé une seule image?
Cet autre article devrait aider. Bonne lecture !
Super utile ! Grand merci !
Merci aussi ! 🙂
zohaxel > Merci ! 🙂
OK, je vais replonger dans la problématique voir si je peux faire qqc. Merci
Bon courage
zohaxel > Non, pas de manque d’infos… mais manque de temps pour répondre 😉
Lorsque les infos à afficher sont présentes dans plusieurs tables (liées), le principe consiste à construire une requête qui reprend les tables utiles (et seulement elles), puis à baser l’état sur cette requête. De cette manière, les champs requis sont fournis par la requête, et disponibles dans l’état.
Pas réponse depuis le temps? Y-a-t-il un manque d’info?
Merci
Bonjour, par exemple
j’ai deux tableaux « nom especes » avec le champ « genre » et « Num_esp » (130 enregistrements) et « tblImages » (630 enregistrements) sur lequel j’ai rajouté un champ « Num_esp » qui correspond donc à l’un des 130 enregistrements. La relation entre les deux tableaux un-à-plusieurs.
Je n’arrive pas à faire ressortir sur l’état « rpt Images » le genre de chaque photos.
Pourriez-vous m’aider?
zohaxel > Oui, c’est sûrement possible, si tu as l’information sur le genre dans un champ ou dans une table associée. Comme je ne connais pas tes structures : où se trouve le genre actuellement ?
Bonjour,
merci bcp pour cette base qui me sers dans mon travail pour gérer plus de 3000 photos d’algues microscopiques. Est-il possible d’afficher uniquement les photos dépendant d’une requête? Dans mon cas, cela me permettrait d’afficher que les espèces d’un certain genre, ce qui ferait déjà un sacré tri.
Alex
Francis > Malheureusement non : vu la gestion de l’événement
Current
sur Access, la technique n’est pas adaptable à un formulaire de type Liste.Bonjour, et d’abord merci : j’ai découvert par hasard il y a deux ou trois ans le post sur « gérer une banque d’image » et je l’utilise tous les jours pour raisons professionnelles. Plus d’images dans ma base de données!
Ah… si… tout de même, j’ai gardé une petite image (que j’appelle « miniature » en format .bmp de 100 x 75 pour chacune des maisons de la base (il y en a 1300 maintenant) J’en ai besoin pour afficher les maisons dans un formulaire de type liste.
Résultat, rien qu’à cause de ces miniatures, la partie « tables » de ma base pèse 420000 ko alors que la même base sans les miniatures pèse 4000 ko !
D’où ma question, est-il possible de supprimer aussi les miniatures et d’afficher les maisons dans un formulaire avec une photo importée du dossier comme expliqué ici dans le cas d’un formulaire unique ?
Céline > Est-ce que des erreurs se produisent à l’exécution ? Si oui, lesquelles ?
Bonjour,
Je souhaite faire attacher une banque d’image et de pdf. votre tutoriel me semble complétement adapter à mes attentes. Le problème est que je n’arrive pas à l’exécuter. Je me suis inspirer de votre base mais mes photos n’apparaissent pas et elle ne changent pas non plus. Serait-ce du code? Si besoin de plus d’explication dite le moi?
Merci
Nicole > Ça dépend de ce qu’on entend par « rattacher », mais a priori oui. Ça peut se faire par « pièce jointe » (sur Access 2007+), par Liaison OLE (déconseillé) ou par lien hypertexte. Il y a plusieurs articles sur le blog concernant ces sujets.
Bonjour,
Est-il possible de rattacher un document « Scanné » a une base Access ?
Merci
Nicole
Mia > S’il s’agit de comparaison graphique de photos – du type « reconnaissance faciale », ou ici « caudale » 🙂 -, Access ne dispose pas d’outils spécifiques, et ce ne sera pas quelque chose de simple… 😉
Mais peut-être que l’idée est surtout de stocker des informations sur les photos ?
Bonjour, je cherche à créer un matching de photo via access. Déjà je suis novice en access et grâce à vous je pourrai éventuellement créer une banque d’images. le fait est qu’il me faudrait comparer des photos de nageoires caudales de baleines à bosses durant l’année puis entre les années. Quelqu’un pourrait-il m’aider. Merci d’avance.
Quelqu’un peut il m’aider pour l’état. J’ai créer un état mais je ne sait pas comment mettre Report_rtp Images. [Copiez le code ci-dessous dans l’événement Au formatage de la section Détail] mais je ne trouve pas sur mon cadre image l’événement. Quelqu’un peut il m’aider car ça marche sur l’exemple.
PATRICIA > Les PDF ne contiennent qu’une image à la fois ?
OK Merci.. ou sinon puis je tranformer mes fichiers pdf en word ou jpeg ? qu’est ce qu’i est le mieux ?
PATRICIA > Ce n’est pas le métier d’Access d’afficher les PDF. Donc l’affichage des PDF se fera hors d’Access (on pourrait en fait embarquer un composant PDF, mais ça poserait des problèmes de maintenance et d’affichage).
Donc effectivement, il faut :
lukaslunt > Ce ne sera pas possible pour l’instant (je pars en vacances). Mais en principe, si tu suis pas à pas et rigoureusement ce qui est dit dans l’article, ça doit marcher.
Si tu as des erreurs, vérifie précisément le nom de tes objets (boutons, blocs de code, etc.). Vérifie aussi que tu as bien tous les bouts de code requis (voir les autres articles cités).
Re Bonjour et merci pour ta réponse, comment puis je faire ? j’ai environ 229 fichiers pdf, dois je faire un lien hypertexte, ou il n’y a rien pour les fichiers pdf à part les attaché en objet ? donc alourdir la base ?
Merci
PATRICIA > Les fichiers PDF ne sont pas des formats d’image. Ça doit venir de là.
Bonjour, j’utilise access 2010 et cela ne fonctionne pas. Il n’y a pas de souci sur l’état (debogage) mais la photo ne s’affiche pas. Ce sont des fichiers pdf.
D’avance merci
J’y arrive pas ça me met erreur quand je rajoute les code. Il serait possible que tu le mette dans le fichier téléchargeable ça pourrait aider car la je cale comme d’hab quand je voit pas comment c’est fait
Ok je verais ça demain mais je suis pas un pro donc je risque de revenir vers toi car ça me botte pas trop de recommencer ce que j’ai fait
lukaslunt > Le code dont tu parles est effectivement fait pour indexer des images nouvelles, donc les ajouter en fin de table.
Ce qui se rapproche de ton cas est l’article Charger une image unique. Mais ce n’est pas nécessairement prévu pour compléter une fiche déjà renseignée, tu pourrais avoir des aménagements à prévoir (l’article montre comment charger une seule image, mais elle est quand même ajoutée à la base, elle ne complète pas une fiche existante ; la suppression du
DoCmd.GotoRecord
, peut être une piste).Tu fait comment j’ai déjà 50 fiches de faites et j’ai fait un test et ça c’est mit à la fin des fiches déja faites
lukaslunt > Tu n’as pas forcément besoin de 2 tables (si la photo est sur la fiche principale, tu ne dois pas la séparer). Comme il s’agit d’un tutoriel, le contenu de l’article fait forcément des choix. C’est fait pour donner des idées et être adapté aux besoins.
Ok j’ai compris. Faut que je fasse alors une table image et la lier à ma table ou apparaîtra la photo en Fait. Est il possible de simplifier ça car j’ai des Fiche avec Nom prénom etc… et je veut mettre une photo de la personne. Comment faire pour que la bonne soit mise à bonne place mes photos sont nommé N°id – Nom
lukaslunt > Si tu as téléchargé la base d’exemple, le bouton « Charger les images d’un dossier » sert à choisir un dossier, puis à référencer les images de ce dossier. Mais il n’affiche pas les images du dossier dans la boîte de dialogue (il s’agit bien d’un sélecteur de dossier). Choisis un dossier, valide, et les images seront indexées dans Access. Pour plus d’infos, consulte l’article lié.
Si je l’ai essayer je croyais c’était une autre et elle marche pas. ça arrive à la boite de dialogue mais aucun fichier n’est visible
Non je sait pas ou la trouver (il n’y arien dans telechargement) et je suis sous seven et Acces 2003 je croit
Lukaslunt > Est-ce que tu as essayé de télécharger la base d’exemple (bouton Téléchargements) et de voir ce que ça fait (sans rien changer) ?
Ensuite, quelle est ta version de Windows et d’Access ?
Bon j’arrive a rien il doit y avoir un problème. Si tu accepte de m’aider par mail pour avoir une aide un peut plus directe prend mon mail et tu pourra surement m’aider car ma j’ai pas avancer d’un cm depuis hier et pourtant j’y ai passé du temps
Oui faudrait connaitre l’URL mais je pense faire ça a partir de mon site donc
lukaslunt > « Référencer des images d’Internet » pourrait être une idée d’article (pas traité ici pour l’instant). Mais quels seraient les critères pour référencer une image ? (il faudrait connaître son URL, et supposer qu’elle n’est pas modifiée ensuite).
Pour la 2ème partie de question, voir ma réponse sur l’article de départ.
Ouala !
Quelqu’un sait comment faire pour prendre les images sur internet et faire la base avec les liens. Comme ça pas de problème de stockage de donnée sur l’ordinateur. Le mieux serai de pouvoir allier les deux à la fois choir soit une image d’internet soit un lien sur son ordi.
Si quelqu’un peut m’aider aussi, car sur la recherche d’image sur mon ordinateur, la boite de dialogue s’ouvre mais aucune image n’est sélectionnable quel est le problème ou la chose à faire car la je cale depuis ce matin et c’est pas cool.
Sofyano > Tu trouveras plusieurs pistes dans la rubrique « États » du blog. Je pense que ce que tu cherches, c’est l’article « Imprimer l’enregistrement en cours« .
Bonjour,
Ma question est de savoir comment faire un bouton d’impression dans un formulaire pour imprimer la page indiquée.
Merci.
Bravo pour les explications,
ne connaissant pas le VBA j’ai quand même réussi et j’en suis très contente.
Merci
Princyfrancis > L’état n’apparaît pas « dans » un formulaire, il s’agit d’un objet séparé. On peut avoir un formulaire pour la saisie, et un état pour l’impression.
Pour créer l’état sur Access 2007 ou 2010 :
Bonjour Mr Hervé! Suis débutant en access. J’aimerai savoir comment trouver le rapport et pour le trouver si il faut préparer aussi un formulaire là où le rapport apparaitra? Veuillez m’aider mr…
Christian > Pas directement, à ma connaissance. Mais on peut l’appeler à partir d’un
Shell
ou d’unShellExecute
(il y a des articles sur ces commandes sur le blog).Hervé, peut-on integrer la visionneuse windows à un formulaire?
Christian > Le TIFF ne fait malheureusement pas partie des formats supportés nativement par Access. Il faut trouver un logiciel tiers qui puisse faire office de serveur OLE pour ce format, et ça peut passer. Après quelques recherches, un outil comme Able Tiff Viewer pourrait faire l’affaire (mais je n’ai pas testé).
Bonjour Hervé,
Comment faire pour que le champ imgApercu affiche une image au format TIFF?
Luc > J’ai ajouté entre temps cet article sur le blog. Il donne 2 manières de gérer les images manquantes, ça peut peut-être dépanner…
Bonjour
J’aicontourné le problème en créant une image dite photo absente que j’ai ajouté dans la base. Une remarque, dans l’application que je monte, afin que mon formulaire fonctionne correctement, il m’a fallut mettre en clé primaire le nom de l’image (pour moi c’est un champ numérique indexé sans doublon), sinon ,’j’étais dans l’impossibilité de rendre le formulaire dynamique et je ne pouvais insere un bouton de commande lancant un affichage d’état.
Je viens de faire une tentative mais rien de bon.J’attends la semaine prochaine
Merci
Luc > En plaçant les
If
qui vont bien au formatage de l’état, on peut gérer ce phénomène. Je vais tâcher de poster un article là-dessus la semaine prochaine.Bonsoir
Je viens de travailler sur mon état. L’application que je suis en train de monter n’est pas une gestion de banque d’images.Lorsque j’ai une fiche état sans image existante, c’est la dernière qui reste.
J’ai bien essayer de bidouiller avec le code du formulaire mais sans résultat.
Je ne me remettrais maintenent dessus que lundi au mieux.
Si vous avez la possibilité de me dépanner, grand merci et à bientôt
Bonjour
Essai très concluant pour la modification de mon formulaire existant, le code fontionne très bien pour les images à chaque changement de fiche.Maintenant je vais faire de même pour les états
Luc > Super, content que ça marche ! 🙂
Avec Xn Convert, j’ai ramené l’ensemble des images à 40-50 k chacunes.
L’ensemble remonte impéccable.
Merci et à bientôt je pense
Luc > Super. Pour la conversion en masse, XnConvert peut peut-être aider.
J’ai diminué la taille des images à 80 k chaque. Avec 21 images dans la base, l’essai est concluant. Il me reste 350 images à modifier une à une, je m’y met.
Merci beaucoup, cela faisait pratiquement un an que je cherchais cette solution. Suis plus un bidouilleur qu’autre chose. Je vais essayer également d’afficher 2 images sur le formulaire.
Bonjour. C’est la réflexion que je me faisais, chaque image pèse aux environs de 800 k., Lors de l’impression en PDF, cel donne une charge d’environ 149 000 k, ce qui est énorme.Je vais diminuer le pois des images et faire un essai.Je donnerai le résultat ensuite. Concernat le plantage de access, j’ai constaté qu’en fermant access en utlisant la commande fichier quitter, il n’y a pas de problème, bug uniquement en cliquant sur la croix de fermeture
Luc > J’ai un nouvel essai : les différents PDF se créent bien comme il faut.
Par contre, si les images sont nombreuses (ou de grande taille/résolution chacune), Access peut saturer au niveau mémoire. Ça peut être une piste ?
Pour suivre, page blanche à partir de l’état rpt image, par contre à partir de l’état rpt mur images, j’ai bien une impression pdf mais seulement 8 photos sur 10 sont imprimées alors que sur l’état c’est complet.
Bonjour et merci de répondre. Je répond un peu tardivement mais ne suis pas toujours dessus. Je suis sur Vista Edition familale, j’utilise access 2002 et PDFCreator dernière mise à jours. Je n’ai pas encore testé sur une imprimante. Pour le moment je travaille uniquement sur le ficher mdb téléchargé. Je vais faire le transfert sur mon application dans la soirée. Un autre problème est apparu, à la fermeture message : Microsoft access a cessé de fonctionner.Toutes les mises à jours sont OK d’après Windows Update.Encore merci, je trouve les explications très claires
Luc > Dans quelle configuration ? Je viens de faire un test avec une impression PDFCreator et une impression PDF Access native (2010), les deux PDF contiennent bien les images.
Le formulaire et l’état passe bien. Par contre pour impression de l’état en pdf, aune image n’est imprimée
sabine34 > Merci pour le retour ! Et bon Access 🙂
merci pour vos astuces et vos programmations
après plusieurs heures et beaucoup de concentration j’ai réussi à faire le formulaire
10 ans sans toucher acces je commence par le + facile
JoVe > Merci pour le retour, ça fait toujours plaisir !
Bonjour!
Je veux juste vous remercier pour tout ce qu’on trouve sur ce site. Je suis une amateure Access, je ne connais pas la programmation, mais j’arrive toujours à réaliser ce que je veux faire dans mes bases de données grâce à vos explications claires, conseils et exemples.
Merci, merci, merci!
maitydeal > Il n’y a pas de fonction native en VBA pour lire les données EXIF. Par contre, il existe des librairies externes : une recherche Google sur «
exif vba
» donne quelques pistes (je n’ai pas pris le temps de les tester en détail, mais on doit pouvoir faire quelque chose avec).Ouala !
Bonjour,
Ma banque d’images est pleinement fonctionnel. Le process est simple : j’archive les images et je leur associe autant de champs descriptifs que voulu. J’arrive également à les rechercher et à les extraire à l’unité ou dans des dossiers pour les recherches multiples. Seulement, j’ai un souci. lorsque j’extraie des images et les envoi à la personne concernée, je suis obligé de lui envoyer avec un Etat de sortie PDF de Access pour qu’il puisse lire les informations qui leurs sont associées (légende, sujet, objet…). Pourtant, le format JPEG contient une table embarquée dite EXIF. Y’aurait un moyen pour que Access communique automatiquement tout ou partie des données aux images JPEG dans leurs tables EXIF.
Merci pour l’aide,
christophe > Il s’agit plus un problème d’analyse que de gestion des images, apparemment. Le plus simple, dans ce cas, est de continuer la discussion sur les forums du site.
Bonjour,
Je parcours ce post avec beaucoup d’intérêt car j’avais quelques soucis dans la gestion d’images sous Access. j’ai réussi à intégrer votre base de données à la mienne mais je rencontre quelques difficultés pour aller jusqu’au résultat escompté. Pour alléger les procédures d’appels d’offres, j’essaye d’informatiser les procédures pour éviter ces démarches répétitives. Pour cela, j’ai crée plusieurs tables liées les unes aux autres par des relations, requêtes, etc…
Pour simplifier ma demande, j’ai une table maitre d’ouvrage, une table bureau d’études, votre table image stockant les signatures, l’ensemble devant alimenter un état. Je bloque au niveau de la création de ma requête qui doit reprendre et compiler les infos des bureaux d’études et les images. Je suis passé par une relation de « un à plusieurs » entre la table bureau d’études et la table image mais je ne vois comment l’une peut « nourrir » l’autre. J’espère que mes explications auront été assez claires. Merci d’avance pour votre réponse.
Merci pour l’astuce
maitydeal > Le « workflow » m’a l’air compliqué : il est plus simple (et plus sûr) de scanner les images d’abord et de les intégrer ensuite. Une fois scannées, les images ont un nom qui est forcément unique et compatible avec Access (puisque compatible avec Windows). Et avec les procédures d’intégration des images disponibles dans certains autres articles du blog, les images peuvent être cataloguées rapidement. Sinon, ça fait 7200 copier/coller ; à raison de 5 secondes par image (il faudrait compter plus pour le repérage dans les dossiers Windows), ça fait autour de 10 heures de copier/coller ! 😉
Il y a aussi des logiciels qui permettent de renommer des images par lots, si ça peut aider.
Suggérer = Cas particulier ou je voudrais ajouter le descriptif d’une image dans la banque Access en attendant la disponibilité de l’image dans le dossier contenant. Pour parer aux erreur, je voudrais que Access me génère automatiquement une proposition de nom de fichier (sans doublons, ni caractère qui dérangerais access dans sa lecture). Par la suite, ce nom de fichier sera copier et coller dans le nom de l’image une fois celle-ci disponible et le tour est joué.
Pourquoi tout ceci. Parce que la famille dispose de nombreuses photos papier que je souhaiterais scanner et intégrer dans ma banque d’images. Pour plus d’efficacité, j’ai séparé la saisie des données (petite soeur1) de l’opération de numérisation (petite soeur2)dans une logique de chaine de travail. Avec près de 7230 photos, il me semble que quelques jours sont nécessaires pour la saisie et plusieurs mois pour la numérisation.
maitydeal > Qu’est-ce que tu entends par « suggérer » ?
S’il s’agit d’alimenter automatiquement la banque d’images, cet article devrait faire l’affaire.
Bonjour,
Merci pour l’aide concernant l’extraction des fichiers. Maintenant, j’ai un autre souci. Comment faire pour que Access (VB ou simple macro) me suggère le nom des fichiers (champ « nom fichier ») que je veux ajouter à ma banque d’images. exemple : scan1 ; scan2 ; scan3 ; etc…
Merci pour l’aide d’avance,
maitydeal > Ça y est, le nouvel article est en ligne, et c’est par ici…
maitydeal > Ok, je vois. Ça demande un peu de code, je prépare un article sur le sujet… Stay tuned!
PS : Apparemment, les nouveaux messages ne sont plus considérés comme spams… pour l’instant ! 😉 Du coup, j’ai enlevé les doublons.
Exact, c’est le filtre access de formulaire. Je clique bouton droit au dessus d’un champ, je coche le thème et décoche les autres et il me reste un résultat.
maitydeal > Une précision : le filtre pour la sélection est un filtre de formulaire ? Il est appliqué de façon interactive sur le formulaire, mais il n’y a pas de requête pour ça. C’est bien ça ?
Exact, les photos ne sont pas dans la base access mais dans un dossier comme fourni généreusement dans votre modèle téléchargé sur le site.
Mon souhait, c’est de pouvoir générer un dossier d’images sur mon bureau et dont le contenu serait le résultat de ma recherche effectuée par le biais de filtres sur mon formulaire.
En fait, le code devrait être en mesure de lire le résultat de mon filtrage, d’aller sur le dossier ou sont stockées les images et de faire un transfert (copier coller)des images concernées par mon filtre vers un autre dossier que je pourrais choisir.
maitydeal > Bonsoir : j’ai raté les messages parce qu’ils ont été filtrés par l’anti-spam du blog. J’ai vu passer celui-ci de justesse, en fait… L’adresse IP pourrait poser problème ?
Pour revenir à la question : il ne s’agit pas vraiment de copier/coller, j’imagine, mais de copier de fichier, c’est ça ? Puisque les fichiers ne sont pas stockés dans la base Access.
Ohé,
Ceci est un énième message que je poste sur la question :
J’ai monté une base familiale et j’ai classé les photos par thème pour que je puisse les filtrer banalement sur une requête qui sert de support à mon formulaire.
Je voudrais ajouter un bouton pour copier coller les images du résultat de ma recherche depuis le dossier partagé sur mon bureau dans un dossier que je nommerais pour la circonstance.
Y a t il un moyen pour y arriver et merci,
maitydeal > Pour la recherche, il y a plusieurs manières de faire qui sortent un peu du cadre de cet article. Voici quelques pistes :
Les questions ne sont pas inintéressantes… mais je ne suis pas branché en permanence sur le tuyau (il faut travailler aussi ;-)).
PS : J’ai masqué l’e-mail pour éviter sa diffusion publique.
ola,
Je poste des questions sans jamais entrevoir de réactions. Soit mes questions n’ont aucun intérêt soit je me perds dans l’immensité du blog.
Merci de me dire comment trouver les réponses à mes questions et ou les trouver le cas échéant.
Merci,
Je voulais rajouter que je suis sur office 2010
Merci pour toutes ces idées qui m’ont permis de produire une petite bdd mais très utile. Cela dit, il manque un hic : comment faire pour que dans un formulaire de recherche on puisse filtrer les données de la table qui contient l’image et les champs de description (servant à la recherche) et que le tout soit généré dans l’état de sortie.
Merci,
Largo38 > Effectivement, la réponse est dans l’article : la méthode ne marche pas sur un formulaire tabulaire (c’est dû au traitement des événements par Access, en mode Tabulaire).
Bonjour
et bravo sur ces tutos.
J’ai une question, je crois avoir entrevu la réponse, mais je ne suis pas sûr.
La solution marche parfaitement avec un formulaire classique, mais pas sur un formulaire de type Tableau. L’image affichée est toujours celle de l’enregistrement sélectionnée. Y-a-t-il une méthode pour afficher plusieurs images (sans passer par un état, donc) ?
Merci
Merci
Guillaume > Sur un assez grand nombre d’images, Access peut donner des signes de faiblesse… 😉
Est-ce que l’impression plante du côté du PDF uniquement ? Ou est-ce que l’état normal plante lui-même ?
Bonjour,
Merci pour cette gestion de banque d’image. je l’ai appliqué sur ma base de donnée qui consiste a créer un catalogue Accessoire. J’ai toutes mes références accessoires dans une table et chacune des refs est liées à une photo par cette méthode dans mon etat. ca marche parfaitement bien jusqu’a la création de l’état. l’état fait environ 150 pages et contient environ 2000 refs… avec les 2000 photos qui vont avec. Lors de l’impression en PDF, Access plante… il commence correctement puis saturation de la mémoire, fichier d’échange plein à craquer, et puis plus de son, plus d’image. Mes 2000 photos pèsent environ 20 à 30 ko chacune. Ma base est une base local, ma config est correct : P4 2,8 ghz, 1GO RAM, fichier d’échange de 2Go, et je suis sous Access 2003. Je comprend pas pourquoi l’impression PDF fait tout planter…
Si vous avez une solution ?
Merci.
Stephane > Je prépare un article sur le sujet (il sera en ligne demain).
Merci pour votre aide, je suis novice sous access.
quelle fonction faut il ajouter à un bouton pour que sur l’action Click il supprime la photo de l’enregistrement en cours.
Eric > Limitation d’Access. De mémoire, seuls les fichiers GIF, JPG, PNG, BMP et ICO sont gérés (il y a peut-être encore un autre format, à pointer).
Super, ca marche pour les JPG… MAIS…
Les fichiers TIFF ne s’affiche pas ? Limitation d’Access ou MS ?
En utilisant la procédure de Northwind (employees) et la votre de l’album photo, j’ai réglé mon problème, intégration d’une image à la fois et impression des fiches (états – un pour chaque entrée dans la table). La procédure Northwind enregistre le chemin complet dans un seul champ; si le dossier change de place, peu probable mais possible, il faudra faire une mise à jour. Ça, je l’ai réglé en passant par Excel; c’est assez rapide, pas compliqué, mais pas aussi élégant qu’une routine en VBA. Je m’y suis essayé, mais ça bloque sur la boucle.
Kris > En réseau, il faudrait :
Impeccable tout fonctionne très bien.
Le seul hic pour ma part, c’est que ma base access est sur un pc en réseau et lorsque les autres personnes veulent acceder à la fiche de leur pc et bien la photo ne s’affiche pas.
Une solution à me donner ?
Merci !
Claude > Dès que j’ai un moment, j’ajouterai un article sur l’intégration d’une image à la fois. Stay tuned!
Bonjour,
J’ai intégré avec succès les procédures décrites dans la banque d’images à alimentation automatique, à une Bd personnelle (un inventaire); cela m’a permis de charger rapidement envoron 200 photos. À partir de maintenant j’ai besoin de limiter le chargement à une image à la fois, *.bmp seulement. J’ai ajouté un FilerPicker et me suis dit qu’il me restait à nettoyer la suite, enlever le While, etc., je ne m’en sors pas. Autre solution, je vais me servir de la procédure de « Bibliothèque d’images », là, ça bloque sur le Me(Invalid use of Me keyword).
Pouvez-vous m’aider à m’en sortir%
ok merci pour tout ça fonctionne.
Cryo > Oui, c’est normal comme indiqué dans l’article : « Ce champ
imgApercu
contient une image quelconque visible en mode Création de formulaire. Il faut au moins cette image pour que le champ existe, sur les anciennes versions d’Access. »Il suffit de sélectionner une image quelconque (petit volume, de préférence) sur le disque. Elle sera remplacée de toute façon par le code VB.
Merci pour cette réponse mais je possède access 2003 et quand je veux insérer une image cela ouvre une boite de dialogue me demandant de choisir une image fixe.
Cryo > L’objet Image peut être créé en utilisant l’icône Image (mais pas le « cadre d’objet dépendant ») de la barre d’outils ou du ruban 2007. Ensuite, avant de t’attaquer au code, pense à nommer précisément chaque objet du formulaire ou de l’état. La plupart des erreurs du début viennent d’un manque de précision.
J’ai lu avec attention ce post.
Mais je n’arrive pas à l’appliquer à mon cas.
Voila j’ai une table contenant un champ texte nommé photo qui contient le chemin complet de la photo « D:imageimg1.jpg ».
Et malgré de nombreux essai je ne suis pas arrivé (avec mon niveau de débutant) à adapter le code pour afficher l’image dans un état et notamment je n’arrive pas à créer un objet image. J’utilise un objet dépendant mais rien de ne passe toujours un rectangle blanc.
Donc deux questions :
– Quelqu’un peut-il m’aider pour le code ?
– Comment créer ce fameux objet image ?
Merci d’avance à tous
lfpjyxyx > Merci pour le retour 🙂
Si l’idée est de stocker les chemins des documents, ainsi qu’une description, des mots-clefs, etc. : oui, le principe de la banque d’images peut être repris et aménagé.
Maintenant, comme il s’agit de documents externes (pas tous pris en charge par Access), leur impression directe dans un état ne sera sans doute pas possible (l’impression des infos descriptives stockées dans la table ne pose pas contre aucun problème). Le pilotage de l’impression des documents par le logiciel d’origine devrait être jouable avec un peu de VBA.
Bonjour Hervé,
J’ai découvert votre site grâce à un moteur de recherche et la thématique de la gestion d’une banque d’images est simplement géniale !
Est-il possible d’adapter votre exemple à une gestion de documents (GED) dont les formats seraient les plus usuels (*.doc, *.pdf, etc.) ? Il n’y aurait pas de nécessité absolue d’imprimer ces documents stockés sous forme d’état.
Cordialement
gastounet > Il est possible, de façon quasi identique, de stocker des chemins de fichiers quelconques (donc Word ou PDF). Maintenant, tout dépend de ce que tu veux en faire. Pas les imprimer « dans » un état, parce que la mise en page ne serait pas correctement gérée (rien que les sauts de pages dans un PDF, par ex.).
Bonjour,
Je recherche un moyen « similaire » mais au lieu d’image, il s’agirait de documents type word ou pdf.
Connaissez vous une solution ?
Merci par avance
Frogz > Le tout demande une mise en place qui est difficile à détailler ici, dans un commentaire (d’autres articles, peut-être ?). Pour construire le formulaire de recherche lui-même, mon Assistant Recherche peut simplifier les choses. Le résultat peut être aménagé ensuite.
Merci de cet intérêt :o)
Ma question porte sur les formulaires, les photos sont décrites en utilisant 5 ou 6 champs (dont un max en menus déroulants pour éviter les fautes de frappe ou d’utiliser un mot qui ne sera pas exploité une autre fois) le but est de faire une recherche par un formulaire en remplissant les champs idoines et d’obtenir un nouveau formulaire pour visualiser les résultats, idéalement il faudrait même pouvoir ajouter une case à cocher pour sélectionner celles qui seraient intéressantes (un premier tri) puis de sortir les sélectionnées dans un état…
Merci :o)
FrogZ > Si j’ai suivi, il faudrait d’abord que la table qui contient la liste des images possède d’autres champs (qui stockeraient la date, un commentaire, ou d’autres données). Ensuite, il faudrait un formulaire de recherche pour exploiter ces données. Ta question porte sur quel point ? (la table ou le formulaire ?)
Superbes explications!! comment fait-on pour interroger ce genre de base (en y rajoutant des champs (date, type de photo etc…)) à l’aide d’un formulaire?
Merci!:! :o)
boko93 > Hop là ! Les bases d’exemples sont en ligne dans cet article. Bons tests !
boko93 > Le temps de préparer les bases d’exemples, ça devrait être en ligne cette après-midi 🙂
Bonjour,
je n’arrive à rien!
Est-il possible d’avoir un petit fichier demo (template) svp?
avec table et formulaire?
Merci d’avance
Michel B.
Merci pour ces infos sur la manière de gérer une banque d’images dans access
Tout est OK…
A bientôt pour d’autres questions.
chrisu > Si l’objectif est d’afficher les photos de personnes, on peut sans doute simplifier (au lieu de 2 tables). Notamment si 1 personne n’a qu’une seule photo. Il suffit d’aménager un peu en copiant les champs
Nom Image
,Nom Fichier
etDossier
dans la tableStaff
. Et de baser le formulaire sur cette table Staff.En y regardant de plus près, le champ
Nom Image
n’est sans doute pas utile dans ce cas (on aura le nom de la personne à la place).Ben oui « avec précision » ça fonctionne mieux..
Merci!
Reste à lier cette table à la table « Staff » pour faire apparaître les photos sur les formulaires. C’est bien la bonne méthode ou bien je complique?
chrisu > Dans cet exemple, tout est en VBA, donc déjà en anglais. Il n’y a donc pas de problème de traduction. Maintenant, il faut vérifier ces points précisément :
imgApercu
?AddBackslash()
comme indiqué ?En fait, tout est une question de précision 🙂
Les photos ne s’affichent pas..
Traduction des codes car Access en anglais? J’ai vu passer qq chose à ce sujet mais où?
Merci