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.

Info
Cet article est une mise à jour de celui publié dans l’ancien « grenier » du site self-access.com. Avec quelques améliorations de détail. Le tout fonctionne sur toutes les versions actuelles d’Access (au moins depuis le 97 !).

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 .
Info
L’intérêt de stocker le dossier séparément du nom du fichier est que ça devrait, à long terme, faciliter le déplacement des images. Si les images sont déplacées, seul leur dossier doit être mis à jour (et ça peut se faire en une requête Mise à jour, par exemple).D’autre part, pensez à aménager le dossier en fonction de votre système. Sur Windows XP, les chemins sont du style 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 champ imgApercu a été réglée sur Zoom au lieu de Dé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 de Mode 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.

Info
Le bout de code ci-dessus fait appel à une fonction 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 :

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 :

  1. Réalisez par l’assistant un état basé sur la table des images.
  2. 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.
  3. Via la feuille de propriétés, donnez le nom imgApercu à votre objet Image.
  4. Comme sur le formulaire, définissez la propriété Mode d'affichage de l’objet Image sur Zoom.
  5. Copiez le code ci-dessous dans l’événement Au formatage de la section Détail :

Apuka acheter des cartouches d’encre :o)

Vous aimerez aussi...

141 réponses

  1. Tom dit :

    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.

    • Hervé Inisan dit :

      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 ?

      • Tom dit :

        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.

        • Hervé Inisan dit :

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

      • Tom dit :

        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

  2. kaddour dit :

    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

  3. Kalys dit :

    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.

    • Hervé Inisan dit :

      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 ?

  4. KNOE dit :

    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.

    • Hervé Inisan dit :

      Le problème doit venir de l’intégration de AddBackSlash. Cet article devrait aider.
      Ouala !

      • KNOE dit :

        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.

          • KNOE dit :

            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.

          • Hervé Inisan dit :

            Super. Au lieu d’être en blanc, les champs peuvent aussi être marqués comme Visible = Faux, par exemple.

  5. kaba dit :

    bonjour, merci pour ces lumière, Comment peut-on chargé une seule image?

  6. Vandendriessche dit :

    Super utile ! Grand merci !

  7. Hervé Inisan dit :

    zohaxel > Merci ! 🙂

  8. zohaxel dit :

    OK, je vais replonger dans la problématique voir si je peux faire qqc. Merci
    Bon courage

  9. Hervé Inisan dit :

    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.

  10. zohaxel dit :

    Pas réponse depuis le temps? Y-a-t-il un manque d’info?
    Merci

  11. zohaxel dit :

    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?

  12. Hervé Inisan dit :

    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 ?

  13. zohaxel dit :

    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

  14. Hervé Inisan dit :

    Francis > Malheureusement non : vu la gestion de l’événement Current sur Access, la technique n’est pas adaptable à un formulaire de type Liste.

  15. Francis dit :

    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 ?

  16. Hervé Inisan dit :

    Céline > Est-ce que des erreurs se produisent à l’exécution ? Si oui, lesquelles ?

  17. Céline dit :

    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

  18. Hervé Inisan dit :

    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.

  19. Nicole dit :

    Bonjour,

    Est-il possible de rattacher un document « Scanné » a une base Access ?
    Merci
    Nicole

  20. Hervé Inisan dit :

    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 ?

  21. Mia dit :

    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.

  22. lukaslunt dit :

    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.

  23. Hervé Inisan dit :

    PATRICIA > Les PDF ne contiennent qu’une image à la fois ?

  24. PATRICIA dit :

    OK Merci.. ou sinon puis je tranformer mes fichiers pdf en word ou jpeg ? qu’est ce qu’i est le mieux ?

  25. Hervé Inisan dit :

    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 :

    • Soit faire un lien hypertexte.
    • Soit faire un champ Texte avec le chemin du PDF, et un bouton pour ouvrir le PDF. Voir ShellExecute.
    • Intégrer le document comme objet OLE (mauvais).
    • Intégrer le document comme Pièce jointe (à partir d’Access 2007 ; mieux que l’objet OLE, mais pas forcément idéal puisque ça augmente aussi la taille de la base).
  26. Hervé Inisan dit :

    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).

  27. PATRICIA dit :

    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

  28. Hervé Inisan dit :

    PATRICIA > Les fichiers PDF ne sont pas des formats d’image. Ça doit venir de là.

  29. PATRICIA dit :

    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

  30. lukaslunt dit :

    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

  31. lukaslunt dit :

    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

  32. Hervé Inisan dit :

    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).

  33. lukaslunt dit :

    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

  34. Hervé Inisan dit :

    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.

  35. lukaslunt dit :

    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

  36. Hervé Inisan dit :

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

  37. lukaslunt dit :

    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

  38. lukaslunt dit :

    Non je sait pas ou la trouver (il n’y arien dans telechargement) et je suis sous seven et Acces 2003 je croit

  39. Hervé Inisan dit :

    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 ?

  40. Lukaslunt dit :

    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

  41. lukaslunt dit :

    Oui faudrait connaitre l’URL mais je pense faire ça a partir de mon site donc

  42. Hervé Inisan dit :

    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 !

  43. lukaslunt dit :

    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.

  44. Hervé Inisan dit :

    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« .

  45. Sofyano dit :

    Bonjour,
    Ma question est de savoir comment faire un bouton d’impression dans un formulaire pour imprimer la page indiquée.
    Merci.

  46. snoop dit :

    Bravo pour les explications,
    ne connaissant pas le VBA j’ai quand même réussi et j’en suis très contente.
    Merci

  47. Hervé Inisan dit :

    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 :

    1. Sélectionner une table ou une requête.
    2. Onglet Créer / Etat.
    3. Il reste ensuite à faire la mise en forme graphique.
  48. Princyfrancis dit :

    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…

  49. Hervé Inisan dit :

    Christian > Pas directement, à ma connaissance. Mais on peut l’appeler à partir d’un Shell ou d’un ShellExecute (il y a des articles sur ces commandes sur le blog).

  50. Christian dit :

    Hervé, peut-on integrer la visionneuse windows à un formulaire?

  51. Hervé Inisan dit :

    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é).

  52. Christian dit :

    Bonjour Hervé,
    Comment faire pour que le champ imgApercu affiche une image au format TIFF?

  53. Hervé Inisan dit :

    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…

  54. LUC dit :

    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.

  55. LUC dit :

    Je viens de faire une tentative mais rien de bon.J’attends la semaine prochaine
    Merci

  56. Hervé Inisan dit :

    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.

  57. LUC dit :

    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

  58. LUC dit :

    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

  59. Hervé Inisan dit :

    Luc > Super, content que ça marche ! 🙂

  60. LUC dit :

    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

  61. Hervé Inisan dit :

    Luc > Super. Pour la conversion en masse, XnConvert peut peut-être aider.

  62. LUC dit :

    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.

  63. LUC dit :

    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

  64. Hervé Inisan dit :

    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 ?

  65. LUC dit :

    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.

  66. LUC dit :

    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

  67. Hervé Inisan dit :

    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.

  68. LUC dit :

    Le formulaire et l’état passe bien. Par contre pour impression de l’état en pdf, aune image n’est imprimée

  69. Hervé Inisan dit :

    sabine34 > Merci pour le retour ! Et bon Access 🙂

  70. sabine34 dit :

    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

  71. Hervé Inisan dit :

    JoVe > Merci pour le retour, ça fait toujours plaisir !

  72. JoVe dit :

    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!

  73. Hervé Inisan dit :

    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 !

  74. maitydeal dit :

    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,

  75. Hervé Inisan dit :

    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.

  76. christophe dit :

    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.

  77. maitydeal dit :

    Merci pour l’astuce

  78. Hervé Inisan dit :

    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.

  79. maitydeal dit :

    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.

  80. Hervé Inisan dit :

    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.

  81. maitydeal dit :

    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,

  82. Hervé Inisan dit :

    maitydeal > Ça y est, le nouvel article est en ligne, et c’est par ici

  83. Hervé Inisan dit :

    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.

  84. maitydeal dit :

    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.

  85. Hervé Inisan dit :

    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 ?

  86. maitydeal dit :

    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.

  87. Hervé Inisan dit :

    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.

  88. maitydeal dit :

    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,

  89. Hervé Inisan dit :

    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.

  90. maitydeal dit :

    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,

  91. maitydeal dit :

    Je voulais rajouter que je suis sur office 2010

  92. maitydeal dit :

    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,

  93. Hervé Inisan dit :

    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).

  94. Largo38 dit :

    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

  95. Hervé Inisan dit :

    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 ?

  96. Guillaume dit :

    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.

  97. Hervé Inisan dit :

    Stephane > Je prépare un article sur le sujet (il sera en ligne demain).

  98. Stephane dit :

    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.

  99. Hervé Inisan dit :

    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).

  100. Eric dit :

    Super, ca marche pour les JPG… MAIS…
    Les fichiers TIFF ne s’affiche pas ? Limitation d’Access ou MS ?

  101. Claude dit :

    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.

  102. Hervé Inisan dit :

    Kris > En réseau, il faudrait :

    1. Que le dossier qui contient les images soit partagé sur le réseau (donc accessible – au moins en lecture – par tout le monde concerné).
    2. Que ce dossier porte le même nom pour toutes les personnes (s’il y a un mapping réseau, il faut qu’il soit identique).
    3. Normalement, le reste devrait fonctionner. La boîte de sélection d’image doit permettre de pointer un lecteur réseau, donc de stocker le chemin des images de la forme \serveurdossierimage.jpg.
  103. Kris dit :

    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 !

  104. Hervé Inisan dit :

    Claude > Dès que j’ai un moment, j’ajouterai un article sur l’intégration d’une image à la fois. Stay tuned!

  105. Claude dit :

    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%

  106. Cryo dit :

    ok merci pour tout ça fonctionne.

  107. Hervé Inisan dit :

    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.

  108. Cryo dit :

    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.

  109. Hervé Inisan dit :

    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.

  110. Cryo dit :

    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

  111. Hervé Inisan dit :

    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.

  112. lfpjyxyx dit :

    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

  113. Hervé Inisan dit :

    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.).

  114. gastounet dit :

    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

  115. Hervé Inisan dit :

    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.

  116. FrogZ dit :

    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)

  117. Hervé Inisan dit :

    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 ?)

  118. FrogZ dit :

    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)

  119. Hervé Inisan dit :

    boko93 > Hop là ! Les bases d’exemples sont en ligne dans cet article. Bons tests !

  120. Hervé Inisan dit :

    boko93 > Le temps de préparer les bases d’exemples, ça devrait être en ligne cette après-midi 🙂

  121. boko93 dit :

    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.

  122. Photo Loco dit :

    Merci pour ces infos sur la manière de gérer une banque d’images dans access

  123. chrisu dit :

    Tout est OK…
    A bientôt pour d’autres questions.

  124. Hervé Inisan dit :

    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 et Dossier dans la table Staff. 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).

  125. chrisu dit :

    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?

  126. Hervé Inisan dit :

    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 :

    • Les noms des champs de tables sont-ils orthographiés exactement comme dans le code VBA ?
    • L’objet Image rajouté manuellement sur le formulaire s’appelle-t-il bien imgApercu ?
    • Le code VBA est-il placé dans le bon événement ?
    • Les chemins Windows sont-ils corrects ? (ils changent en fonction de Windows XP ou Windows Vista)
    • Est-ce que tu as également  récupéré la fonction AddBackslash() comme indiqué ?

    En fait, tout est une question de précision 🙂

  127. chrisu dit :

    Les photos ne s’affichent pas..
    Traduction des codes car Access en anglais? J’ai vu passer qq chose à ce sujet mais où?
    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *