je pense que j'utiliserais un champ texte (taille 255)pour la référence de l'image
j'utilise une fonction qui affiche l'image en association avec son chemin sur le réseau .
exemple
je crée un livre de recette et je voudrais joindre la photo de la recette sur mon formulaire
je crée deux boutons sur mon formulaire, un pour ajouter la photo, un autre pour le supprimer:
je crée la zone texte qui a comme source de contrôle [photdela recette]
je la nomme ImagePath
je crée un cadre image vide que je nomme ImageFrame
je crée une étiquette que je nomme ErrorMsg
pour un état quif quif à part que l'on supprimme toutes les fonctions en rapport avec les deux boutons
essaie un peu
Dim path As String
Dim intClosing As Integer
Private Sub AddPicture_Click()
' Utilise la boîte de dialogue Ouvrir fichier d'Office pour obtenir
' un nom de fichier à utiliser comme photo pour la recette.
getFileName
End Sub
Private Sub Form_RecordExit(Cancel As Integer)
' Masque le texte errormsg pour réduire le clignotement lors de
' la navigation entre les enregistrements.
ErrorMsg.Visible = False
End Sub
Private Sub RemovePicture_Click()
' Efface le nom de fichier pour l'enregistrement de la recette et
' affiche le texte errormsg.
Me![ImagePath] = ""
hideImageFrame
ErrorMsg.Visible = True
End Sub
Private Sub Form_AfterUpdate()
affiche le texte errormsg si aucun nom de fichier n'existe
' pour l'enregistrement de la recette ou affiche la photo si un nom de
' fichier existe.
On Error Resume Next
showErrorMessage
showImageFrame
If (IsRelative(Me!ImagePath) = True) Then
Me![ImageFrame].Picture = path & Me![ImagePath]
Else
Me![ImageFrame].Picture = Me![ImagePath]
End If
End Sub
Private Sub ImagePath_AfterUpdate()
' Affiche une photo de la recette après l'avoir sélectionnée.
On Error Resume Next
showErrorMessage
showImageFrame
If (IsRelative(Me!ImagePath) = True) Then
Me![ImageFrame].Picture = path & Me![ImagePath]
Else
Me![ImageFrame].Picture = Me![ImagePath]
End If
End Sub
Private Sub Form_Current()
' Affiche la photo pour l'enregistrement de la recette en cours si
' cette photo existe. Si le nom de fichier n'existe plus ou si le
' nom de fichier est vide pour la recette en cours, donne au texte
' errormsg la valeur appropriée.
Dim res As Boolean
Dim fName As String
path = CurrentProject.path
On Error Resume Next
ErrorMsg.Visible = True
If Not IsNull(Me![photdela recette]) Then
res = IsRelative(Me![photdela recette])
fName = Me![ImagePath]
If (res = True) Then
fName = path & "\" & fName
End If
Me![ImageFrame].Picture = fName
showImageFrame
Me.PaintPalette = Me![ImageFrame].ObjectPalette
If (Me![ImageFrame].Picture <> fName) Then
hideImageFrame
ErrorMsg.Caption = "Impossible de trouver la photo"
ErrorMsg.Visible = True
End If
Else
hideImageFrame
ErrorMsg.Caption = "Cliquez sur Ajouter/Modifier pour ajouter une photo"
ErrorMsg.Visible = True
End If
End Sub
Sub getFileName()
' Affiche la boîte de dialogue Ouvrir fichier d'Office afin de choisir
' un nom de fichier pour l'enregistrement de la recette en cours.
' Si l'utilisateur sélectionne un fichier, la photo correspondante
' est affichée dans le contrôle image.Attention ce n'est valable que pour la référence disponible dans Office10 (access2002, office 2002)
Dim fileName As String
Dim result As Integer
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Sélectionner une photo pour la recette"
.Filters.Add "Tous les fichiers", "*.*"
.Filters.Add "Fichiers JPEG", "*.jpg"
.Filters.Add "Bitmaps", "*.bmp"
.FilterIndex = 3
.AllowMultiSelect = False
.InitialFileName = CurrentProject.path
result = .Show
If (result <> 0) Then
fileName = Trim(.SelectedItems.Item(1))
Me![ImagePath].Visible = True
Me![ImagePath].SetFocus
Me![ImagePath].Text = fileName
Me![ImagePath].Visible = False
Me.Refresh
End If
End With
End Sub
Sub showErrorMessage()
' Affiche le texte errormsg si le fichier image n'est pas disponible.
If Not IsNull(Me![photdela recette]) Then
ErrorMsg.Visible = False
Else
ErrorMsg.Visible = True
End If
End Sub
Function IsRelative(fName As String) As Boolean
' Renvoie FAUX si le nom de fichier contient un lecteur
' ou un chemin UNC.
IsRelative = (InStr(1, fName, ":") = 0) And (InStr(1, fName, "\\") = 0)
End Function
Sub hideImageFrame()
' Masque le contrôle image.
Me![ImageFrame].Visible = False
End Sub
Sub showImageFrame()
' Affiche le contrôle image.
Me![ImageFrame].Visible = True
End Sub