VBA Image dans userform

elect31

XLDnaute Nouveau
Bonjour à tous
Ce que je voudrais faire.
Un userform contenant un controle image(nommé ImageAPSA) et 4 optionbutton.
Au clic d'un des optbutton, je voudrais importer une image (gif) dans le controle image. Chaque optbutton importerait une image différente. Ces images sont sous forme de fichiers à la racine du fichier Xl.

Ce que j'arrive à faire (mais je ne sais pas si c'est le meilleur moyen)
Grace au code suivant, j'importe mes images automatiquement dans une feuille du classeur :
Sub ImportImages()
ChDir ActiveWorkbook.Path
Range("B1").Select
Do While ActiveCell.Offset(0, -1) <> ""
nf = ActiveCell.Offset(0, -1) & ".gif"
Set monimage = ActiveSheet.Pictures.Insert(nf)
ActiveCell.EntireRow.RowHeight = monimage.Height + 0
ActiveCell.Offset(1, 0).Select
Loop
End Sub
Mais je ne sais pas faire la suite, importer de la feuille du classeur dans le ctrl image de mon userform.

J'ai essayé le code suivant sans succès:
ImageAPSA.Picture = Sheets(1).Image1.Picture

Je sais bien que l'on peut importer directement l'image dans le userform avec ce code, mais il ne me va pas car le nom de l'image est en dur:
ImageAPSA.Picture = LoadPicture("K:\PHOTO CLASSE\Transp_bad.gif")

Je pensais qu'il était préférable de passer par la feuille car je pouvais comme cela utiliser les références des cellules où étaient déposées les images par ma macro ImportImages(),ou le nom de l'image dans la feuille.

Une autre astuce que j'avais envisagée,
1 importer dans ma feuille avec le code ci-dessus
2 Créer une étape supplémentaire en passant mon image dans un controle image dans la feuille
3 lier ce controle image de la feuille au controle image du userform par le biais des optbutton.
ImageAPSA.Picture = Sheets(1).Image22.Picture
Ce dernier code fonctionne très bien mais il me manque l'étape 2 (en VBA bien sur)


Merci de vos éclairages
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA Image dans userform

Bonsoir.
Ou avez vous vu que l'argument de la fonction LoadPicture devait être 'en dur' ? Ça doit être une expression String représentant une référence de fichier image, et pas obligatoirement une constante String.
 
Dernière édition:

elect31

XLDnaute Nouveau
Re : VBA Image dans userform

Bonjour et merci de vos réponses quasi immédiates
J'ai joint un fichier exemple qui ne comprend qu'une feuille dans laquelle j'ai inséré 4 images avec le code du module1. Dans VBE il y a un formulaire qui comprend un multipage avec 2 pages. Sur la page "options", il y a 4 optbutton et une zone pour accueillir une image.
Je voudrais que les optbutton me placent chacun une des 4 images de la feuille.

J'insiste bien sur le fait que les images placées sur le userform doivent venir de la feuille et pas d'un fichier extérieur (sinon je sais faire). C'est un classeur à distribuer à mes collègues et il faut que ce soit simple voire tout automatique.

Merci de vos réponses
 

Pièces jointes

  • trombi.xlsm
    72.8 KB · Affichages: 135

Dranreb

XLDnaute Barbatruc
Re : VBA Image dans userform

Ben alors ne mettez pas des images de formulaires dans votre feuille mais seulement autant de contrôles Image qu'il faut et faites des ImageN.Picture = LoadPicture(nf)
Mais je trouve ça bien compliqué inutilement.
Il me semble qu'il serait plus simple de noter simplement les référence de fichiers, pris de cellules, dans une petite table Public en String et, dans l'Userform, en utiliser le poste convenable pour un LoadPicture.

P.S. pouvez vraiment pas faire un truc de ce genre :
VB:
ImageAPSA.Picture = LoadPicture(Worksheets(1).Cells(Ligne, 1).Value & ".gif")
À ma connaissance on ne peut pas récupérer la Picture d'une image Shape.
 
Dernière édition:

elect31

XLDnaute Nouveau
Re : VBA Image dans userform

Ben alors ne mettez pas des images de formulaires dans votre feuille mais seulement autant de contrôles Image qu'il faut et faites des ImageN.Picture = LoadPicture(nf)
Mais je trouve ça bien compliqué inutilement.
Il me semble qu'il serait plus simple de noter simplement les référence de fichiers, pris de cellules, dans une petite table Public en String et, dans l'Userform, en utiliser le poste convenable pour un LoadPicture.

P.S. pouvez vraiment pas faire un truc de ce genre :
VB:
ImageAPSA.Picture = LoadPicture(Worksheets(1).Cells(Ligne, 1).Value & ".gif")
À ma connaissance on ne peut pas récupérer la Picture d'une image Shape.


Merci de la réponse
Je sais que c'est plus compliqué de passer par les images préalablement importées dans la feuille, mais comme je le disais, c'est un classeur que je vais distribuer et certains utilisateurs auront peut être plus ou moins d'images à utiliser.
Le nombre d'images est donc variable. Je pensais que le passage par la feuille me faciliterait la tâche mais je galère encore plus...

Je peux créer 10 contrôles images dans mon userform et signaler que le classeur est fait pour 10 et tant pis pour les autres qui en ont plus. C'est une solution, mais je pensais pouvoir faire mieux.

Merci quand même

À ma connaissance on ne peut pas récupérer la Picture d'une image Shape.
Il me reste tout de même à vérifier ça.
Je crois que je vais ouvrir un nouveau fil pour ça.
 

Dranreb

XLDnaute Barbatruc
Re : VBA Image dans userform

Je peux créer 10 contrôles images dans mon userform
À la place d'images Shape je parlais de contrôles Image dans la feuille, pas dans l'Userform. Mais tout cela me parait absurde. Je ne comprend vraiment pas pourquoi vous tenez tant à compliquer tout ça, alors que vous avez les noms de fichiers dans des cellules et que vous n'avez besoin de rien d'autre pour un LoadImage.
 
Dernière édition:

elect31

XLDnaute Nouveau
Re : VBA Image dans userform

À la place d'images Shape je parlais de contrôles Image dans la feuille, pas dans l'Userform. Mais tout cela me parait absurde. Je ne comprend vraiment pas pourquoi vous tenez tant à compliquer tout ça, alors que vous avez les noms de fichiers dans des cellules et que vous n'avez besoin de rien d'autre pour un LoadImage.

Merci Danreb pour votre réponse

J'ai fait comme Yaloo m'indiquait et ça fonctionne (et je l'en remercie encore).
Ce n'est peut être pas le plus simple, mais je ne comprends pas ce que vous me dites.
Si je crée autant de contrôles images dans ma feuille qu'il y a d'images, comment les charger en image?

Regardez mon code, si vous le voulez bien dans le sub ImportImages()

Si j'arrivais à placer l'image directement du fichier dans le controle image de la feuille, je pourrais faire ensuite la liaison du controle image de la feuille avec le controle image de l'userform.

Dans le soucis de faire le plus simple possible, mais avec le moins de manipulation pour l'utilisateur lambda (qui va devoir placer les images qui l'interessent à la racine du classeur, puis recopier à la main les noms des fichiers au bon endroit), je vous remercie de continuer à m'aider pour améliorer ce classeur.

Cordialement
 

Pièces jointes

  • image feuille.xlsm
    21.7 KB · Affichages: 114
  • image feuille.xlsm
    21.7 KB · Affichages: 103
  • image feuille.xlsm
    21.7 KB · Affichages: 173

Dranreb

XLDnaute Barbatruc
Re : VBA Image dans userform

Si je crée autant de contrôles images dans ma feuille qu'il y a d'images, comment les charger en image?
Dans la feuille ? Par des .Picture = LoadPicture(nf). Dans l'userform ? vous avez dit au poste #1 que les affectations de Picture à Picture marchaient.
Je vais regarder le classeur…
Je dirais :
VB:
With ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1")
         .Object.Picture = LoadPicture(nf)
         End With
Ne plus utilier de Shape; ils sont inexploitables.

…Sauf effectivement à passer par ce canal compliqué et bizarre d'un Chart.

Mais ça ne m'explique toujours pas bien pourquoi vous avez tellement besoin dans l'Userform de passer par cette feuille si ce n'est pour y récupérer seulement le nom de fichier pour le LoadPicture ?
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
408
Compte Supprimé 979
C

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi