I. Introduction▲
On constate sur le forum Access un grand nombre de questions relatives à la gestion des images.
Il est vrai que MS-Access sait gérer et stocker des fichiers images dans ses tables, mais il n'est pas spécialisé dans ces fonctions.
On pourra ainsi lire très souvent qu'il faut adopter une méthode différente.
Personnellement, je préconise de laisser les fichiers à l'extérieur de la base, en les stockant dans un sous-répertoire dédié.
Ce tutoriel se propose de présenter un cas très simple de gestion des images externes à la base.
II. Rendu final et utilisation▲
Voici le rendu final, du tutoriel, un formulaire qui recense les salariés d'une PME avec l'affichage d'une photo pour chacun d'eux.
On trouvera sur le formulaire, deux boutons de commande pour attribuer/effacer une photo d'un salarié
En cliquant sur le bouton "Ajouter/Modifier Photo" on pourra parcourir les disques pour pointer sur la photo de l'employé.
III. Structure des données▲
L'application réduite à son minimum se contentera d'une table : tblSalaries : Table des salariés
On a défini le champ Photo de la table tblSalaries en type Texte.
Au lieu de stocker physiquement la photo dans la base/table, on va se contenter de stocker le chemin de son emplacement physique.
Cette information sera stockée dans le champ Photo, sous forme de chaîne de caractères.

Voici les quelques données contenues dans la table tblSalaries.
IV. Conception du formulaire▲
IV-A. Génération automatique▲
La construction du formulaire sera facilitée par l'assistant formulaire instantané.
Il suffira pour cela de sélectionner la table tblSalaries dans la fenêtre de base de données et de cliquer sur l'icône "Formulaire instantané" ou MENU > Insertion > Formulaire instantané.
Par la génération automatique, le formulaire est lié à la table tblSalaries.
IV-B. Ajout des contrôles▲
V. Codage du formulaire▲
V-A. Affichage des photos▲
Nous allons coder en premier lieu l'affichage automatique de l'image.
Private Sub Form_Current()
' L'événement Activation (Current) se produit lorsque le focus passe à un enregistrement
' donné pour en faire l'enregistrement en cours, ou lorsque le formulaire est
' Actualisé ou en Actualisation.
' si le nom du salarié est non vide : on visualise un enregistrement
' sinon cela indique que nous sommes sur un enregistrement vierge, donc en cours de saisie.
' Me.Caption : gère le titre du formulaire.
If Len(Me.Nom) > 0 Then
Me.Caption = "Détails pour le salarié : " & Me.Nom & " - " & Me.Prénom
Else
Me.Caption = "Saisie d'un nouveau salarié"
End If
' Gestion des erreurs
On Error GoTo Catch02
' si la photo n'est pas définie, on affiche la photo blank.jpg
' CurrentProject.Path : est le chemin de l'application
If Len(Me.Photo) > 0 Then
Me.imgPhoto.Picture = Me.Photo
Else
Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
End If
DisplayPhoto
Exit Sub
Catch02 :
Select Case Err.Number
Case 2114
'Cas d'un type de fichier photo non supporté ...
MsgBox "Le format de l'image n'est pas supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
Me.Photo = vbNullString
Case 2220
'Cas d'un emplacement non valide du fichier image
MsgBox "Le fichier image n'a pas été trouvé à l'emplacement indiqué : " & vbCrLf & _
Me.Photo, vbCritical + vbOKOnly, "Application Photos"
Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
Me.Photo = vbNullString
Case Else
' tout autre cas d'erreur
MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
End Select
Err.Clear
End SubMe.imgPhoto.Picture = Me.Photo : la propriété .Picture attribue le chemin physique de la photo au contrôle image, ce qui a pour effet son affichage immédiat.
Le chemin physique a été stocké dans la base via le champ Photo qui est dans le contrôle Photo.
DisplayPhoto est la sub d'affichage des photos dans le contrôle Image appelé : imgPhoto.
Cette procédure ajuste l'affichage de la photo au cas où ses dimensions dépasseraient celles du contrôle photo.
Me.imgPhoto.ImageHeight : donne la hauteur de la Photo (Fichier .jpg par exemple)
Me.imgPhoto.Height : donne la hauteur du contrôle d'affichage.
Sub DisplayPhoto()
' Traitement en fonction de la taille de l'image
' regarde si la hauteur de l'image dépasse celle du contrôle Picture
If Me.imgPhoto.ImageHeight > Me.imgPhoto.Height Then
' met le contrôle en mode zoom
Me.imgPhoto.SizeMode = 3
Else
' met le contrôle en mode respect de la taille originale
Me.imgPhoto.SizeMode = 0
End If
' si la largeur dépasse et qu'on est en mode taille réelle ...
If (Me.imgPhoto.ImageWidth > Me.imgPhoto.Width) And (Me.imgPhoto.SizeMode) = 0 Then
' on met en mode zoom
Me.imgPhoto.SizeMode = 3
End If
End SubV-B. Ajout - Suppression des photos▲
Nous créons les deux sub d'événement Clic de nos boutons de commande nommés :
. cmdDelete : bouton d'effacement de la photo ;
. cmdPhoto : bouton d'ajout / modification de la photo.
Private Sub cmdDelete_Click()
' Bouton de commande d'effacement de la photo
' supprime l'adresse de la photo
Me.Photo = vbNullString
' affiche l'image blank.jpg
Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
' redimensionne la photo
DisplayPhoto
End Sub
Private Sub cmdPhoto_Click()
' Bouton d'ajout - modification de photo
Dim strLink As String
' Gestion des erreurs
On Error GoTo Catch01
' récupération du chemin physique de la photo
' par la boite de dialogue
strLink = OuvrirUnFichier(Me.Hwnd, _
"Sélectionner une photo pour le salarié " & Me.Nom, _
1)
' si la boite renvoie une adresse non nulle
If Len(strLink) > 0 Then
' tentative d'affichage de la photo
Me.imgPhoto.Picture = strLink
Me.Photo = strLink
End If
DisplayPhoto
Exit Sub
Catch01 :
Select Case Err.Number
Case 2114
'Cas d'un type de fichier photo non supporté ...
' on sort de la procédure
MsgBox "Le format de l'image n'est pas supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
Exit Sub
Case 2220
'Cas d'un emplacement non valide du fichier image
MsgBox "Le fichier image n'a pas été trouvé à l'emplacement indiqué : " & vbCrLf & _
Me.Photo, vbCritical + vbOKOnly, "Application Photos"
Exit Sub
Case Else
' tout autre cas d'erreur
MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
End Select
Err.Clear
End SubstrLink = OuvrirUnFichier(...
Attribue à la chaîne strLink le chemin renvoyé par la boite de dialogue de pointage de fichier.
On ne reviendra pas sur le codage de la fonction OuvrirUnFichier() qui est disponible dans la FAQ : ici.
VI. Conclusion▲
J'espère que ce court tutoriel vous aura permis de vous familiariser avec la gestion des images externes dans MS Access.
Vous pourrez trouver la base exemple et les photos qui l'accompagnent dans le fichier .zip suivant : Base exemple du tutoriel [99 ko]










