Gestion de photos par formulaire

Gérer des fichiers de photos externes depuis Access par un formulaire.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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

Image non disponible

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é

Image non disponible

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

Image non disponible

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.

Image non disponible

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

Image non disponible

Par la génération automatique, le formulaire est lié à la table tblSalaries.

IV-B. Ajout des contrôles

Il nous reste à placer le contrôle image qui affichera les photos.

Puis à créer deux boutons de commandes : un pour ajouter/modifier et l'autre pour effacer la photo.

Image non disponible


Le résultat final doit donner ceci :

Image non disponible

V. Codage du formulaire

V-A. Affichage des photos

Nous allons coder en premier lieu l'affichage automatique de l'image.

 
Sélectionnez
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 Sub

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

 
Sélectionnez
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 Sub

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

 
Sélectionnez
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 Sub

strLink = 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]

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Charles A.. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.