Microsoft 365 Procédure Image (Contôle ActiveX)

Intermoi

XLDnaute Nouveau
Bonjour à tous.

Voilà mon 1er poste pour une aide, étant novice mais avec beaucoup de progrès grâce à vos postes et aident, j’arrive plutôt bien à me débrouiller mais là j'ai du mal.

Mon problème, j’ai des Images (Contrôle ActiveX), les images 1 et 3 vont chercher les mêmes images dans un dossier (Test1), les images 2 et 4 vont chercher les mêmes images dans un dossier (Test2). J’ai fait une procédure pour chaque image, ce qui va devenir long en procédure et gourmant niveau VBA, car à la fin de je vais devoir avoir 16 à 20 Images (Contrôle ActiveX)

Je cherche à avoir une procédure compacte pour ne pas avoir trop de codage VBA et pour ne pas alourdir ou ralentir le fichier.

Est-il possible de créer une procédure avec 2 variables qui indiquerait si Images (Contrôle ActiveX) ‘’1,2,3,ou4 etc.’’ est sélectionnée alors va chercher le dossier (Tes1) ou (Test2) et insère image.

Je vous mets en PJ le fichier et dossier ou se trouve les images, je ne cherche pas un code tout fait car je veux le faire moi-même, je cherche juste que l’on m’aiguille. Un grand merci pour votre aide.
 

Pièces jointes

  • Classeur1 - Copie.zip
    132.3 KB · Affichages: 9
Solution
Bonjour.
Essayez comme ça :
VB:
Private Sub Image1_Click()
   ClicSurImage Image1, ThisWorkbook.Path & "\Test1"
   End Sub
Private Sub Image2_Click()
   ClicSurImage Image2, ThisWorkbook.Path & "\Test2"
   End Sub
Private Sub Image3_Click()
   ClicSurImage Image3, ThisWorkbook.Path & "\Test1"
   End Sub
Private Sub Image4_Click()
   ClicSurImage Image4, ThisWorkbook.Path & "\Test2"
   End Sub

'Procédure avec passage de variable
Private Sub ClicSurImage(ByVal Image As MSForms.Image, ByVal Dossier As String)
   Dim GOFn
   On Error Resume Next
   ChDrive Dossier: ChDir Dossier
   GOFn = Application.GetOpenFilename("Image,*.jpg;*.gif;*.bmp")
   If VarType(GOFn) <> vbString Then Exit Sub
   Image.Picture = LoadPicture(GOFn)
   End...

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez comme ça :
VB:
Private Sub Image1_Click()
   ClicSurImage Image1, ThisWorkbook.Path & "\Test1"
   End Sub
Private Sub Image2_Click()
   ClicSurImage Image2, ThisWorkbook.Path & "\Test2"
   End Sub
Private Sub Image3_Click()
   ClicSurImage Image3, ThisWorkbook.Path & "\Test1"
   End Sub
Private Sub Image4_Click()
   ClicSurImage Image4, ThisWorkbook.Path & "\Test2"
   End Sub

'Procédure avec passage de variable
Private Sub ClicSurImage(ByVal Image As MSForms.Image, ByVal Dossier As String)
   Dim GOFn
   On Error Resume Next
   ChDrive Dossier: ChDir Dossier
   GOFn = Application.GetOpenFilename("Image,*.jpg;*.gif;*.bmp")
   If VarType(GOFn) <> vbString Then Exit Sub
   Image.Picture = LoadPicture(GOFn)
   End Sub
Insérez un coup un UserForm que vous supprimerez ensuite. C'est un moyen commode de cocher la référence de la bibliothèque MSForms.
 

patricktoulon

XLDnaute Barbatruc
Bonjour à tous.

Voilà mon 1er poste pour une aide, étant novice mais avec beaucoup de progrès grâce à vos postes et aident, j’arrive plutôt bien à me débrouiller mais là j'ai du mal.

Mon problème, j’ai des Images (Contrôle ActiveX), les images 1 et 3 vont chercher les mêmes images dans un dossier (Test1), les images 2 et 4 vont chercher les mêmes images dans un dossier (Test2). J’ai fait une procédure pour chaque image, ce qui va devenir long en procédure et gourmant niveau VBA, car à la fin de je vais devoir avoir 16 à 20 Images (Contrôle ActiveX)

Je cherche à avoir une procédure compacte pour ne pas avoir trop de codage VBA et pour ne pas alourdir ou ralentir le fichier.

Est-il possible de créer une procédure avec 2 variables qui indiquerait si Images (Contrôle ActiveX) ‘’1,2,3,ou4 etc.’’ est sélectionnée alors va chercher le dossier (Tes1) ou (Test2) et insère image.

Je vous mets en PJ le fichier et dossier ou se trouve les images, je ne cherche pas un code tout fait car je veux le faire moi-même, je cherche juste que l’on m’aiguille. Un grand merci pour votre aide.

BONJOUR
tres mauvais plan
1 le nom des images correspondent ils au images dans le dossier
2 comment veux tu qu'une image insérée ce jour fonction si tu lui code pas son event ou ne classe pas tes controls image dans une classe controls
3 comment veux tu classer tes images d'abords elle sont ajoutées comment (manuellement via le ruban ou par vba

rien que là on est déjà dans le " le serpent qui se mord la queue"

si tu arrive a répondre a ces trois questions intelligiblement on devrait pouvoir trouver une solution

sinon c'est ton concept qu'il va falloir revoir

Dranreb te propose un dialogue ça minimise déjà le problème du nom
problème ca n’empêche pas de sélectionner une autre image

mais pour l'event on est toujours marron

des solutions existent mais le concepts d'images dynamiques n'ai jamais une solution perrene

je serais toi je passerait par insertpicture et l'image insérée lui affecter son "onaction"
comme ca pas de classe le onaction peut etre argumenté
 

Dranreb

XLDnaute Barbatruc
Information.
Dans ma ressource CBxLCtlA.xlam (projet VBA ClsCas, à cocher dans les références des VBAProject des classeurs utilisateurs), j'ai une variété d'objet CAsso (contrôle associé), le CassoImg qui réagit au clic sur l'image qu'il supporte. Sauf que c'est une Sub Img_MouseUp et non une Sub Img_Click, et qu'un clic droit permet d'effacer l'image, sur confirmation. La valeur conventionnelle du contrôle est au minimum le nom du fichier, le chemin pouvant être précisé comme argument Format à l'initialisation (méthode Add de l'objet ControlsAssociés). Je m'en suis plus ou moins inspiré dans la Sub ClicSurImage que je vous proposai.
 

Intermoi

XLDnaute Nouveau
Bonjour, et merci de votre retour Dranreb et patricktoulon.

Un peut plus de détail serrai pas mal. Le but c’est de faire un bon de commande de fenêtres, sur une feuille et non en UserForm.

  • Le nom des images ne correspond pas aux images dans le dossier, (Test1) sera au nom ‘’Ouvertures’’ et il y aura des sous dossiers dans ce dossier ‘’Fen’’ M1.jpg, M5.jpg etc. ‘’PFen’’ M1.jpg, M7.jpg etc. et dans (Test2) sera au nom ‘’PB’’ sans sous dossier avec 01.jpg, 02.jpg etc.
  • Si le client se troupe d’image et sort de la procédure une image par défaut s’affiche, ou s’il se trompe il peut choisir une autre image.
  • Les images sont sélectionnées par click sur l’image (Contrôle ActiveX)
1Capture.PNG
 

Intermoi

XLDnaute Nouveau
Bonjour Dranreb

Super un énorme MERCI pour votre aide, cela fonctionne comme je le voulais 😊 j’ai légèrement modifié la fin du code afin d’avoir l’image par défaut si le client c’est trompé.
Je vais pouvoir avancer, encore un grand grand merci

Private Sub ClicSurImage(ByVal Image As MSForms.Image, ByVal Dossier As String)

Dim NomFichier As Variant 'Variable du type variant
On Error Resume Next
ChDrive Dossier: ChDir Dossier
NomFichier = Application.GetOpenFilename("Image,*.jpg;*.gif;*.bmp")

'Chemin de recherche de l'image par défaut à insérer dans le contrôleur d'image
DefaultImage = Workbooks(ActiveWorkbook.Name).Path & "\Default_Image\DefaultImage.jpg"

If VarType(NomFichier) <> vbBoolean Then
Image.Picture = LoadPicture(NomFichier)
Else
Image.Picture = LoadPicture(DefaultImage)
End If
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 295
Membres
103 171
dernier inscrit
clemm