Photo dans un formulaire

Résolu
djodjo5700 Messages postés 64 Statut Membre -  
djodjo5700 Messages postés 64 Statut Membre -
Bonjour,
je suis en train d'élaboré un formulaire ressemblant à un formulaire de contact, dans lequel se trouve un cadre image "Image 1" et je voudrais y insérer une photo d'identité en fonction d'un nom se trouvant dans la "ComboBox 1" tout en sachant que plusieurs personne ayant le même patronyme peuvent se trouver dans ma BD. Mon fichier étant et sera toujours sur une clef USB, vaut-il mieux stocker les photos d'identités dans le fichier Excel ou alors dans un document sur ma clef?

Merci par avance

22 réponses

  • 1
  • 2
Résumé de la discussion

Le problème porte sur le chargement dynamique d'une photo d'identité à partir d'un nom sélectionné dans une ComboBox d'un formulaire Excel VBA, en tenant compte d'un stockage sur clé USB. La meilleure réponse conseille de charger l'image lors d'un changement de valeur dans la ComboBox plutôt qu'au clic sur l'image, et de vérifier que le chemin d'accès soit correct et accessible. Plusieurs avertissent des pièges des chemins absolus sur clé USB et recommandent de construire le chemin avec ThisWorkbook.Path et d'un sous-dossier fiable, comme PhotosIdent ou Photos, afin d'éviter les erreurs LoadPicture.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Mon fichier étant et sera toujours sur une clef USB, vaut-il mieux stocker les photos d'identités dans le fichier Excel ou alors dans un document sur ma clef?

    Il vaut mieux placer toutes tes photos dans un répertoire de ta clé plutôt que dans le fichier Excel.
    Pour les récupérer :
    Chemin = ThisWorkbook.Path & "\Mes Photos\" 
    Img = "DUPONTVincent.jpg"
    Image1.Picture = LoadPicture(Chemin & Img)


    tout en sachant que plusieurs personne ayant le même patronyme peuvent se trouver dans ma BD
    Il te faudra donc trouver un subterfuge, VBA n'étant pas voyant.
    0
  2. djodjo5700 Messages postés 64 Statut Membre
     
    Je te remercie pour ta réponse mais je viens seulement de débuter . alors si j'ai bien compris, je clique sur Image1 et je rentre ta formule, tout en changeant bien sur le chemin d'accès de mes photos
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Oula...
      Non, tu n'y es pas.

      Ton Image doit être chargée quand?
      Lors d'un clic sur le contrôle Image ou lors d'un changement de valeur dans la Combobox noms?
      0
      1. djodjo5700 Messages postés 64 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Je voudrai que mon image change lorsque le nom se trouvant dans ma ComBox1 change
        0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      Peux-tu envoyer ton fichier via https://www.cjoint.com/ ?
      0
  3. djodjo5700 Messages postés 64 Statut Membre
     
    Ou La LA trop compliqué pour moi tout çà je viens de commencer l semaine dernière.

    Merci tout de même

    Jean-Marie
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Voir ceci plus simple:

    http://www.cjoint.com/data3/3LlpzFAEZJy.htm
    0
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Alors, dans le module de l'Userform :

    Private Sub ComboBox1_Change()
    If ComboBox1 = "" Then Exit Sub
    Chemin = ThisWorkbook.Path & "\Mes Photos\" 
    Img = ComboBox1.Value & ".jpg"
    Image1.Picture = LoadPicture(Chemin & Img) 
    End Sub


    A adapter à ton jus bien sur.....
    0
    1. djodjo5700 Messages postés 64 Statut Membre
       
      Je viens de le faire et il m'ecrit:
      Erreur de compilation:
      Nom ambigu détecté: ComboBox1_change

      Private Sub ComboBox1_Change()
      Dim Ligne As Long
      Dim I As Integer
         If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        Ligne = Me.ComboBox1.ListIndex + 2
        For I = 1 To 25
       Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
        Next I
       End Sub
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Je vais regarder avec ton fichier.
      0
  7. djodjo5700 Messages postés 64 Statut Membre
     
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Tu n'as pas géré les doublons de noms, je ne peut donc rien faire.
      0
    2. djodjo5700 Messages postés 64 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Que faire alors
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > djodjo5700 Messages postés 64 Statut Membre
       
      Un exemple de ce qu'il est possible de faire :
      Ajoute une colonne dans ta base de données
      remplit là avec une concaténation de trois colonnes : ID + NOM + Prénom

      Remplit ta combobox avec cette colonne, tu n'auras plus de doublons...
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ah oui...
      Et, du coup, tes photos seront à enregistrer sous : ID NOM Prénom.jpg
      0
    5. djodjo5700 Messages postés 64 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      ok merci je cherche la signification de concaténation et fait un essai
      0
  8. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Donc,

    - Pour remplir ta combobox avec les données sans doublons :
    Dans la procédure UserForm_Initialize, remplace la ligne :
    .AddItem Ws.Range("A" & J)

    Par
    .AddItem Ws.Range("AQ" & J)

    Pour obtenir :
    'Correspond au programme du FORULAIRE
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer
    
      Set Ws = Sheets("SP") 'Attention ce nom doit correspondre au nom de votre ONGLET
    
      With Me.ComboBox1
        For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
          .AddItem Ws.Range("AQ" & J)
        Next J
      End With
       
      For I = 1 To 25
        Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
    Next I
    End Sub 

    Regarde comment s'affichent tes noms maintenant...

    - Dans le répertoire qui contient ton fichier excel, créées un nouveau dossier, l'appeler "photos" et y enregistrer tes images en "formatant" leurs noms comme ceci : ID NOM Prénom. Exactement comme ce qui s'affiche dans la Combobox.

    - Changer le code de la procédure ComboBox_Change() comme ceci :
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    Dim Chemin As String, Img As String
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 2
      For I = 1 To 25
         Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
      Next I
    Chemin = ThisWorkbook.Path & "\photos\" 
    Img = ComboBox1.Value & ".jpg"
    Image1.Picture = LoadPicture(Chemin & Img)
    End Sub

    0
  9. djodjo5700 Messages postés 64 Statut Membre
     
    Je vous remercie tous, mais là je vais exploser. je mélange tout. je vais recommencer mon fichier et reviens vers vous.
    0
  10. djodjo5700 Messages postés 64 Statut Membre
     
    Je viens de refaire un fichier complétement basiq tout fonctionne correctement jusqu'au moment ou j'essaye de rentrer la photo en fonction de ma ComboBox1
    Visiblement il ne trouve pas le chemin de mon fichier photo qui est:
    G:\Base de donnée\Photos

    Je reçois le message d'erreur '75':
    Erreur d'accés Chemin/fichier

    Option Explicit
    Dim Ws As Worksheet

    'Correspond au programme du bouton QUITTER
    Private Sub CommandButton1_Click()
    Unload Me
    End Sub

    Private Sub Image1_Click()

    End Sub

    Private Sub RefEdit4_BeforeDragOver(Cancel As Boolean, ByVal Data As MSForms.DataObject, ByVal x As stdole.OLE_XPOS_CONTAINER, ByVal y As stdole.OLE_YPOS_CONTAINER, ByVal DragState As MSForms.fmDragState, Effect As MSForms.fmDropEffect, ByVal Shift As Integer)

    End Sub

    'Correspond au programme du FORULAIRE
    Private Sub UserForm_Initialize()
    Dim J As Long
    Dim I As Integer

    Set Ws = Sheets("Feuil1") 'Attention ce nom doit correspondre au nom de votre ONGLET

    With Me.ComboBox1
    For J = 2 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    .AddItem Ws.Range("A" & J)
    Next J
    End With

    For I = 1 To 8
    Me.Controls("TextBox" & I).Visible = True 'affiche les données dans les textbox
    Next I
    End Sub

    'Correspond au programme du bouton MODIFIER
    Private Sub CommandButton2_Click()
    If MsgBox("Etes-vous certain de vouloir modifier ce produit ?", vbYesNo, "Demande de confirmation") = vbYes Then
    Dim Ligne As Long
    Dim I As Integer
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2

    For I = 1 To 8
    If Me.Controls("TextBox" & I).Visible = True Then
    Ws.Cells(Ligne, I + 1) = Me.Controls("TextBox" & I)
    End If
    Next I
    End If
    'Code permettant de modifier le format de la plage de cellule en format nombre
    With Ws.Range("D2:d10")
    .NumberFormat = "0"
    .Value = .Value
    End With
    End Sub

    'Correspond au programme de la LISTE DEROULANTE
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    Dim Chemin As String, Img As String
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    For I = 1 To 8
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
    Next I
    Chemin = ThisWorkbook.Path & "\G:\Base de donnée\Photos\"
    Img = ComboBox1.Value & ".jpg"
    Image1.Picture = LoadPicture(Chemin & Img)
    End Sub



    Ne doit pas donner des informations à l'outils "Image1"?
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Chemin = ThisWorkbook.Path & "\G:\Base de donnée\Photos\" 

      En supposant que ton fichier Excel est dans G:\Base de donnée\, Chemin prendra la valeur
      G:\Base de donnée\G:\Base de donnée\Photos\ (oui, je n'ai pas fait de fautes).
      Mets plutôt
      Chemin = ThisWorkbook.Path & "\Photos\" 
      , car G: ne correspondra pas toujours à ta clé USB.

      A+
      0
    2. djodjo5700 Messages postés 64 Statut Membre > Zoul67 Messages postés 2001 Statut Membre
       
      'Correspond au programme de la LISTE DEROULANTE
      Private Sub ComboBox1_Change()
      Dim Ligne As Long
      Dim I As Integer
      Dim Chemin As String, Img As String
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 2
      For I = 1 To 8
      Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
      Next I
      Chemin = ThisWorkbook.Path & "\Photos\"
      Img = ComboBox1.Value & ".jpg"
      Image1.Picture = LoadPicture(Chemin & Img)
      End Sub

      Toujours une erreur dans
      Image1.Picture = LoadPicture(Chemin & Img)


      "CHEMIN D'ACCES INTROUVABLE"

      @+
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > djodjo5700 Messages postés 64 Statut Membre
       
      Maintenant il te faut faire correspondre les noms des images avec le contenu de ta combobox. Exactitude dans l'orthographe...
      0
    4. djodjo5700 Messages postés 64 Statut Membre > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
       
      C'est fait mais rien ne change
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > djodjo5700 Messages postés 64 Statut Membre
       
      C'est dur dur à distance.
      Tes images sont bien des jpg?

      Si oui, que te dis ce code :

      'Correspond au programme de la LISTE DEROULANTE
      Private Sub ComboBox1_Change()
      Dim Ligne As Long
      Dim I As Integer
      Dim Chemin As String, Img As String
      If Me.ComboBox1.ListIndex = -1 Then Exit Sub
      Ligne = Me.ComboBox1.ListIndex + 2
      For I = 1 To 8
      Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
      Next I
      Chemin = ThisWorkbook.Path & "\Photos\"
      Img = ComboBox1.Value & ".jpg"
      MsgBox Img
      Image1.Picture = LoadPicture(Chemin & Img)
      End Sub
      0
  11. djodjo5700 Messages postés 64 Statut Membre
     
    Oui mes images sont bien de JPG, exemple:


    voilaà ce qui ce passe lorsque je rentre maintenant ton code:

    Puis "ERREUR D'EXECUTION '76'
    Chemin introuvable.

    'Correspond au programme de la LISTE DEROULANTE
    Private Sub ComboBox1_Change()
    Dim Ligne As Long
    Dim I As Integer
    Dim Chemin As String, Img As String
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    Ligne = Me.ComboBox1.ListIndex + 2
    For I = 1 To 8
    Me.Controls("TextBox" & I) = Ws.Cells(Ligne, I + 1)
    Next I
    Chemin = ThisWorkbook.Path & "\PhotosIdent\"
    Img = ComboBox1.Value & ".jpg"
    MsgBox Chemin & Img
    Image1.Picture = LoadPicture(Chemin & Img)
    End Sub

    Avec toujours une flèche jaune en face de:
    Image1.Picture = LoadPicture(Chemin & Img)
    0
  12. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Et tes photos sont bien nommées de cette façon?
    Dans ce répertoire?
    0
  13. djodjo5700 Messages postés 64 Statut Membre
     
    Oui tout à fait Franck
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Peux-tu transmettre un zip contenant :
      - ton fichier Excel ;
      - le dossier avec une ou deux photos
      via cjoint ?
      0
  14. djodjo5700 Messages postés 64 Statut Membre
     
    Sans problème, si tu peux m'expliquer la manip
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Pour transmettre un fichier, il faut passer par un site de pièce jointe tel que cjoint.com

      Va sur ce site : https://www.cjoint.com/
      Clic sur parcourir,
      Cherche ton fichier,
      clic sur ouvrir,
      Clic sur "Créer le lien cjoint",
      Copier le lien,
      Revenir ici le coller dans une réponse...
      0
    2. Zoul67 Messages postés 2001 Statut Membre 149
       
      C'est marrant, tu l'as fait hier à la même heure.
      0
      1. djodjo5700 Messages postés 64 Statut Membre > Zoul67 Messages postés 2001 Statut Membre
         
        Déjà oublié(surement l'age)
        0
  15. djodjo5700 Messages postés 64 Statut Membre
     
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Il manque "Base de donnée\" entre "G:\" et "PhotosIdent" ...

      =>
      Chemin = ThisWorkbook.Path & "\Base de donnée\PhotosIdent\" 
      0
  16. djodjo5700 Messages postés 64 Statut Membre
     
    OUAH SUPER A FONCTIONNE!!!!!!

    Un super grand merci à vous
    0
  17. djodjo5700 Messages postés 64 Statut Membre
     
    Peur être encore une question
    Si dans ma base de donnée la photo correspondant à un nom est absente, je reçois le message d'erreur suivant:
    Erreur d'2écution '53'
    Fichier introuvable
    Avec bien sur le choix FERMER , DÉBOGAGE

    Quoi que je fasse, je ne peux pas continuer ma saisie. Y a t-il une solution?

    Pareil auparavant j'avais des CheckBox qui me remplissait automatiquement une TextBox en fonction que la CheckBox soit coché ou pas
    Exemple:
    Une checkBox coché remplissait un TextBox par VL(la personne concernée est donc un possession du permis de conduire VL).
    J'ai donc ajouté à tous cela une case image pour avoir l'image du permis
    En utilisant les codes que vous m'avez donnés précédemment. Tout fonctionne parfaitement, sauf que maintenant l'indication VL ne s'affiche plus dans la TextBox concernée.
    Est-il possible de faire quelque chose.?

    Merci, par avance
    0
  18. Maurice
     
    Bonjour

    Voila
    ' Chemin du repertoire Image
    Chemin = ThisWorkbook.Path & "\Base de donnée\PhotosIdent\"
    Img = ComboBox1.Value & ".jpg"
    ' Test le repertoire ou se trouve la photo
       If Dir(Chemin & Img) = "" Then
             Image1.Picture = LoadPicture(Chemin & "Image1.jpg")
          Else
             Me.Image1.PictureSizeMode = fmPictureSizeModeStretch
             Image1.Picture = LoadPicture(Chemin & Img)
       End If
    
    


    A+
    Maurice
    0
  19. djodjo5700 Messages postés 64 Statut Membre
     
    Non cela ne fonctionne pas il marque :
    Erreur d'éxécution '53'
    Fichier introuvable

    @+
    Merci
    0
    1. Zoul67 Messages postés 2001 Statut Membre 149
       
      Parce que Maurice a mentionné un fichier Image1.jpg que tu n'as pas...
      0
  20. Maurice
     
    Re
    le debut de la combobox je prefere ca

    Private Sub UserForm_Initialize()
    Dim L As Long
       With Sheets(Feuil1.Name) ' mettre le codeName comme ca tu peux Changer le nom de l'onglet
          ComboBox1.Clear
           For L = 2 To .Range("A" & Rows.Count).End(xlUp).Row
             ComboBox1.AddItem .Range("A" & L)
           Next
       End With
    End Sub
    

    A+
    Maurice
    0
  • 1
  • 2