Importer une photo dans un userform VBA [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014
-
 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

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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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 .
Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014

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 ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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 .
Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014

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 "
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
    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+

Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014

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 ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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.
Nan, je ne vois rien me signalant "Manquant"....
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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.
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...
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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+
Vous êtes FORMIDABLE, ca fonctionne !!!! :D

Un grand merci à vous et merci pour votre grande patience ! :)
Ok, merci pour le conseil, je vais voir pour faire cela.
Et merci pour tout !
Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014

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 ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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 .
Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014

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 ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 140
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+
Messages postés
10
Date d'inscription
dimanche 17 novembre 2013
Statut
Membre
Dernière intervention
27 février 2014

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 ?
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.