Access ne trouve systématiquement pas les photos (erreur 2220) [Résolu]

Signaler
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020
-
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
-
Bonjour,

Je suis nouvelle sur ce forum même si je le consulte régulièrement. Je programme en VBA depuis près de 20 ans mais il y a toujours de nouveaux problèmes à résoudre.

Je modifie en ce moment une base de données VBA créée en 2008. Elle est maintenant dans Office 365 avec Windows 10.

Depuis le passage à Windows 365, les photos ne peuvent plus être affichées.

L'erreur est une boîte de message titrée "Application Photo" qui dit par exemple
"Le fichier image n'a pas été trouvé à l'emplacement indiqué:
I:\agricole\Fleurs\Achillees\Ptarmiga\AchilleaThePearl.JPG
Or la photo est bien à cet endroit, elles sont toutes là.
C'est le message généré par le code quand on trappe l'erreur 2200.
Or le Dir juste avant trouve bien la photo.

C'est une base de données horticole avec un formulaire qui contient la fiche technique d'un cultivar (c'est aux fleurs ce qu'une race est aux chiens...). Il y a un sous-formulaire lié à une table qui contient l'espèce et le cultivar comme clé, un chemin relatif vers une photo. Il y a aussi une dernier champ qui lui est mis à jour à l'ouverture de la base et qui contient le chemin absolu de la photo à partir de currentprojet.path & "\" & CheminRelatifPhoto.

Cette mis à jour est faite ici
Private Sub Form_Load()

Dim stChemin As String
Dim rstPh As DAO.Recordset
Dim stMsg As String
Dim stSQL As String


On Error GoTo Err_Form_Load

optComplet = False
optVente = False

stChemin = CurrentProject.Path
If Right(stChemin, 1) <> "\" Then stChemin = stChemin & "\"

'Effacer les chemins de photo quand il n'y a rien dans le champ photo
stSQL = "Update tb_Photo Set PhotoChemin = null where Photo is null"
DoCmd.RunSQL stSQL

stSQL = "Update tb_Photo Set PhotoChemin = null where Photo < 'a'"
DoCmd.RunSQL stSQL

'Calculer les chemins des photos et placer dans un hyperlien
stSQL = "SELECT * FROM tb_Photo"
Set rstPh = CurrentDb.OpenRecordset(stSQL, dbOpenDynaset)

With rstPh
While Not .EOF
If Not IsNull(!Photo) Then
.Edit
'Au cas où il y aurait des chaînes vides
If Len(!Photo) > 5 Then !PhotoChemin = stChemin & !Photo
.Update

End If
.MoveNext
Wend

End With

Exit_Form_Load:
Set rstPh = Nothing
Exit Sub

Err_Form_Load:
stMsg = "En ouvrant le menu principal," & vbCrLf & Err.Number & ": " & Err.Description
MsgBox stMsg, vbExclamation, "Erreur"
Resume Exit_Form_Load

End Sub


Et l'affichage de la photo se fait ici dans sfrm_Photo

Private Sub Form_Current()

Dim stDir As String

On Error GoTo Err_Form_Current

' 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.txtPhoto) > 0 Then
stDir = Dir(Me.txtPhoto)
If stDir <> " " Then Me.imgPhoto.Picture = Me.txtPhoto
'txtPhoto est le chemin absolu calculé précédemment
Else
Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
End If

DisplayPhoto

Exit_Form_Current:
Exit Sub

Err_Form_Current:
Select Case Err.Number
Case 2114 'Cas d'un type de fichier photo non supporté ...
MsgBox "Le format de l'image n'est supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
'Me.txtPhoto = 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.txtPhoto, vbCritical + vbOKOnly, "Application Photos"
Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
'Me.txtPhoto = vbNullString
Case Else ' tout autre cas d'erreur
MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
End Select
Err.Clear


Resume Exit_Form_Current



Et la fonction qui ajuste la taille de l'image
Sub DisplayPhoto()
'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.

' Traitement en fonction de la taille de l'image
' regarde si la hauteur de l'image dépasse celle du controle Picture
If Me.imgPhoto.ImageHeight > Me.imgPhoto.Height Then
' met le controle en mode zoom (3)
Me.imgPhoto.SizeMode = 3
'Me.imgPhoto.SizeMode = 0
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
'Me.imgPhoto.SizeMode = 0
End If

End Sub

Sauriez-vous pourquoi la photo n'est pas trouvée?

8 réponses

Messages postés
12759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 octobre 2020
710
bonjour,
peux-tu utiliser les balises de code (en choisissant "basic") quand tu partages du code VBA?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

afin de vérifier à quelle ligne se produit l'erreur, peux-tu provisoirement commenter la ligne "
on error ...
"?

tu écris "le Dir juste avant trouve bien la photo". comment détermines-tu cela?

je suggère de supprimer l'espace entre les guillemets:
If stDir <> "" 


tu écris "Or la photo est bien à cet endroit": as-tu vérifié en utilisant (copier/coller) le nom utilisé dans le programme?
Messages postés
12759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 octobre 2020
710
as-tu supprimé l'espace?
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020
>
Messages postés
12759
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
24 octobre 2020

oui. Je transforme le champ PhotoChemin en lien hypertexte et je reteste. Des obligations familiales m'ont éloignée de mon ordi quelques temps. Désolée du délai.

Hypertexte à texte: J'ai enlevé plein de # hier dans le champ Photo. Impossible de les enlever avec l'outil de recherche, il ne les trouvait pas. Rien ne fonctionnait avant ce ménage. J'en ai ragé un coup. Ma copie contient plusieurs centaines d'enregistrement.
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30 >
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Pour les chercher avec une requête, utilises
SELECT * FROM WHERE ... LIKE " & [#] & "
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30
En complément de yg_be, as-tu suivi les recommandations ici :
https://docs.microsoft.com/en-ca/office/troubleshoot/access/display-images-using-custom-function

A+
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Oui j'ai regardé ça. Outre le fait que je n'ai pas de fichier adp, ça ressemble énormément à mon code.
Faut-il créer un fichier .adp?

J'ai un fichier accdb avec les données qui varie selon les usagers et un fichier accdb contenant la partie programme qui est commune.

La table tb_Photo est dans la partie données.
Bonjour,
En complément de ce que viennent d'écrire Yg_Be et Rv71, tu devrais commencer par faire un "pas à pas" de ton code, pour repérer exactement la ligne où il bloque; et à partir de là voir ce qu'il faut réparer. Et vérifier aussi ce qu'il prend pour valeur de tes paramètres de chemin d'accès. Prend-il seulement le bon chemin d'accès pour aller à ton dossier de photos, ou se perd-il en cours de route vers un autre dossier?
Peut-être l'as-tu déjà fait? Alors excuse-moi.
Une autre solution serait de passer en mode "pièce jointe", mais encore faut--il que le nombre ne soit pas trop important.
Bon courage.
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30
Je viens de relire, c'est office365 qui t'oblige à tout ce binz ?
Aussi,
optComplet = False
optVente = False

Ne sont pas mis à jour ?
Je ne comprends pas trop où tu veux en venir avec ta mise à jour, pourquoi ne pas créer uniquement un champ texte dans lequel tu mettrais le nom du fichier .jpg ?

A+
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Par ce que le chemin du fichier peut varier d'un usager à l'autre.
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30 >
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Comment cela varier ?
Là il est dans le répertoire courant de la base.
Donc pourquoi restocker ce chemin ????

A+
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Les boutons opt sont mis à jour dans une autre fonction.
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Voilà qui devrait être plus lisible. Encore une fois désolée.

Private Sub Form_Load()

Dim stChemin As String
Dim rstPh As DAO.Recordset
Dim stMsg As String
Dim stSQL As String


On Error GoTo Err_Form_Load

optComplet = False
optVente = False

stChemin = CurrentProject.Path
If Right(stChemin, 1) <> "\" Then stChemin = stChemin & "\"

'Effacer les chemins de photo quand il n'y a rien dans le champ photo
stSQL = "Update tb_Photo Set PhotoChemin = null where Photo is null"
DoCmd.RunSQL stSQL

stSQL = "Update tb_Photo Set PhotoChemin = null where Photo < 'a'"
DoCmd.RunSQL stSQL

'Calculer les chemins des photos et placer dans un hyperlien
stSQL = "SELECT * FROM tb_Photo"
Set rstPh = CurrentDb.OpenRecordset(stSQL, dbOpenDynaset)

With rstPh
While Not .EOF
If Not IsNull(!Photo) Then
.Edit
'Au cas où il y aurait des chaînes vides
If Len(!Photo) > 5 Then !PhotoChemin = stChemin & !Photo
.Update

End If
.MoveNext
Wend

End With

Exit_Form_Load:
Set rstPh = Nothing
Exit Sub

Err_Form_Load:
stMsg = "En ouvrant le menu principal," & vbCrLf & Err.Number & ": " & Err.Description
MsgBox stMsg, vbExclamation, "Erreur"
Resume Exit_Form_Load

End Sub


'Fonction qui ne trouve pas la photo
Private Sub Form_Current()

Dim stDir As String

On Error GoTo Err_Form_Current

' 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.txtPhoto) > 0 Then
stDir = Dir(Me.txtPhoto)
If stDir <> " " Then Me.imgPhoto.Picture = Me.txtPhoto  'Ça bloque ici, erreur 2220
'txtPhoto est le chemin absolu calculé précédemment
Else
Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
End If

DisplayPhoto

Exit_Form_Current:
Exit Sub

Err_Form_Current:
Select Case Err.Number
Case 2114 'Cas d'un type de fichier photo non supporté ...
MsgBox "Le format de l'image n'est supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
'Me.txtPhoto = 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.txtPhoto, vbCritical + vbOKOnly, "Application Photos"
Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
'Me.txtPhoto = vbNullString
Case Else ' tout autre cas d'erreur
MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
End Select
Err.Clear


Resume Exit_Form_Current



'Et la fonction qui ajuste la taille de l'image

Sub DisplayPhoto()
'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.

' Traitement en fonction de la taille de l'image
' regarde si la hauteur de l'image dépasse celle du controle Picture
If Me.imgPhoto.ImageHeight > Me.imgPhoto.Height Then
' met le controle en mode zoom (3)
Me.imgPhoto.SizeMode = 3
'Me.imgPhoto.SizeMode = 0
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
'Me.imgPhoto.SizeMode = 0
End If

End Sub


Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Dommage que les balises ne préservent pas l'indentation. Ce serait encore plus lisible.
En mode pas à pas j'affiche le chemin du fichier passé à a fonction dir.

Comme j'ai déjà affiché la photo dans la fonction suivante, l'adresse est correcte.
Dans cette fonction je n'ai pas l'erreur 2220.

Private Sub cmdAjoutModifPhoto_Click()
' Bouton d'ajout - modification de photo
    
Dim strLink As String
Dim stPhoto As String       'Ce qu'il faut conserver du chemin dans la base de données
Dim stSQL As String
Dim stTitre As String

On Error GoTo err_cmdAjoutModifPhoto_Click
    
    stTitre = "Choisissez une photo de " & Me.Parent!Nom & " " & Me.Parent!Cultivar
    ' récupération du chemin physique de la photo
    ' par la boite de dialogue
    strLink = modFichiers.ChoisirFichier(stTitre)
    ' si la boite renvoie une adresse non nulle
    If Len(strLink) > 0 Then
        ' tentative d'affichage de la photo
        Me.imgPhoto.Picture = strLink
        
        'Sauvegarde d'une portion du chemin relative au projet dans la base de données
        iPos = Len(CurrentProject.Path)
        stPhoto = Right(strLink, Len(strLink) - iPos - 1)
        Me.txtPhoto = stPhoto
        
        DoEvents
         
        If Me.Dirty Then Me.Dirty = False
        
        stSQL = "UPDATE tb_Photo SET PhotoChemin = '" & strLink & "' WHERE Nom = '" & Me.Parent!Nom & "' AND Cultivar = '" & Me.Parent!Cultivar & "'"
        DoCmd.RunSQL stSQL
        
    End If
    
    DisplayPhoto
    
Exit_cmdAjoutModifPhoto_Click:
    Exit Sub

err_cmdAjoutModifPhoto_Click:
    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 supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
            GoTo Exit_cmdAjoutModifPhoto_Click
        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.txtPhoto, vbCritical + vbOKOnly, "Application Photos"
            GoTo Exit_cmdAjoutModifPhoto_Click
        Case Else   ' tout autre cas d'erreur
            MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
    End Select
    Err.Clear
    Resume Exit_cmdAjoutModifPhoto_Click
    
End Sub
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30
Tu ne peux pas mettre les chemins dans un champ typé texte au lieu d'hypertexte ?

Aussi, ça serait un + si tu donnais la structure de la table tb_Photo et à quoi correspondent les controles imgphoto et txtPhoto...

A+
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

oui J'ai pensé au champ texte. Bonne idée.

J'avais peur que ça ne fonctionne pas. Il devais bien y avoir une raison pour le mettre en hypertexte lors de la conception de la BD mais si ça peut régler le problème pourquoi pas.

tb_Photo (structure)
Nom Texte court
Cultivar Texte court
Photo texte long
PhotoChemin Lien Hypertexte Je copie la table et change ça pour texte long
Reprendre Photo oui/non
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30
Yes, mais photochemin est le chemin de la base, donc pas la peine de le restocker...

A+
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020
>
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020

Pour les # voir réponse à yg_be.

Utiliser seulement le champ Photo: J'ai pensé à ça aussi. Apparemment que ça a été fait comme ça parce qu'il y avait des problèmes pour charger les photos autrement. Ça pourrait valoir la peine de tester à nouveau avec la nouvelle version de Windows et d'access.

Merci.

Je viens de tester ça et les photos ne s'affichent pas si elles sont déjà dans la base de données, seulement quand on en ajoute. Par contre il n'y a plus d'erreur 2220.

La structure de tb_photo est devenue
Nom Texte court
Cultivar Texte court
Photo texte long
FichierPhotoIntrouvable oui/non
Reprendre Photo oui/non

La fonction au changement d'enregistrement est devenue
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 chemin vers la photo 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.

Dim stDir As String

' Gestion des erreurs
On Error GoTo Err_Form_Current


  'Effacer la photo avant de passer à l'enregistrement suivant sinon elle reste
  Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
  
' 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.txtPhoto) > 0 Then
        stDir = Dir(Me.txtPhoto)
        If stDir <> "" Then
            Me.imgPhoto.Picture = CurrentProject.Path & "\" & Me.txtPhoto
        End If
    
    End If

    DisplayPhoto
    
    
Exit_Form_Current:
    Exit Sub

Err_Form_Current:
    Select Case Err.Number
    
        Case 2114  'Cas d'un type de fichier photo non supporté ...
            MsgBox "Le format de l'image n'est supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
            Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
            'Me.txtPhoto = 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.txtPhoto, vbCritical + vbOKOnly, "Application Photos"
            Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
            stSQL = "UPDATE tb_Photo SET FichierPhotoIntrouvable = TRUE WHERE Nom = '" & Me.Nom & _
                "' AND Cultivar = '" & Me.Cultivar & "'"
                
        Case Else   ' tout autre cas d'erreur
            MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
    End Select
    
    Err.Clear
    Resume Exit_Form_Current

End Sub


La fonction pour ajouter une photo est devenue
Private Sub cmdAjoutModifPhoto_Click()
' Bouton d'ajout - modification de photo
    
Dim strLink As String
Dim stPhoto As String       'Ce qu'il faut conserver du chemin dans la base de données
Dim stSQL As String
Dim stTitre As String

On Error GoTo err_cmdAjoutModifPhoto_Click
    
    stTitre = "Choisissez une photo de " & Me.Parent!Nom & " " & Me.Parent!Cultivar
    ' récupération du chemin physique de la photo
    ' par la boite de dialogue
    strLink = modFichiers.ChoisirFichier(stTitre)
    ' si la boite renvoie une adresse non nulle
    If Len(strLink) > 0 Then
        ' tentative d'affichage de la photo
        Me.imgPhoto.Picture = strLink
        
        'Sauvegarde d'une portion du chemin relative au projet dans la base de données
        iPos = Len(CurrentProject.Path)
        stPhoto = Right(strLink, Len(strLink) - iPos - 1)
        Me.txtPhoto = stPhoto
        
        DoEvents
         
        If Me.Dirty Then Me.Dirty = False
        
    End If
    
    DisplayPhoto
    
Exit_cmdAjoutModifPhoto_Click:
    Exit Sub

err_cmdAjoutModifPhoto_Click:
    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 supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
            GoTo Exit_cmdAjoutModifPhoto_Click
        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.txtPhoto, vbCritical + vbOKOnly, "Application Photos"
            GoTo Exit_cmdAjoutModifPhoto_Click
        Case Else   ' tout autre cas d'erreur
            MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
    End Select
    Err.Clear
    Resume Exit_cmdAjoutModifPhoto_Click
    
End Sub


La fonction à l'ouverture de la base de donnée ne s'occupe plus des photos et est devenue
Private Sub Form_Load()

Dim stMsg As String

On Error GoTo Err_Form_Load

    optComplet = False
    optVente = False
    
    
Exit_Form_Load:
    Set rstPh = Nothing
    Exit Sub
    
Err_Form_Load:
    stMsg = "En ouvrant le menu principal," & vbCrLf & Err.Number & ": " & Err.Description
    MsgBox stMsg, vbExclamation, "Erreur"
    Resume Exit_Form_Load

End if




Donc il reste un détail, et non pas le moindre, faire afficher les photos sans lien hypertexte.
Merci tout le monde. Ça avance.
Je fouille l'internet et je vous reviendrai là-dessus.
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30 >
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Ce que je ne comprends pas, c'est pourquoi tu ne mets pas dans ton (sous) formulaire un controle image, lequel est basé sur le champ de la table...
Access t'affiche l'image normalement, sans passer par du code. En tous cas cela fonctionne pour les .png
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30
Méfies toi en transformant en texte long, il est arrivé encore récemment que des "#" soit rajoutés en début et fin de texte...
Si je peux ajouter mon grain de sel !
Pourquoi entrer le chemin dans un champ, que ce soit texte ou hypertexte, puisque de toute façon le chemin est gardé en mémoire pendant toute la procédure et effacé à la fermeture?
Par ailleurs, tu te demandais pourquoi le format était hypertexte et non pas texte. Il faut faire attention parce que le champ d'un texte est limité à 252 caractères, ce qui n 'est pas le cas d'un champ hypertexte, et si la procédure est utilisée par des ordis différents le chemin sera différent et tu dois prévoir toutes les configurations possibles, d'où l'avantage d'un lien hypertexte. Mais c'est justement une difficulté que tu évites en gardant le lien en mémoire dans la procédure, parce que là tu n'as pas cette limite du nbre de caractères.
Messages postés
456
Date d'inscription
mardi 14 avril 2020
Statut
Membre
Dernière intervention
24 octobre 2020
30
Texte long n'est pas limité à 256 caractères...
Messages postés
10
Date d'inscription
samedi 18 juillet 2020
Statut
Membre
Dernière intervention
20 juillet 2020

Ok J'ai trouvé pourquoi et mon code est maintenant. Donc si je vais sur un enregistrement, la photo n'affiche pas toujours mais si je la recharge et que je ferme la BD, elle affiche quand j'ouvre la BD à nouveau. Donc il reste à recharger les photos récalcitrantes.

Merci tout le monde!!!!
Je suis tellement contente!!!!!

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 chemin vers la photo 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.

Dim stDir As String
Dim stChemin As String

' Gestion des erreurs
On Error GoTo Err_Form_Current


  'Effacer la photo avant de passer à l'enregistrement suivant sinon elle reste
  Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
  
' 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.txtPhoto) > 0 Then
        stChemin = CurrentProject.Path & "\" & Me.txtPhoto
        stDir = Dir(stChemin)
        If stDir <> "" Then
            Me.imgPhoto.Picture = stChemin
        End If
    
    End If

    DisplayPhoto
    
    
Exit_Form_Current:
    Exit Sub

Err_Form_Current:
    Select Case Err.Number
    
        Case 2114  'Cas d'un type de fichier photo non supporté ...
            MsgBox "Le format de l'image n'est supporté par le contrôle image Picture", vbCritical + vbOKOnly, "Application Photos"
            Me.imgPhoto.Picture = CurrentProject.Path & "\images\blank.jpg"
            'Me.txtPhoto = 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.txtPhoto, vbCritical + vbOKOnly, "Application Photos"
            Me.imgPhoto.Picture = CurrentProject.Path & "\blank.jpg"
            stSQL = "UPDATE tb_Photo SET FichierPhotoIntrouvable = TRUE WHERE Nom = '" & Me.Nom & _
                "' AND Cultivar = '" & Me.Cultivar & "'"
                
        Case Else   ' tout autre cas d'erreur
            MsgBox "Erreur inattendue : " & Err.Number & vbCrLf & Err.Description, vbCritical + vbOKOnly, "Application Photos"
    End Select
    
    Err.Clear
    Resume Exit_Form_Current

End Sub

Sub DisplayPhoto()
'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.

' Traitement en fonction de la taille de l'image
' regarde si la hauteur de l'image dépasse celle du controle Picture
    If Me.imgPhoto.ImageHeight > Me.imgPhoto.Height Then
    ' met le controle en mode zoom (3)
        Me.imgPhoto.SizeMode = 3
        'Me.imgPhoto.SizeMode = 0
    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
        'Me.imgPhoto.SizeMode = 0
    End If
End Sub


A+