Coller l'enregistrement et la photo en même temps dans une base de données

Patrick mwanza 20 Points de réputation
2026-03-07T10:39:41.8666667+00:00

Bonjour,

Je cherche la solution pour mon application Access. Dans mon application, il y a un formulaire qui doit enregistrer l'identité du candidat et sa photo. J'ai trouvé du code qui fait appel de la photo dans l'objet IMAGE et une zone de texte qui donne le chemin d'accès de la photo, les deux en connexion ; ça marche correctement.

Mais le problème se situe à un niveau : une fois j'enregistre l'identité du candidat et je parcours le bouton codé pour aller pendre la photo, la procédure marche mais la photo ne colle pas à l'enregistrement dans la base de données. Enfin, en cherchant à ajouter une seconde photo, la précédente ne quitte pas l'objet IMAGE.

Voici les codes en question :

Dim fd As Object
Dim cheminSource As String
Dim dossierDest As String
Dim nomFichier As String
Dim cheminFinal As String
dossierDest = "C:\Users\Public\Pictures\Sample Pictures"
Set fd = Application.FileDialog(3) ' 3 = msoFileDialogFilePicker
With fd
.Title = "Insérer une image"
.Filters.Clear
.Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp"
If .Show = -1 Then
    cheminSource = .SelectedItems(1)
Else
    Exit Sub ' Annulation
End If
End With
nomFichier = Mid(cheminSource, InStrRev(cheminSource, "") + 1)
cheminFinal = dossierDest & nomFichier
FileCopy cheminSource, cheminFinal
Me.photo = cheminFinal
Me.Image45.Picture = cheminFinal
Microsoft 365 et Office | Access | Pour l'éducation | Windows
0 commentaires Aucun commentaire

Réponse acceptée par l’auteur(e) de la question
Austin-H 8,385 Points de réputation Personnel externe de Microsoft Corporation Modérateur
2026-03-07T15:04:25.68+00:00

Bonjour Patrick mwanza
Cette réponse a été traduite automatiquement. Par conséquent, il peut y avoir des erreurs grammaticales ou des expressions inhabituelles.
Merci d’avoir publié votre question sur le forum Microsoft Q&A.
Ce problème est survenu parce que Microsoft Access n’enregistre pas automatiquement l’enregistrement en cours lorsque les modifications sont effectuées via un bouton de commande. Lorsque votre code a affecté le chemin de l’image au champ, l’enregistrement a été marqué comme modifié mais est resté non enregistré en mémoire. Étant donné qu’Access n’enregistre automatiquement les données que lors d’un changement d’enregistrement ou de la fermeture du formulaire, le chemin de la photo n’a jamais été réellement écrit dans la table, même si cela semblait fonctionner à l’écran.

En parallèle, le contrôle Image utilisé est non lié, ce qui signifie qu’il n’est associé à aucun enregistrement spécifique. Un contrôle Image non lié continue simplement d’afficher la dernière image qui lui a été affectée jusqu’à ce qu’elle soit modifiée manuellement. Comme l’enregistrement n’était pas enregistré et que l’image n’était pas rechargée lors du changement d’enregistrement, la photo précédente restait affichée et ne suivait pas correctement les données du candidat. Le fait de forcer l’enregistrement de l’enregistrement et de recharger l’image lors du changement d’enregistrement permet de corriger ces deux comportements.
Voici la version propre suggérée, veuillez essayer ceci :

Dim fd As Object
Dim cheminSource As String
Dim dossierDest As String
Dim nomFichier As String
Dim cheminFinal As String
dossierDest = "C:\Users\Public\Pictures\Sample Pictures\"
Set fd = Application.FileDialog(3) ' File picker
With fd
    .Title = "Insérer une image"
    .Filters.Clear
    .Filters.Add "Images", "*.jpg; *.jpeg; *.png; *.bmp"
    If .Show <> -1 Then Exit Sub
    cheminSource = .SelectedItems(1)
End With
nomFichier = Mid(cheminSource, InStrRev(cheminSource, "\") + 1)
cheminFinal = dossierDest & nomFichier
FileCopy cheminSource, cheminFinal
Me.photo = cheminFinal          
If Me.Dirty Then Me.Dirty = False  

Veuillez ajouter cet événement Form_Current au module de code du formulaire. L’événement Form_Current s’exécute chaque fois que le formulaire se déplace vers un autre enregistrement ou lorsqu’il est ouvert ou actualisé. Comme les contrôles Image sont non liés, cet événement est l’emplacement correct et pris en charge pour recharger l’image qui correspond à l’enregistrement en cours. Placer ce code ailleurs (clic sur un bouton, module standard, Form_Load) ne permettra pas de mettre à jour l’image de manière fiable lorsque les enregistrements changent.

Private Sub Form_Current()
    If Not IsNull(Me.photo) And Me.photo <> "" Then
        Me.Image45.Picture = Me.photo
    Else
        Me.Image45.Picture = ""
    End If
End Sub

Veuillez essayer cette suggestion et me dire si cela fonctionne.


Si la réponse vous est utile, cliquez sur « Accepter la réponse » et veuillez l’approuver. Si vous avez des questions supplémentaires concernant cette réponse, cliquez sur « Commenter ».

Remarque : Suivez les étapes de notre documentation pour activer les notifications par e‑mail si vous souhaitez recevoir des notifications liées à ce sujet.

Cette réponse vous a-t-elle été utile?

0 commentaires Aucun commentaire

1 réponse supplémentaire

Trier par : Plus récent
  1. Patrick mwanza 20 Points de réputation
    2026-03-08T08:53:30.7766667+00:00

    Bonjour Austin. Je vous donnerai la suite la semaine prochaine. Merci pour l'intervention

    Cette réponse vous a-t-elle été utile?


Votre réponse

Les réponses peuvent être marquées comme « Acceptées » par l’auteur(e) de la question et « Recommandées » par les modérateurs, ce qui aide les utilisateurs à savoir que la réponse a résolu le problème de l’auteur(e).