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
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 & "