Importer une photo dans un userform VBA

Résolu
Meloooooo Messages postés 10 Statut Membre -  
 Johann -
Bonjour,

Dans le cadre d'un projet informatique, je dois créer un programme VBA. Il s'agit d'un logiciel pour un centre équestre.
A un moment dans mon projet, j'ai crée un userform "InscriptionChevaux", permettant à l'utilisateur de rentrer dans le logiciel un nouveau cheval. L'utilisateur devra donc renseigner le nom, la date de naissance, la race, etc. du cheval. Mais, j'aimerais aussi que l'utilisateur puisse également y mettre la photo du cheval.

Pour celà, dans mon userform, j'ai inséré un outil Image appelé "ImageCheval". Je souhaite que lorsque l'utilisateur clique que cet outil, un explorateur apparaisse afin que utilisateur puisse naviguer dans son pc pour trouver l'image.
Pour celà, j'ai créer la macro suivante au sein de l'outil "ImageCheval":

Private Sub ImageCheval_Click()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
fd.Show
If fd.SelectedItems.Count > 0 Then
MsgBox fd.SelectedItems(1)
End If
Set fd = Nothing
End Sub


Cette macro fonctionne parfaitement bien, lorsque l'utilisateur clique sur "ImageCheval", l'explorateur apparaît et il peut aller la photo n'importe ou dans le pc. Cependant cette macro n'importe pas et n'enregistre pas la photo choisie au sein de mon objet "ImageCheval". En effet, je voudrais par la suite que la photo s'enregistre dans ma feuille de calculs Excel afin que lorsque l'utilisateur veux consulter les chevaux inscrits, la photo apparaisse de nouveau.

Je voudrais donc savoir comment faire pour importer la photo dans mon userform ainsi que dans ma feuille de calcul excel...?

J'espère avoir été clair, et merci par avance de votre aide :)

23 réponses

  • 1
  • 2
  1. Meloooooo
     
    Oui, je suis bien sur Excel
    L'image est bien dans l'Userform
    Et le code dans le bouton image du Userform

    Du coup, voici le lien : http://cjoint.com/?3KutMk9ZeFn

    Une fois le document ouvert cliquer sur "Entrer", puis "Les Chevaux", puis "Inscrire un nouveau cheval" et enfin cliquer sur l'Image
    1
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Dans les références ajouter Ole Automation
    Avec ça plus d'erreur mais comme dis plus haut l'image be se dessine pas
    Ajouter un bouton (à la place de Cliquez ci-dessous pour ajouter une photo et mettre le code dans ce bouton.
    A+
    1
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Pour répondre à ta deuxième question ainsi que dans ma feuille de calcul excel...?
    Ton classeur est déjà suffisamment "lourd" pour encore y ajouter toutes les photos.
    Je te conseillerais plutôt de ...
    Créer un sous-répertoire pour tes images chevaux
    dans le bouton valider copier l'image sélectionnée dans ce répertoire. avec un nom significatif comme par exemple Clientxx.jpg
    De cette façon, quand tu en a besoin tu n'a que de les recharger.
    A+
    1
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    importer une image, rien de plus facile
    Dans l'Userform une PictureBox
        PictureBox1.Picture = LoadPicture(Chemin & nomimage) 
    dans une feuille
    Sélectionner la cellule et..
     ActiveSheet.Pictures.Insert(Chemin & nomImage).Select
    Seulement, avec ça tes images seront déformées, si tu veux garder le ratio c'est beaucoup plus compliquer.
    Voire cette démo
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Meloooooo Messages postés 10 Statut Membre
     
    Merci beaucoup pour votre réactivité :)

    J'ai installé cet élément dans ma macro, mais un message d'erreur s'affiche "Erreur de compilation : Sub ou Function non définie" et le déblogage me met ne surbrillance "loadpicture", savez vous d'où celà peut provenir ?
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Explique où se situe le code ? dans le module de l'UserForm ?
    En VBA c'est pas PictureBox mais Image
    Image1.Picture = LoadPicture("C\Repertoire\Image1.Jpg")  

    Montre la ligne exacte et complète où se situe l'erreur.
    EDIT:
    Pour centrer l'image met les propriétés..
    PictureAlignment à 2
    PictureSizeMode à 3

    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
    0
  8. Meloooooo Messages postés 10 Statut Membre
     
    Je te remercie vraiment pour ton aide :)

    Pour Image et non PictureBox, merci mais je m'en étais douté ;)

    Je n'arrive pas à insérer de capture d'écran sur le forum, mais voici ma macro (j'ai mis en gras l'endroit ou le déblogage me met en surbrillance et au moment ou il me met le message d'alerte disant que Sub ou Fuction n'est pas défnie):

    Private Sub ImageCheval_Click()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.Show
    If fd.SelectedItems.Count > 0 Then
    MsgBox fd.SelectedItems(1)
    ImageCheval.Picture = <gras>loadpicture</gras>(fd)
    End If
    Set fd = Nothing
    End Sub


    Cette macro se trouve dans l'Userform et plus précisément dans l'Image.

    Par contre, je ne comprends ce que tu veux me dire avec ca :
    "EDIT:
    Pour centrer l'image met les propriétés..
    PictureAlignment à 2
    PictureSizeMode à 3 "
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
        ImageCheval.Picture = LoadPicture(fd.SelectedItems(1))

    Pour l'Edit:
    En mode édition, clic droit sur le contrôle image -> Propriétés
    Dans le fenêtre Propriétés tu va comprendre ce que je veux dire.
    A+

    0
  10. Meloooooo Messages postés 10 Statut Membre
     
    Effectivement je comprends beaucoup mieux maintenant pour les propriétés ;) Merci beaucoup, j'ai changé comme vous me l'avez dit !

    J'ai aussi changé selon vos conseils le loadpicture, mais j'ai encore le message d'alerte provenant du loadpicture me disant "Erreur de compilation : Sub ou Function non définie".
    Je ne comprends vraiment pas...

    Private Sub ImageCheval_Click()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    fd.Show
    If fd.SelectedItems.Count > 0 Then
    MsgBox fd.SelectedItems(1)
    ImageCheval.Picture = <gras>[/contents/1171-vbscript-fonctions-diverses LoadPicture]</gras>(fd.SelectedItems(1))
    End If
    Set fd = Nothing
    End Sub


    Sans vouloir abuser de votre gentillesse, vous avez une nouvelle idée concernant le message d'alerte ?
    0
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Dans l'éditeur clic sur le menu..
    Outils => Références.
    Dans la fenêtre, n'y aurait-il pas une référence marquée "MANQUANT" ?
    si Oui, dis la quelle.
    0
  12. Meloooooo
     
    Nan, je ne vois rien me signalant "Manquant"....
    0
  13. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Je remarque qu'il y a un problème avec le contrôle image, chez moi ça ne bug pas mais l'image ne veux pas se mettre dans le contrôle.
    Essaye en mettant le code dans un bouton.
    0
  14. Meloooooo
     
    Je viens de mettre ma macro dans un "CommandButton" et ca me fait exactement le même problème que lorsque la macro est dans une "Image", c'est à dire que le debogage me bloque sur loadpicure en me le mettant en surbrillance...
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Tu est bien sur Excel ?
      L'image est bien sur un UserForm ?
      Le code est dans le module de l'Userform ?
      Je ne vois pas d'autre raison qui pourrait créer ce problème.
      J'ai vérifié dans l'aide et testé plusieurs fois...
      Éventuellement mettre une copie de ton classeur sur Cjoint.com (sans donnée confidentielle)
      Et mettre le lien dans un poste suivant.
      A+
      0
  15. Meloooooo
     
    Vous êtes FORMIDABLE, ca fonctionne !!!! :D

    Un grand merci à vous et merci pour votre grande patience ! :)
    0
  16. Meloooooo
     
    Ok, merci pour le conseil, je vais voir pour faire cela.
    Et merci pour tout !
    0
  17. Meloooooo Messages postés 10 Statut Membre
     
    Bonsoir,
    J'avais du laisser un peu de côté mon projet VBA, il est maintenant à rendre pour très très bientôt. Tout est quasi fini, mais je pensais pouvoir finir l'enregistrement de la photo toute seule en enregistrant les photos des chevaux dans un sous répertoire lorsque l'utilisateur clique sur "valider" (comme vous me l'aviez conseillé), mais j'arrive pas vraiment. Je suis allée fuiner dans des livres et sur internet mais je ne vois aucun sujet sur un forum qui pourrait correspondre au mien, Lermite, pouvez-vous de nouveau m'aider svp en m'indiquant comment procéder ?
    0
  18. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Re,
    Tout en haut du module, tu met
    Dim MemoImage as String
    
    

    Dans la sub qui te permet de mettre l'image dans l'Image, juste en dessous de..
        ImageCheval.Picture = LoadPicture(fd.SelectedItems(1))
    'Tu met
        MemoImage = fd.SelectedItems(1)

    Dans le code du bouton Valider
    Dim Destination as string
         Destination = "C:\Répertoire\Répertoire des images\Client" & NumClient & ".jpg"
         FileCopy MemoImage, Destination

    Tu dis
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    Note: Je ne répond pas aux MP pour les questions techniques. Et ma boule de cristal est cassée .
    0
  19. Meloooooo Messages postés 10 Statut Membre
     
    Bonsoir,
    Tout d'abord un grand merci pour votre réactivité.
    J'ai tout mis comme vous m'avez dit, aucun problème détecté par le debogage. Par contre, la photo ne s'enregistre pas dans le répertoire....
    On est bien d'accord que je dois remplacer "C:\Répertoire\Répertoire des images\Client" par le chemin propre à mon ordinateur et à mon répertoire ?
    0
  20. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Comment tu numérote les clients ?
    Pour tester..
        'Après la ligne..
         Destination = "C:\Répertoire\Répertoire des images\Client" & NumClient & ".jpg"
        'Tu ajoute
        MsgBox "Image = " & MemoImage & Chr(13) & "NumClient =" & NumClient _
        & Chr(13) & "Destination = " & Destination

    Met le résultat dans un poste suivant.
    A+
    0
  21. Meloooooo Messages postés 10 Statut Membre
     
    Merci beaucoup de votre réponse.
    J'ai trouvé d'ou venait mon erreur, il me manquait un "\" à la fin de mon chemin.
    Du coup, voici mon chemin :
    Destination = "C:\Users\Méloo\Documents\Photos Chevaux\& InscriptionChevaux.NomCheval.Value & .jpg"

    Mon problème maintenant est que j'aimerais que le nom de ma photo change à chaque inscription et qu'elle prenne le nom du cheval. Mais, avec ce chemin, InscriptionChevaux.NomCheval.Value ne change jamais, du coup toutes les photos ont le même nom et à chaque inscription, la nouvelle photo écrase l'ancienne...
    J'ai essayé de créer une variable, mais à chaque fois c'est pareil, le nom de change pas...
    Avez-vous une idée svp ?
    0
    1. Johann
       
      Bonjour,
      Post très intéressant, Merci.
      Pour ma part, je souhaite afficher une image (dans mon userform) qu à pour adresse un lien internet (type http://).
      Il s'agit d'un affichage seul de l'image. Pas d'enregistrement en local.
      Merci à vous.
      0
  • 1
  • 2