Access ne trouve systématiquement pas les photos (erreur 2220)

Résolu
KimCharlotte Messages postés 10 Statut Membre -  
RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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?
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      as-tu supprimé l'espace?
      0
      1. KimCharlotte Messages postés 10 Statut Membre > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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.
        0
      2. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31 > KimCharlotte Messages postés 10 Statut Membre
         
        Pour les chercher avec une requête, utilises
        SELECT * FROM WHERE ... LIKE " & [#] & "
        0
  2. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31
     
    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+
    0
    1. KimCharlotte Messages postés 10 Statut Membre
       
      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.
      0
  3. Tessel75
     
    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.
    0
  4. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31
     
    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+
    0
    1. KimCharlotte Messages postés 10 Statut Membre
       
      Par ce que le chemin du fichier peut varier d'un usager à l'autre.
      0
      1. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31 > KimCharlotte Messages postés 10 Statut Membre
         
        Comment cela varier ?
        Là il est dans le répertoire courant de la base.
        Donc pourquoi restocker ce chemin ????

        A+
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. KimCharlotte Messages postés 10 Statut Membre
     
    Les boutons opt sont mis à jour dans une autre fonction.
    0
  7. KimCharlotte Messages postés 10 Statut Membre
     
    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
    
    
    
    0
    1. KimCharlotte Messages postés 10 Statut Membre
       
      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
      
      0
    2. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31
       
      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+
      0
  8. KimCharlotte Messages postés 10 Statut Membre
     
    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
    0
    1. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31
       
      Yes, mais photochemin est le chemin de la base, donc pas la peine de le restocker...

      A+
      0
      1. KimCharlotte Messages postés 10 Statut Membre > RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention  
         
        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.
        0
      2. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31 > KimCharlotte Messages postés 10 Statut Membre
         
        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
        0
    2. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31
       
      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...
      0
  9. Tessel75
     
    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.
    0
    1. RV71 Messages postés 620 Date d'inscription   Statut Membre Dernière intervention   31
       
      Texte long n'est pas limité à 256 caractères...
      0
    2. KimCharlotte Messages postés 10 Statut Membre
       
      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+
      0