Leçon 11
 
Pièces jointes et Objets OLE

Dans cette leçon, nous allons voir deux types de champs "apparentés" aux liens hypertextes :

ce sont les Pièces Jointes (qui sont une nouveauté d'Access 2007), et Objets OLE, qui, eux, existent depuis longtemps. Il s'agit de champs qui permettent d'intégrer ou de lier un ou plusieurs fichiers externes, tels que des tableaux Excel, des documents Word, des images, des vidéos, etc.

 
Sommaire

Cette leçon va parler de pièces jointes et de fichiers à inclure.

Du coup, nous allons avoir besoin de quelques fichiers de test :

 

 

 

 

Ces fichiers sont simplement

(mais qui n'est pas un virus, pas d'inquiétude : c'est juste un petit programme gratuit qui permet de scinder de gros fichiers en plus petits, mais bon, ce n'est pas le sujet, c'est juste pour voir si on peut inclure des fichiers-programmes.exe dans notre base de données)

Je vous propose de cliquer ici pour télécharger fichierslecon011.zip, et décompresser les fichiers dans un dossier de votre PC, par exemple dans Mes Documents.

Le type Pièce Jointe

 

Ouvrez votre base de données, ouvrez T_Client en mode création, et ajoutez un champ DocumentAnnexe, sous Prenom, en type de données Pièces jointes :

  1. Lancez la table en mode saisie de données
  2. Double-cliquez sur la pièce jointe d'Edith Piaf
  3. Cliquez sur Ajouter
  4. Allez chercher l'endroit où vous avez dézippé les fichiers de ce début de leçon, et choisissez Commande de pizza.docx
  5. Cliquez sur Ouvrir
  6. Cliquez sur OK

Ouverture d'une pièce jointe

Vous voyez maintenant sa pièce jointe
qui contient 1 document :

 

Pour visualiser le contenu, il vous suffit de cliquer deux fois sur le petit trombone, et deux fois sur Commande de pizza.docx, comme ceci :

En fait, les pièces jointes sont exactement le contraire des liens hypertexte : un lien hypertexte est une simple renvoi à un fichier externe, tandis qu'un champ Pièces jointes intègre le fichier directement dans la base de données.

Du coup, évidemment, ça peut très rapidement grossir la base de données inconsidérément.

Tailles des pièces jointes

J'ai regardé la taille de la base de données avant et après l'insertion de la pièce jointe. Pour des raisons que je ne connais pas, la taille de la base de données + la taille de la pièce jointe intégrée ne donne pas la bonne addition : la base augmente plus que nécessaire (ne me demandez pas pourquoi) :

Vous constatez qu'en mode saisie de données, le champ n'est pas titré DocumentAnnexe, mais est représenté par un petit trombonne. Vous aurez sans doute découvert qu'il suffit de changer sa légende pour remédier à ça :

Vous pouvez ajouter autant de pièces jointes que vous voulez (à mon avis, il y a une limite, mais je ne l'ai pas trouvée), mais votre base de données ne peut jamais dépasser 2Go.

Si vous désirez connaître les différentes limitations d'Access, visitez cette page de Microsoft.

Ajout et suppression de pièces jointes

Lorsque vous cliquez deux fois sur les pièces jointes, vous les ouvrez avec le programme correspondant, défini dans l'explorateur Windows Lorsque vous cliquez avec le bouton droit de la souris sur un fichier, vous avez la possibilité de cliquer sur "Ouvrir Avec", et de préciser le programme qu'il doit utiliser pour ouvrir le fichier. En cliquant sur Commande de Pizza.docx, on va utiliser Word 2010, et donc, on va pouvoir modifier le fichier, tandis que si vous ouvrez Effet de serre.wmv (C'est une vidéo idiote, ne vous inquiétez pas), vous sans doute l'ouvrir avec une visionneuse de vidéos, telle que Windows Media Player, ou une autre, et ne pourrez sans doute pas la modifier.
Exercice : Ajoutez Contourne barrière.jpg et Effet de serre.wmv comme pièces jointes supplémentaires d'Edith Piaf.

Constatez qu'il n'y a pas d'icône particulière pour montrer qu'il s'agit d'un document Word, une image JPEG ou une vidéo WMV (ça aurait été pourtant bien pratique).

Sécurité des pièces jointes

Maintenant, si vous essayez d'inclure dans votre pièce jointe le programme Xtremsplit.exe, vous serez gratifié d'un message d'erreur :

D'un côté, je comprends Microsoft qui estime que tout fichier se finissant par .exe peut contenir un virus, mais, d'un autre côté, j'ai aussi envie de leur dire : "De quoi j'me mêle ?"

Au cas où vous auriez besoin d'ajouter un fichier exécutable dans vos pièces jointes, il suffit d'inclure votre fichier .exe dans un .zip, et là, il n'y a plus de message d'erreur... C'est donc une sécurité assez limitée.

Les objets OLE

Je traite des objets OLE dans ce même chapitre car ils ressemblent aux pièces jointes. Les champs de type OLE existent depuis fort longtemps, alors que les pièces jointes apparaissent avec Access 2007.

OLE signifie "Object Linking and Embedding", soit "Liaison et incorporation d'objets" - Objets dans le sens "Fichiers".

En bref :

  • Les liens hypertextes permettent de cliquer dessus, et d'aller voir le fichier original (un seul fichier par lien hypertexte, donc)
  • Les pièces jointes permettent d'intégrer une copie de fichiers qui se trouvent sur votre PC, et il faut cliquer dessus pour les visualiser.
  • Les objets OLE permettent de soit intégrer la copie d'un fichier dans votre base de données (un peu comme une pièce jointe, mais un seul fichier est permis avec l'OLE), soit faire un lien vers le fichier d'origine (un peu comme un lien hypertexte).

Du coup, on se demande à quoi servent les OLE puisqu'on arrive apparemment à faire la même chose, en mieux, avec les pièces jointes et les liens hypertextes !

Eh bien, les objets de type OLE permettent la visualisation du fichier directement dans Access, sans avoir besoin de cliquer dessus pour le voir. Et ça, c'est quand même drôlement sympa !

 

Essayons : créez un nouveau champ InfoVisuelle, en dessous de Prenom :

Insertion d'un objet OLE

Lancez la table en mode saisie de données

 

Cliquez avec le bouton droit de votre souris sur le champ InfoVisuelle d'Edith Piaf, choisissez Insérer un objet :

 

 

  • Cliquez sur A partir d'un fichier
  • Cliquez sur Parcourir
  • Allez chercher votre fichier Tableau simple.xlsx où vous l'avez placé quand vous l'avez dézippé
  • Cliquez sur OK, et encore OK

O déception : tout ce que vous voyez, c'est ceci :

Il n'y a même pas le nom du fichier (Tableau simple.xlsx), et en plus, il faut cliquer deux fois dessus pour le visualiser ! Alors que je vous ai dit plus haut qu'on pouvait voir directement l'aperçu sans cliquer !

Oui, mais pas dans les tables : on pourra seulement voir cet aperçu dans les formulaires et dans les états.

Nous n'allons pas étudier les formulaires maintenant, ce n'est pas le sujet de cette leçon, mais je vais quand même vous montrer quelque chose d'étonnant !

Faites d'abord l'exercice suivant : Dans le champ InfoVisuelle de Steven Spielberg, insérez l'image Boire ou voler.jpg (qui se trouve aussi parmi les fichiers qui sont dans le .zip du début de leçon).

Vous devriez obtenir le résultat suivant :

Constatez qu'il attribue (étrangement) le terme Package au lieu de, par exemple, image JPEG).

Création d'un formulaire pour voir les OLE

Résumons la situation visuellement :

  1. Cliquez sur un autre enregistrement pour enlever l'éventuel petit crayon à gauche d'Edith Piaf
  2. Cliquez sur le ruban Accueil, puis sur Formulaire
  3. Cliquez sur l'icône au dessus de Affichage, en haut à gauche de votre écran :

Les pièces jointes dans les formulaires

 

 

Vous êtes maintenant dans un formulaire basé sur T_Client, et vous êtes sur le premier client (Edith Piaf).

Observez le champ InfoVisuelle : nous voyons, effectivement, comme je vous l'avais promis, le contenu du fichier Excel.

MAIS, dans Annexes, nous voyons seulement l'icône du premier fichier inclus (Commande de pizza.docx).

Pour voir les autres fichiers inclus, cliquez une fois sur l'icône Word : ça fait apparaître une mini-barre d'outils :

Cliquez sur la flèche verte (ne me demandez pas pourquoi l'infobulle affiche "avant", et pas "après" )

Et là, vous ne voyez pas une icône, mais carrément l'image Contourne Barrière.jpg
(Pourquoi ? ... je ne sais pas)

Si vous demandiez à voir le 3ème fichier (la vidéo Effet de Serre.wmv), vous verriez simplement l'icône également.

Comme vous le constatez, ce n'est pas facile du tout de s'y retrouver !

Personnellement, je trouve que c'est une erreur de Microsoft de ne montrer que la première icône dans le champs de Pièces jointes "Annexes" ! ... Vous, vous savez qu'il y a d'autres fichiers, mais imaginez que votre base de données soit utilisée par d'autres personnes, elles peuvent croire qu'il n'y a qu'une annexe, si elles ne pensent pas à double cliquer pour faire apparaître la boîte de dialogue des pièces jointes (dans les tables), ou à simplement cliquer pour faire apparaître la minibarre (dans le formulaire).

Aberrations d'affichages dans les formulaires

Mais nous ne sommes pas au bout de nos surprises !

En bas de votre formulaire, vous avez des petites flèches qui vous permettent de changer d'enregistrement.

Cliquez sur la flèche droite pour aller sur le 2ème client (Steven Spielberg).

 

Et là, vous avez, cette fois, dans le champ OLE InfoVisuelle, une icône qui représente l'image, mais pas l'image elle-même :

On se croirait dans un sketch : Prenez une profonde inspiration !

Vous avez donc les images JPG dans les champs OLE qui s'affichent comme des icônes alors qu'on aurait préféré qu'elles s'affichent comme des images, alors que ces mêmes images s'affichent comme des images dans les champs pièces jointes alors que des icônes nous auraient suffi !

D'autre part, les fichiers Word ou Excel s'affichent, eux, comme des fichiers Word ou Excel en véritable aperçu dans les champs OLE, mais ils s'affichent sous forme d'icônes dans les champs Pièces jointes.

Voilà, c'est fini, vous pouvez respirer.

Ce problème d'affichage en icône des images est vraiment dommage, puisque ce serait tellement sympathique d'avoir, directement dans Access la photo des collaborateurs, des produits, des maisons à vendre, ...

Ces soucis d'affichage d'image dans des champs OLE sont un problème récurrent dans Access depuis de nombreuses, nombreuses années, sans que personne n'y ait jamais trouvé de solution véritable.

Il est possible que, dans votre cas, vous voyiez correctement les images en véritable aperçu. Tant mieux pour vous, mais restez vigilant, parce que cette situation peut changer à tout moment !

La simple installation d'un nouveau logiciel peut tout à coup vous réimposer les icones à la place des images. Si vous changez de PC, mais que vous ouvrez la même base de données, vous pourrez avoir également de souci d'affichage en icone.

Si vous connaissez une solution durable, simple et fiable, qui fonctionnne avec Access 2010 en français sous Windows 7, je suis preneur !

En conclusion, je vous propose d'utiliser plutôt le type de champ Pièces jointes, et pas l'objet OLE, avec une seule pièce jointe qui contient une image, si vous voulez une image qui apparaît directement dans votre formulaire

 

Bien. Fermez ce formulaire (Access l'a nommé temporairement T_Client, comme votre table) sans l'enregistrer.

Les pièces jointes sont automatiquement intégrées dans la base de données. C'est à dire que si j'ai un fichier Test d'ébriété.docx sur mon PC et que je l'intègre en tant que pièce jointe dans Access, il s'agira donc une copie du fichier original qui sera intégré.

Liaison ou incorporation OLE?

Par contre, avec les objets OLE, on a la possibilité de lier ou d'intégrer. Faisons le test :

  1. Dans le champ InfoVisuelle de Michael Jackson, insérez le fichier Test d'ébriété.docx, en cochant la case Liaison
  2. Double-cliquez sur ce fichier, et écrivez XXX au début du texte :
  3. Fermez Word, et enregistrez :

Bien entendu, si vous double-cliquez sur ce document , le XXX que vous avez ajouté apparaîtra, et ce, que vous ayez coché la case Liaison , ou pas.

Ce qui change, c'est que si vous allez dans votre explorateur Windows, et que vous ouvrez le fichier depuis là (ou que vous alliez directement dans Word et que vous faites Fichier/ouvrir), vous constaterez que le fichier d'origine a changé : il contient bien XXX au début du texte.

Si vous déplacez le fichier d'origine dans un autre dossier, ou que vous le renommez, le lien OLE ne fonctionnera plus, évidemment.

Si on n'avait pas coché la case liaison, nous aurions seulement modifié la copie locale au sein de la table Access.

Pour vous en persuader, faites ce petit exercice :

Allez dans la feuille de Calcul Microsoft Excel d'Edith Piaf
  • Modifiez Mylord (avec un y) en Milord (avec un i)
  • Fermez Excel, en acceptant d'enregistrer
  • Re-double-cliquez deux fois sur cette feuille de calcul Microsfot Excel, dans le champ InfoVisuelle, et constatez que le i a bien été pris en compte
  • Allez dans votre explorateur Windows
  • Ouvrez Tableau Simple.xlsx en cliquant deux fois dessus, et constatez que dans ce fichier original, il y a toujours le y à Mylord.
  • Afin d'alléger un peu notre base de données, j'ai retiré la vidéo Effet de serre de la table pour la leçon suivante.

    Dans cette leçon, nous avons mis en perspective les champs de type Lien hypertexte avec les champs de type Pièce Jointe et Objet OLE.

    Les champs OLE permettent une liaison ou une incorporation, alors que les pièces jointes ne permettent que l'incorporation. Par contre, les pièces jointes permettent plusieurs fichiers pour un seul enregistrement, et pas les champs OLE.

    La visualisation dans les formulaires et les états est complexe, et obéit à une logique mal définie.

    Dans les tables, on ne peut visualiser les fichiers qu'en les ouvrant véritablement. On peut utiliser des fichiers de toutes sortes (Word, Excel, Vidéo, images, ...) dans les OLE et dans les pièces jointes. Le fait d'intégrer des fichiers alourdit la base de données de manière significative.

    Exercice

    L'exercice consiste à créer une nouvelle base de données que vous nommerez ExerciceLecon011.accdb.

    Vous y créerez une table T_Voiture, avec les champs suivants :

    • Marque (Texte)
    • TypeVoiture (Texte)
    • Resume (Objet OLE)
    • Photo (Pièce jointe)

    Vous allez y créer deux voitures :

    1. Ferrari Enzo
    2. Ford GT40

    Cliquez avec le bouton droit de votre souris sur les fichiers à télécharger ci-dessous, et mettez ces fichiers dans le même dossier que votre base de données ExerciceLecon011 :

    • Téléchargez ici le résumé de la Ferrari
    • Téléchargez ici le résumé de la Ford
    • Téléchargez ici la 1ère photo de la Ford
    • Téléchargez ici la 2ème photo de la Ford
      (La Ferrari n'a pas de photo)

     

    Une fois ces fichiers téléchargés :

    • Intégrez le résumé de la Ferrari dans votre champ OLE sans liaison
    • Intégrez le résumé de la Ford dans votre champ OLE avec liaison
    • Intégrez les deux photos de la Ford dans votre champ Pièce Jointe

    Maintenant, effacez (mettez dans la corbeille) les quatre fichiers que vous avez téléchargé depuis votre explorateur Windows (pas depuis vos champs Resume et Photo !)

    Constatez par-vous-même que vous pouvez cliquer deux fois pour ouvrir le résumé de la Ferrari et les 2 images de la Ford, mais qu'un message d'erreur n'apparaît logiquement que lorsque vous essayez d'ouvrir le résumé de la Ford.

    Allez dans votre corbeille et restaurez le fichier de résumé de la Ford.

    Constatez maintenant que votre lien OLE fonctionne à nouveau.

    Quizz
    1. Un objet OLE permet
    De lier seulement un fichier externe
    De lier ou d'incorporer un fichier externe
    D'incorporer seulement un fichier externe

    Warning: Undefined variable $Q1 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 461

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 461

    Warning: Undefined variable $Q1 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 462

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 462
    2. Combien de fichiers peut-on placer dans un champ Pièce Jointe ?
    1
    3
    5
    Plus de 5

    Warning: Undefined variable $Q2 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 484

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 484

    Warning: Undefined variable $Q2 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 485

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 485
    3. Je ne dispose pas d'Excel, mais je désire toutefois inclure un fichier Excel dans un champ Pièce Jointe
    Ce n'est simplement pas possible
    C'est possible mais on ne pourra pas visualiser le contenu
    C'est possible, et on pourra visualiser le contenu car il est impossible d'installer Access sans installer Excel sur un PC

    Warning: Undefined variable $Q3 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 506

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 506

    Warning: Undefined variable $Q3 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 507

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 507
    4. Peut-on inclure un fichier .exe dans un champ Pièce Jointe ?
    Non. Ou alors, il faut l'inclure dans un .zip
    Non, même si on l'inclut dans un .zip
    Oui

    Warning: Undefined variable $Q4 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 528

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 528

    Warning: Undefined variable $Q4 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 529

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 529
    5. Je double-clique sur un fichier Excel intégré dans un champ de type OLE, et je modifie le contenu d'une cellule
    Ca modifie automatiquement le fichier original sur votre disque dur
    Ca ne modifie jamais le fichier original sur votre disque dur
    Tout dépend si vous avez coché la case Liaison lors de l'intégration ou la liaison du fichier

    Warning: Undefined variable $Q5 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 549

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 549

    Warning: Undefined variable $Q5 in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 550

    Deprecated: strspn(): Passing null to parameter #2 ($characters) of type string is deprecated in /home/clients/a41d66f74bcbcbdeacff232fbcd0dcfe/web/access/cours2010/lecon011/index.php on line 550