OVH Cloud OVH Cloud

Image dans userform

13 réponses
Avatar
Crel
Bonjour à toutes et tous
Je souhaite mettre une image dans un userform, puis je la mettre dans le
fichier excel, et que celle-ci se télécharge à partir de ce fichier, cela
étant si c'est possible, pouvez-vous m'expliquer la marche à suivre ?
Merci beaucoup
Patrick

3 réponses

1 2
Avatar
Michel Gaboly
Bonjour,

Il y a un lapsus dans le message de Denis qui explique le point 1 :

Il faut utiliser ThisWorkbook.Path et non ThisWorkbook.FullName

Path donne le chemin d'accès, ce dont a besoin ici, tandis que Full-
Name correspond au nom complet (Chemin d'accès + nom du fichier)

Par ailleurs, personnellement je préfère stocker l'image dans le
classeur Excel, ce qui évite les problèmes potentiels liés au déplace-
ment du document ou de l'image sur le disque à un autre emplacement
et ceux résultant de la transmission du classeur en oubliant de trans-
mettre aussi l'image.

Pour cela, ouvre l'image, copie-la et colle-la ensuite dans le classeur.

Copie à nouveau l'image, puis (extrait d'une réponse de Frédéric
Sigonneau faite ici le 15 avril 2003) :

"dans l'éditeur Visual Basic, cliquer sur le contrôle Image pour le sé-
lectionner, puis aller dans la fenêtre des Propriétés à la propriété
Picture, sélectionner sa valeur actuelle (normalement "(Aucun)",
sans les guillemets), et coller (Ctrl+V). La propriété se renseigne avec
(Métafichier) et l'image s'affiche dans le composant."

Pour le point 2, je suppose que tu veux en fait afficher telle ou telle image
en fonction de la valeur de A1.

Si c'est le cas, je te propose la solution suivante (adaptée à un petit nombre
d'images seulement).


NB - Si tu veux je peux t'envoyer un classeur corespondant à la description
qui suit dans ta BAL.


Par hypothèse, tu as 3 images à afficher (Montagne, Ocean ou Campagne) en
fonction de la valeur de A1.

Crée un document vierge.

Attribue le nom "Source" à la cellule A1, et "Images" aux cellules A3 à A5
(avec la commande "Insertion / Noms / Définir...")

Ajoute 3 images sur la même feuille.

Dans l'environnement VBA,

Crée sur le UserForm 3 objets Image (Image1, Image2, Image3) au même
emplacement, et attribue à chacun 1 des 3 images, en utilisant l'astuce de
Frédéric.

Ajoute un ListBox et nomme-le LImages

Ajoute Un CommandButton et nomme-le BFermer

puis associe ce code au UserForm :

Private Sub BFermer_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim c As Range, Indice As Integer
LImages.List = Range("Images").Value
Set c = Range("Images").Find(Range("Source").Value)
' Sélection dans la liste de l'élément correspondant à la cellule Source (A1)
If Not c Is Nothing Then
LImages.ListIndex = c.Row - Range("Images").Row
End If
' Masquage des images ne correspondant à la sélection dans la liste
AfficheImage
End Sub

Private Sub LImages_Click()
Range("Source") = LImages.Value
AfficheImage
End Sub

Private Sub AfficheImage()
Dim c As Control
For Each c In Controls
If TypeOf c Is Image Then
If Mid(c.Name, 6, 3) - 1 = LImages.ListIndex Then
c.Visible = True
Else
c.Visible = False
End If
End If
Next c
End Sub

Le résultat est un dialogue avec une liste de mots (3 dans l'exemple). Un clic
sur un élément de la liste modifie la valeur de A1, et affiche l'image corres-
pondante.



Oui c 'est super, mais

1 lorsque le lance le VBA ci dessous :
Private Sub UserForm_Activate()
Image1.Picture = LoadPicture(ThisWorkbook.FullName & "0026.jpg")
End Sub
j'ai un message n° 76 : chemin d acces introuvable.

2 . ce que je désire en fait c'est chaque fois que je change la valeur de la
cellule a1 l'image du userform affiche
automatiquement la photo selon la cellule renseigné en A1.

C est vrai c'est super de pouvoir s entraider.
doudou 57
"Denis Michon" a écrit dans le message de news:
kPcqb.9993$
Bonjour Crel,

Tu insère dans ton formulaire, un contrôle "Image"

et pour charger l'image , tu peux utiliser ce type de code :

'------------------
Private Sub UserForm_Initialize()

Me.Image1.Picture = LoadPicture("C:WindowsGranit vert.bmp")

End Sub
'------------------


Il ne faut pas oublier de faire suivre le fichier image à ton fichier
excel si tu le déplaces sur un autre machine.


et l'idéal est de mettre ton image dans le même répertoire que ton
classeur. la ligne de code sera alors :


Me.Image1.Picture = LoadPicture(ThisWorkbook.fullname & "Granit
vert.bmp")




Salutations!





"Crel" a écrit dans le message de
news:

Bonjour Michel, mais voilà, je ne sais comment faire.
Patrick

"Michel Pierron" a écrit dans le message de news:
#X1#
Salut Crel;
ImageList ne fait pas partie des contrôles standards Office.
Peut on savoir pourquoi tu ne la mets pas directement sur l'UserForm ?
MP

"Crel" a écrit dans le message de
news:
Bonjour à toutes et tous
Je souhaite mettre une image dans un userform, puis je la mettre dans
le



fichier excel, et que celle-ci se télécharge à partir de ce fichier,
cela


étant si c'est possible, pouvez-vous m'expliquer la marche à suivre ?
Merci beaucoup
Patrick













--
Cordialement,

Michel Gaboly
http://www.gaboly.com




Avatar
doudou57
Bonjour, Hello, Bonsoir ...

concernant ton NB
NB - Si tu veux je peux t'envoyer un classeur corespondant à la
description
qui suit dans ta BAL.
oui cela me plairait assez. monadresse mail :

Merci beaucoup.
pour ce que tu dis avant je suis entrain de tester. Merci

"Michel Gaboly" a écrit dans le message de news:

Bonjour,

Il y a un lapsus dans le message de Denis qui explique le point 1 :

Il faut utiliser ThisWorkbook.Path et non ThisWorkbook.FullName

Path donne le chemin d'accès, ce dont a besoin ici, tandis que Full-
Name correspond au nom complet (Chemin d'accès + nom du fichier)

Par ailleurs, personnellement je préfère stocker l'image dans le
classeur Excel, ce qui évite les problèmes potentiels liés au déplace-
ment du document ou de l'image sur le disque à un autre emplacement
et ceux résultant de la transmission du classeur en oubliant de trans-
mettre aussi l'image.

Pour cela, ouvre l'image, copie-la et colle-la ensuite dans le classeur.

Copie à nouveau l'image, puis (extrait d'une réponse de Frédéric
Sigonneau faite ici le 15 avril 2003) :

"dans l'éditeur Visual Basic, cliquer sur le contrôle Image pour le sé-
lectionner, puis aller dans la fenêtre des Propriétés à la propriété
Picture, sélectionner sa valeur actuelle (normalement "(Aucun)",
sans les guillemets), et coller (Ctrl+V). La propriété se renseigne avec
(Métafichier) et l'image s'affiche dans le composant."

Pour le point 2, je suppose que tu veux en fait afficher telle ou telle
image

en fonction de la valeur de A1.

Si c'est le cas, je te propose la solution suivante (adaptée à un petit
nombre

d'images seulement).


NB - Si tu veux je peux t'envoyer un classeur corespondant à la
description

qui suit dans ta BAL.


Par hypothèse, tu as 3 images à afficher (Montagne, Ocean ou Campagne) en
fonction de la valeur de A1.

Crée un document vierge.

Attribue le nom "Source" à la cellule A1, et "Images" aux cellules A3 à A5
(avec la commande "Insertion / Noms / Définir...")

Ajoute 3 images sur la même feuille.

Dans l'environnement VBA,

Crée sur le UserForm 3 objets Image (Image1, Image2, Image3) au même
emplacement, et attribue à chacun 1 des 3 images, en utilisant l'astuce de
Frédéric.

Ajoute un ListBox et nomme-le LImages

Ajoute Un CommandButton et nomme-le BFermer

puis associe ce code au UserForm :

Private Sub BFermer_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim c As Range, Indice As Integer
LImages.List = Range("Images").Value
Set c = Range("Images").Find(Range("Source").Value)
' Sélection dans la liste de l'élément correspondant à la cellule
Source (A1)

If Not c Is Nothing Then
LImages.ListIndex = c.Row - Range("Images").Row
End If
' Masquage des images ne correspondant à la sélection dans la liste
AfficheImage
End Sub

Private Sub LImages_Click()
Range("Source") = LImages.Value
AfficheImage
End Sub

Private Sub AfficheImage()
Dim c As Control
For Each c In Controls
If TypeOf c Is Image Then
If Mid(c.Name, 6, 3) - 1 = LImages.ListIndex Then
c.Visible = True
Else
c.Visible = False
End If
End If
Next c
End Sub

Le résultat est un dialogue avec une liste de mots (3 dans l'exemple). Un
clic

sur un élément de la liste modifie la valeur de A1, et affiche l'image
corres-

pondante.



Oui c 'est super, mais

1 lorsque le lance le VBA ci dessous :
Private Sub UserForm_Activate()
Image1.Picture = LoadPicture(ThisWorkbook.FullName & "0026.jpg")
End Sub
j'ai un message n° 76 : chemin d acces introuvable.

2 . ce que je désire en fait c'est chaque fois que je change la valeur
de la


cellule a1 l'image du userform affiche
automatiquement la photo selon la cellule renseigné en A1.

C est vrai c'est super de pouvoir s entraider.
doudou 57
"Denis Michon" a écrit dans le message de
news:


kPcqb.9993$
Bonjour Crel,

Tu insère dans ton formulaire, un contrôle "Image"

et pour charger l'image , tu peux utiliser ce type de code :

'------------------
Private Sub UserForm_Initialize()

Me.Image1.Picture = LoadPicture("C:WindowsGranit vert.bmp")

End Sub
'------------------


Il ne faut pas oublier de faire suivre le fichier image à ton fichier
excel si tu le déplaces sur un autre machine.


et l'idéal est de mettre ton image dans le même répertoire que ton
classeur. la ligne de code sera alors :


Me.Image1.Picture = LoadPicture(ThisWorkbook.fullname & "Granit
vert.bmp")




Salutations!





"Crel" a écrit dans le message de
news:

Bonjour Michel, mais voilà, je ne sais comment faire.
Patrick

"Michel Pierron" a écrit dans le message de
news:



#X1#
Salut Crel;
ImageList ne fait pas partie des contrôles standards Office.
Peut on savoir pourquoi tu ne la mets pas directement sur l'UserForm
?




MP

"Crel" a écrit dans le message
de




news:
Bonjour à toutes et tous
Je souhaite mettre une image dans un userform, puis je la mettre
dans





le
fichier excel, et que celle-ci se télécharge à partir de ce
fichier,





cela
étant si c'est possible, pouvez-vous m'expliquer la marche à
suivre ?





Merci beaucoup
Patrick













--
Cordialement,

Michel Gaboly
http://www.gaboly.com








Avatar
Michel Gaboly
Re,

Tu devrais l'avoir dans ta boite.

A +


Bonjour, Hello, Bonsoir ...

concernant ton NB
NB - Si tu veux je peux t'envoyer un classeur corespondant à la
description
qui suit dans ta BAL.
oui cela me plairait assez. monadresse mail :

Merci beaucoup.
pour ce que tu dis avant je suis entrain de tester. Merci

"Michel Gaboly" a écrit dans le message de news:

Bonjour,

Il y a un lapsus dans le message de Denis qui explique le point 1 :

Il faut utiliser ThisWorkbook.Path et non ThisWorkbook.FullName

Path donne le chemin d'accès, ce dont a besoin ici, tandis que Full-
Name correspond au nom complet (Chemin d'accès + nom du fichier)

Par ailleurs, personnellement je préfère stocker l'image dans le
classeur Excel, ce qui évite les problèmes potentiels liés au déplace-
ment du document ou de l'image sur le disque à un autre emplacement
et ceux résultant de la transmission du classeur en oubliant de trans-
mettre aussi l'image.

Pour cela, ouvre l'image, copie-la et colle-la ensuite dans le classeur.

Copie à nouveau l'image, puis (extrait d'une réponse de Frédéric
Sigonneau faite ici le 15 avril 2003) :

"dans l'éditeur Visual Basic, cliquer sur le contrôle Image pour le sé-
lectionner, puis aller dans la fenêtre des Propriétés à la propriété
Picture, sélectionner sa valeur actuelle (normalement "(Aucun)",
sans les guillemets), et coller (Ctrl+V). La propriété se renseigne avec
(Métafichier) et l'image s'affiche dans le composant."

Pour le point 2, je suppose que tu veux en fait afficher telle ou telle
image

en fonction de la valeur de A1.

Si c'est le cas, je te propose la solution suivante (adaptée à un petit
nombre

d'images seulement).


NB - Si tu veux je peux t'envoyer un classeur correspondant à la
description

qui suit dans ta BAL.


Par hypothèse, tu as 3 images à afficher (Montagne, Ocean ou Campagne) en
fonction de la valeur de A1.

Crée un document vierge.

Attribue le nom "Source" à la cellule A1, et "Images" aux cellules A3 à A5
(avec la commande "Insertion / Noms / Définir...")

Ajoute 3 images sur la même feuille.

Dans l'environnement VBA,

Crée sur le UserForm 3 objets Image (Image1, Image2, Image3) au même
emplacement, et attribue à chacun 1 des 3 images, en utilisant l'astuce de
Frédéric.

Ajoute un ListBox et nomme-le LImages

Ajoute Un CommandButton et nomme-le BFermer

puis associe ce code au UserForm :

Private Sub BFermer_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
Dim c As Range, Indice As Integer
LImages.List = Range("Images").Value
Set c = Range("Images").Find(Range("Source").Value)
' Sélection dans la liste de l'élément correspondant à la cellule
Source (A1)

If Not c Is Nothing Then
LImages.ListIndex = c.Row - Range("Images").Row
End If
' Masquage des images ne correspondant à la sélection dans la liste
AfficheImage
End Sub

Private Sub LImages_Click()
Range("Source") = LImages.Value
AfficheImage
End Sub

Private Sub AfficheImage()
Dim c As Control
For Each c In Controls
If TypeOf c Is Image Then
If Mid(c.Name, 6, 3) - 1 = LImages.ListIndex Then
c.Visible = True
Else
c.Visible = False
End If
End If
Next c
End Sub

Le résultat est un dialogue avec une liste de mots (3 dans l'exemple). Un
clic

sur un élément de la liste modifie la valeur de A1, et affiche l'image
corres-

pondante.



Oui c 'est super, mais

1 lorsque le lance le VBA ci dessous :
Private Sub UserForm_Activate()
Image1.Picture = LoadPicture(ThisWorkbook.FullName & "0026.jpg")
End Sub
j'ai un message n° 76 : chemin d acces introuvable.

2 . ce que je désire en fait c'est chaque fois que je change la valeur
de la


cellule a1 l'image du userform affiche
automatiquement la photo selon la cellule renseigné en A1.

C est vrai c'est super de pouvoir s entraider.





--
Cordialement,

Michel Gaboly
http://www.gaboly.com



1 2