Leçon 35 : Formulaires : Liens OLE (Insertion d'images et d'objets aux enregistrements)

Pour suivre cette leçon, vous devez avoir suivi les leçons précédentes. Ou plus précisément, vous devez être en possession de la base de données ProFormation.mdb telle qu'elle était à la fin de la leçon précédente. Si vous n'êtes pas certain de l'avoir, vous pouvez la télécharger ici

Résumé de la leçon précédente

La fois passée, nous avons vu que nos formulaires pouvaient carrément être agrémentés d'images telles que des logos, ou des photos, et nous avons vu comment attribuer un fond graphique à notre formulaire.

Aperçu de cette leçon

Dans cette leçon, nous allons encore plus loin : Nous allons cette fois attacher la photo de chaque personne à chaque enregistrement, ce qui recquiert une toute autre approche. Nous allons voir en outre qu'il est possible d'attacher à chaque enregistrement toutes sortes de fichiers : Des images, certes, mais aussi des documents Word, des feuilles Excel, et d'autres fichiers qui proviennent d'autres programmes pourvu qu'ils supportent d'être intégrés à l'intérieur d'Access.

C'était ma question : Placer un logo, c'est bien joli, mais est-il possible d'afficher la photo de chaque client ?

Oui. Mais la démarche est différente : Comme la photo doit changer à chaque enregistrement, on ne peut pas se contenter en mode création du formulaire, de placer la photo : En effet, la photo de qui placerait on ? On ne peut pas le savoir. Ce sera dont en mode SAISIE DE DONNEES que ça va se passer. Mais attention : On ne peut pas faire ça comme ça ! Il faut que la photo puisse être STOCKEE dans la table sous-jacente ! Je vous rappelle que les formulaires ne contiennent PAS de données. Alors, oui, ils peuvent contenir un logo, parce que c'est le même à chaque enregistrement, il ne change pas ! Il fait partie intégrante de la structure du formulaire lui-même... Mais PAS les photos des clients ! Elles, elles changent à CHAQUE client ! Il FAUT qu'on prépare le terrain dans la table T_Celebrite !

Concrètement ?

Concrètement, avant de créer quoi que ce soit comme formulaire, allez dans la table T_Celebrite en mode création, et ajoutez un nouveau champ que nous appellerons Photo, et qui sera défini en Objet OLE :

C'est quoi Objet OLE ?

Ca veut dire que ce champ très particulier ne va pas contenir des données telles que du texte ou du chiffre, mais va intégrer un objet. Un objet, au sens d'Access, ce n'est pas un lampadaire ou un canapé, non ! Un objet, au sens informatique du terme, c'est un fichier qui a été créé avec un autre programme : Un dessin fait avec Paint est un objet. Un classeur Excel est un objet. Un document Word, est un objet. Ce sont chaque fois des fichiers qui viennent "d'Ailleurs".

OLE Sont les intitiales en anglais de Object Linking and Embedding, je je vous traduit en français par Liaison (Linking) et Incorportation (Embedding) d'objet. Donc ce champ, à partir du moment qu'il est défini en Objet OLE, il va pouvoir contenir aussi bien une feuille Excel, qu'un document Word, un dessin Corel Draw, ou une image. Dans notre cas, il va s'agir d'une image JPEG (Une photo en fait), qui sera donc simplement un fichier, à l'extension .JPG.

Le type de champ Objet OLE, est exactement le "pendant" du lien hypertexte : Avec le lien hypertexte, vous précisiez par exemple un site Web, ou un fichier, mais il fallait cliquer dessus pour Y ALLER. Ce n'était en quelque sorte qu'un "panneau indicateur" qui disait OU était le fichier. Le type Objet OLE, fait largement plus : En effet, il va CARREMENT chercher le fichier que vous voulez, et il l'importe physiquement dans votre base de données. Je vous recommande très très chaudement de revoir la leçon 10, traitant des liens hypertextes afin qu'il ne subsiste pas de confusion dans votre esprit !

J'ai compris. Donc, logiquement, les champs OLE prennent énormément plus de place que les liens hypertextes !

Exactement. C'est parfaitement ça !

...Mais l'avantage est qu'on ne doive pas cliquer sur le lien hypertexte pour voir le document correspondant, cette fois, il s'affiche instantanément !

Oui, tout à fait ! Votre remarque prouve que vous avez très bien compris.

Bon, vous avez votre nouveau champ Photo (Photo n'est pas un nom spécialement... J'aurais pu l'appeler ImageClient, TeteDuClient ou LaPhoto). Mais en mode saisie de données, vous n'allez pas pouvoir faire grand chose : Essayez : Lancez la table en mode saisie de données, et essayez de cliquer dans le champ Photo.

En effet : Ca met simplement la cellule avec une toute petite bordure grise, mais on ne peut rien y écrire.

C'est normal. En fait, c'est seulement dans les formulaires (et dans les états, mais on y reviendra) qu'on arrive à VOIR le contenu de votre champ Photo.

Maintenant, vous allez fermer la table, et créer un nouveau formulaire en mode création, basé sur T_Celebrite. Donnez lui cette forme :

Lancez le formulaire en mode saisie de données, et allez sur Georges Brassens. C'est mainteannt, et SEULEMENT maintenant que vous allez pouvoir lui installer sa photo. Bon, évidemment, vous ne disposez sans doute pas d'une photo de Georges Brassens. Je vous en fournis donc une :

Voici une photo de Georges Brassens que vous allez sauvegarder sur votre disque dur : . Si vous ne vous rappelez plus comment on fait, revoyez la leçon précédente.

Vous êtes donc sur l'enregistrement "Brassens Georges", et vous avez sauvegardé la photo de Georges Brassens sur votre ordinateur en tant que brassens (En fait brassens.jpg, mais vous ne voyez peut-être pas le .JPG, mais là n'est pas notre propos).

Cliquez avec le bouton droit de votre souris au milieu du champ Photo, et choisissez "Insérer un objet" :

La boîte de dialogue suivante apparaît :

Cliquez sur "A partir d'un fichier", et sur le bouton "Parcourir"

Vous allez maintenant pouvoir sélectionner votre fichier brassens.jpg que vous avez récupéré tout à l'heure

Et faites encore OK

Et voilà le résultat :

Ah oui, effectivement !

Et maintenant, si vous descendez ou montez d'un enregistrement, HOP ! L'image disparait, ce qui est normal puisque c'est la photo de Georges Brassens et de personne d'autre !

Ca marche : Dès que je reviens sur Brassens, il réapparait ! C'est génial !

... Contrairement au Logo de la leçon précédente qui restait affiché, quel que soit l'enregistrement !

Mais par contre, il est tout coupé... Puis tout collé à gauche !

C'est normal : La photo est verticale, et votre zone d'accueil (le champ Photo) est plutôt horizontal ! Ca ne vous rappelle rien ?

Ah mais oui ! C'est l'histoire du "Zoom" et "Echelle" !

Exactement. MAIS ATTENTION ! Cette fois, c'est en mode création que vous devez être pour changer les options d'affichage !!!! (Bon, si vous êtes avec Access 2000, vous pouvez demander les propriétés de la photo en mode saisie de données, mais disons pour être homogène que vous allez en mode création).

Oui, mais en mode création, il n'y a plus d'image !

Ben non ! Puisque l'image change à chaque client ! La photo de qui devrait il afficher en mode création ???

Ah oui, c'est juste !

Donc, vous demandez en mode création, les propriétés de votre champ photo qui est donc évidemment vide(Vous savez : Bouton droit, propriétés). Dans l'onglet Format, vous demandez Mode d'affichage : Zoom (Pas échelle, pour éviter qu'il déforme la photo) : Relancez le formulaire en mode saisie de données, et cherchez à nouveau Brassens :

Ah oui ! Il l'a rétrécie pour qu'elle entre dans la zone sans la déformer. On ne peut pas la mettre au milieu de la zone, et pas collée à gauche ?

J'ai cherché comme vous, mais ce n'est apparemment pas possible : Quand je clique dessus, je n'ai pas accès à l'icône H... Et dans les propiriétés, je n'ai pas trouvé d'alignement central de l'image. Donc, non.

Pas besoin, on n'a qu'à redimensionner la zone du champ photo en vertical, comme ceci :

Exactement. J'avais fait exprès de dimensionner la zone dans le mauvais sens pour que vous trouviez l'astuce vous-mê,me. Bravo ! Et en plus, dans les propriétés de l'image , vous demandez dans l'onglet format Mode d'affichage : Echelle, comme ça, on est bien sûr que l'image va bien prendre la totalité de la zone de la photo, et comme cette zone est déjà verticale, les différentes photos des différentes personnes ne seront pas trop déformées. Essayez :

C'est impeccable comme ça !

Oui, comme la zone de la photo correspond à peu près aux photos elles-mêmes, Ca va pas mal. Bon, comme exercice, vous allez ajouter la photo de Bill Clinton. La voici :

Ca marche : Ce n'est pas évident car il faut bien se rappeler de la marche à suivre, mais voilà le résultat :

Et est-ce qu'on peut mettre autre chose que des photos ?

Oui, et c'est bien là le plus intéressant : Comme je vous l'ai dir plus haut, le champ Photo, même s'il s'appelle physiquement "Photo", peut très bien accueillir d'autres genres de fichiers, comme par exemple un document Word : Imaginez que notre table T_Celebrite est en fait une table de gens à la recherche d'un emploi, et que chaque personne à son CV sous forme d'un document word : Eh bien, il va tout à fait être possible de le placer A LA PLACE de sa photo !

Et si je voulais sa photo ET son CV ?

Alors, nous aurions dû créer non pas un mais DEUX nouveaux champs de type Objet OLE : Un champ qui s'appelle "Photo" pour mettre la photo, et un champ "CV" qui serait aussi un champ Objet OLE, mais qui contiendrait le CV (fait avec Word): Le résultat serait éloquent : . Sympathique, non ?

Mais pour éviter d'alourdir trop la base de données, et pour vous simplifier la tâche, et aussi pour bien illustrer le fait qu'un champ OLE peut contenir indifféremment une image ou autre chose, nous n'allons PAS créer de nouveau champ dans la table.

Nous allons donc REMPLACER la photo de Bill Clinton par son CV. Pour ce faire, il vous faut un document Word qui va contenir son CV. Vous ne l'avez pas, le voici :

Téléchargez le CV de Bill Clinton en cliquant ICI

C'est comme pour le téléchargement d'une base de données, Je ne pense pas que ça devrait vous poser de problème. Bon, évidemment il faut posséder Word, mais je suppose que vous l'avez. Mettez ce fichier Word sur votre disque dur ou vous voulez. Je vais supposer que vous le mettez dans C:\Mes Documents.

ATTENTION : Il est possible que le document s'ouvre automatiquement, sans que vous ayez besoin de le télécharger comme une base de données. Si c'est le cas, et qu'il s'ouvre automatiquement, vous allez directement dans le menu Fichier/Enregistrer Sous, et c'est là que vous précisez exactement ou vous voulez que ce document soit placé.

Ca y est. J'ai rapatrié le fichier cvclinton.doc, et je l'ai placé dans C:\Mes Documents. Ouf !

Parfait. Maintenant, vous lancez votre formulaire en mode saisie de données, et vous vous placez sur Bill Clinton : . Vous cliquez ensuite sur son visage avec le bouton droit de votre souris, et vous choisissez "Insérer un objet"

Oui, exactement comme quand on a mis sa tête ?!

C'est ça. Et donc, vous suivez les mêmes étapes que tout à lk'heure quand on a mis sa tête, mais cette fois, vous choisissez le document Word cvclinton.doc.. Vous devriez obtenir ce résultat :

Qu'est ce que c'est que cette saloperie ???

C'est votre CV fait par Word.

Mais on arrive rien à lire !!!

Oui, pourquoi ?

J n'en sais rien, moi... Hum.. Ah OUIIIIIII ! Je sais : C'est parce qu'on a demandé un mode d'affichage "Echelle" pour que toute l'image soit compressée pour bien entrer dans le champ Photo, et il a fait la même chose avec notre document Word, évidemment !

Voilà. Alors, avec les images normales, on peut très bien faire ça, mais là, avec un document Word qui est manifestement trop grand pour entrer dans notre zone d'image, Access compresse ça comme si c'était une image, mais on n'arrive plus rien à lire...

Logique !

Eh oui. Donc : pas le choix : Si vous voulez lire votre CV correctement, il faut arrêter de demander un mode d'affichage Echelle, et demander "Découpage", et, bien sûr, agrandir la zone de manière à obtenir ce chouette résultat : . Vous croyez que vous pouvez faire ça tout seul ?

Ah oui, normalement : Je reviens en mode création, j'agrandis ma zone, je clique avec le bouton droit, je recherche le mode d'affichage que je met sur découpage, je relance le mode saisie de données, je regarde si ça va... Oui, oui, j'arrive a me débrouiller.

C'est fait ?

Exactement, j'ai la même chose que vous maintenant. Bon, évidemment, maintenant qu'on a changé les options d'affichage, quand on va sur quelqu'un qui a une photo, comme Brassens, la photo est à nouveau toute collée à droite : !

Oui, c'est normal.

Oui. Et le CV de Bill Clinton, est-ce que je peux le modifier directement depuis Access si je veux ?

Oui ! Et ça, c'est génial ! Allez sur Bill Clinton, et double-cliquez sur son CV : . Vous avez un petit sablier qui montre qu'il travaille, et au bout de quelques secondes, vous avez cet affichage :

Vous êtes toujours dans Access MAIS ! Pas complètement ! En fait, vous êtes dans une sorte de mini Word à l'intérieur d'Access : Regardez attentivement les menus : ce sont les menus de Word ! Les barres d'outils : ce sont les barres d'outil de Word ! Vous avez les règles horizontales et verticales de Word... Et pourtant c'est toujours indiqué Access dans la barre de titre tout au dessus ! :

D'accord ! Et là, maintenant, je peux ajouter par exemple l'adresse de Bill Clinton ?

Oui : Vous cliquez juste en dessous de prénom, et vous écrivez Adresse :, une tabulation , et Maison Blanche, vous appuyez sur enter pour passer une ligne pour faire plus joli, puis vous mettez Adresse en bleu comme ceci :

Et quand j'ai finis, comment fais-je pour revenir à mon formulaire Access ?

Très simple, il suffit bêtement de cliquer sur une partie de votre formulaire, n'importe laquelle, ici par exemple :

Donc, attention, il ne faut pas se tromper, parce que il y a 3 cas de figure :

Le mode création
Qui permet de demander par exemple le mode d'affichage avec Bouton droit de la souris, puis "propriétés" (Découpage, Echelle, Zoom), et qui permet également de redimensionner la zone. Les petits carrés sont là parce que j'ai cliqué une fois dessus pour le sélectionner
Le mode saisie de données :
Qui permet de visualiser simplement le contenu du champ, et qui permet d'insérer un nouvel objet avec bouton droit de la souris, puis "Insérer un objet"Les petits carrés sont là parce que j'ai cliqué une fois dessus pour le sélectionner, mais en mode saisie de données, je ne peux pas redimensionner la zone.
Le mode modification du champ
Qui permet de modifier carrément le contenu du fichier clinton.doc (comme par exemple ajouter l'adresse) Il y a aussi des petits carrés noirs sur les côtés et dans les coins avec une ligne épaisse grise foncée. Ce nous est pas utile ici.

Bon, maintenant, attention : Petite subtilité technique : Quand vous avez inséré votre fichier cvclinton.doc dans votre formulaire, Access a fait une COPIE du fichier original. C'est à dire que comme c'est une copie, quand vous cliquez deux fois sur le CV pour le modifier, c'est en fait la COPIE qui est modifiée, et PAS l'original ! Il faut bien faire attention, parce que vous changez quelque chose dans le fichier via Access... Tiens ben ça tombe bien, c'est ce qu'on a fait : On a ajouté l'adresse de Clinton. MAIS... si vous lancez Word, et que depuis Word normal cette fois, vous Allez dans le menu Fichier/Ourir, et que vous ouvrez cvclinton.doc vous allez constater qu'il n'a PAS CHANGE ! Il n'a PAS l'adresse de Bill Clinton !

AH d'accord ! Et il n'y a pas une option pour que justement quand on change dans Access, ça change vraiment le fichier cvclinton.doc ? Ce serait mieux à mon avis...

Alors, normalement oui, il y a une option : Au moment ou vous demandez Bouton droit de la souris : Insérer un objet, A partir du fichier, vous avez une petite case à cocher : "Liaison" :

Quand vous mettez cette coche, il vous donne un petit texte d'explication très clair : Le fait de mettre cette coche fera en sorte que votre fichier est lié, et non pas incorporé à votre formulaire : Ce qui implique donc que quand vous faites ensuite des modifications sur votre fichier via Access, ces modifications seront VRAIMENT faites dans le fichier de base. Et aussi, si vous supprimez, changez de place ou renommez le fichier cvclinton.doc, la liaison sera cassée, par contre ça prendra moins de place dans la base de données. Vous suivez ? Non ? De toute façon, que vous ayez compris ou pas, c'est égal parce que cette fonction ne marche pas : Que vous mettiez la coche ou pas, de toute façon, le fichier sera incorporé (copié), et non pas attaché (lié). Et donc de toute façon votre base de données va bien grossir de par ce fait, et quand vous cliquerez 2 fois sur un fichier pour le modifier, ça ne modifiera QUE la copie dans Access... C'est comme ça. Que ce soit dans Access 97 ou 2000, c'est le même prix. Je ne sais pas si Microsoft à corrigé ce bug dans Access XP.

Et on ne peut vraiment pas remédier à ça ?

Pas facilement. seul du code Visual Basic assez complexe peut faire quelque chose. Mais nous débordons ici du sujet. Nous arrivons au terme de cette leçon

Fermez votre formulaire, et appelez-le F_CelebriteObjetOLE

Bon... Hem... On peut résumer ?

Une des superbes possibilités d'Access est d'interagir étroitement avec d'autres fichiers tels que des images, des documents Word, des feuilles Excel, etc. Via un type de données qui est l'objet OLE (Object Linking and Embedding, soit liaison et incorporation d'objet). Nous avons vu comment faire pour que chaque enregistrement, chaque personne aie sa photo, ou son CV fait avec Word. Nous avons vu comment changer facilement d'objet en remplaçant une image par un document Word, et nous avons malheureusement constaté qu'il n'est possible que d'incorporer des objets par copie, sans possibilité de faire des liaosns simples, bien que cela paraisse possible. Nous avons vu que les modes d'affichage et la taille des champs sont cruciaux à bien comprendre pour abtenir un affichage lisible (Les documents Word supportent mal un mode d'affichage de type "Echelle", contrairement aux images par exemple.)

Avez-vous bien compris ?

  1. Pour insérer un fond d'écran dans un formulaire, il est nécessaire d'avoir un objet OLE dans la table sous-jacente
    a. Oui
    b. Non ***
    c. Seulement si le fond d'écran est en format JPG

  2. On peut voir les images insérées dans un champ de type OLE directement :
    a. Dans les tables
    b. Dans les requêtes
    c. Dans les formulaires ***
    d. Dans les tables, les requêtes et les fomulaires

  3. Un champ OLE peut contenir pour un enregistrement une feuille Excel, tandis que pour un autre enregistrement, ce sera plutôt un document Word ?
    a. Oui, sans problème ***
    b. Non
    c. Oui, mais il faut demander l'option de champ dans la table "Multi-documents"
    d. Oui, mais a condition d'avoir la propiété "Multi-document activé" à Oui dans le formulaire

  4. Quand on clique 2 fois sur un champ de type OLE (dans un formulaire) qui contient un classeur Excel :
    a. On peut le modifier, mais ça ne modifie pas le fichier original, mais seulement la copie locale installée dans le formulaire ***
    b. On peut le modifier, et ça modifie automatiquement également le fichier qui a servi de base à cette insertion de fichier Excel
    c. Ca permet de changer sa taille à l'écran
    d. On ne peut pas cliquer deux fois dessus en mode saisie de données. C'est seulement en mode création qu'on peut le faire

  5. Il est possible d'avoir un champ OLE dans un formulaire, qui contiendra quelque chose de différent à chaque enregistrement SANS avoir besoin de créer un champ OLE dans la table sous-jacente ?
    a. Oui, sans problème
    b. Non ***
    c. Oui, mais seulement dans le cas de moins de 255 enregistrements
    d. Oui, mais il ne sera possible d'insérer QUE des images de type JPG

Pour voir les solutions, il vous suffit de sélectionner le questionnaire ci-dessus : 3 petites étoiles *** apparaîtront en face des bonnes réponses.

Exercice

L'exercice consiste à créer une nouvelle base de données que vous appellerez PrestiVoiture.MDB. Dans cette base de données, vous allez créer une table T_Voiture qui va contenir des voitures. Chaque voiture devra avoir les renseignements suivants : Sa marque, son type, une photo, et ses caractéristiques techniques.

Pour vous aider à remplir cette table, voici les données des 2 premières voitures :

  1. Ferrari Testarossa, , Téléchargez ici ses caractéristiques techniques (feuille Excel)
  2. Lamborghini Countach, , Téléchargez ici ses caractéristiques techniques (document Word)

Votre travail consistera ensuite à créer un formulaire F_Voiture, qui contiendra en haut le logo "Presti Voiture", que voici : , et, pour chque voiture, sa marque, son type, sa photo et ses caractéristiques techniques. Voici l'exemple du premier enregistrement (la Lamgorghini) :

Astucieux : J'ai demandé la couleur de fond des 2 objets OLE en ... transparent ! Attention donc, réfléchissez bien à ce que vous allez faire avant de vous précipiter sur la solution...

Téléchargez la solution de l'exercice ici

Si vous n'êtes pas tout à fait certain d'avoir suivi correctement toutes les étapes de cette leçon, vous avez la possibilité de télécharger ici la version de ProFormation.mdb exactement dans l'état ou elle devrait être à la fin de cette leçon.

Aperçu de la leçon suivante

Lors de la prochaine leçon,