Est-il possible de recopier des boutons installés dans une feuille dans un userform

Wily

XLDnaute Junior
Bonjour à tous

Je souhaiterais recopier des boutons installés dans une feuille vers un Userform
Visiblement rien n'a été prévu pour cela !
Est-ce qu'avec du code cela pourrait être possible

Merci
 

Hieu

XLDnaute Impliqué
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Salut,

il te suffit de call la macro en question sur le bouton de ton userform :
Code:
Private Sub CommandButton1_Click()
Call MaMacro()
End Sub

Normalement, ça marche ^^

++
 

Lone-wolf

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonsoir Wily, Hieu :)

Si tu ne trouve rien sur le Net, c'est tout simplement parce c'est inutile; à moins que tu trouve fatigant de mettre 5 boutons directement dans le formulaire.
 

job75

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonsoir Wily, Hieu, Lone-wolf,

En VBA il est impossible de créer durablement un contrôle dans un UserForm.

Donc inutile de penser en créer par copie.

Par contre il est facile de copier les propriétés d'un contrôle ActiveX, voyez le fichier joint et cette macro :

Code:
Private Sub CommandButton1_Click()
With ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls("CommandButton1")
  .Caption = CommandButton1.Caption
  .Width = CommandButton1.Width
  .Height = CommandButton1.Height
  .BackColor = CommandButton1.BackColor
End With
End Sub
Pour qu'elle fonctionne il faut avoir coché l'option :

- sur Excel 2003 et versions antérieures Faire confiance au projet Visual Basic (menu Outils-Macro-Sécurité-Editeurs approuvés).

- sur Excel 2007 et versions suivantes Accès approuvé au modèle d'objet du projet VBA (onglet Fichier-Options-Centre de gestion de la confidentialité-Paramètres...-Paramètres des macros).

A+
 

Pièces jointes

  • Copier un bouton(1).xlsm
    19.2 KB · Affichages: 54

Wily

XLDnaute Junior
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonjour Hieu, Lone-Wolf, Job 75 et tout le Forum

Hieu :
Je pensais ma question simple, mais j'aurais peut-être du expliquer le pourquoi
Cela aurait sans doute été plus claire pour vous autres !
Je me rattrape donc.

En fait j'ai une feuille avec de très nombreux boutons de petites tailles
Tellement petits que je ne peux pas écrire le "Caption"
Donc pour qu'ils soient identifiables, j'ai mis des petites images, des icons, Favicons
Que j'ai récupérées un peu partout ou que j'ai créé moi même, car ce n'est pas facile de mettre des photos minuscules
Il faut qu'elles soient parlantes !
Le problème c'est que je n'ai pas conservé ces photos, j'ai préféré faire une sauvegarde de mon fichier
Mais les boutons avec images cela finit par alourdir la feuille !
Je souhaite donc les recopier dans un UserForm
D'où ma demande.

Ce n'est pas la procédure appliquée aux boutons qui m'intéresse le plus
Mais les boutons eux-mêmes

Lone-Wolf :
à moins que tu trouve fatigant de mettre 5 boutons directement dans le formulaire.
D'accord avec toi, mais quand à plus de 50 boutons avec donc des photos !!!

Job75 :
Tu as bien compris ce je souhaitais,
Je te remercie pour cette macro
Pour les photos, j'ai rajouté la propriété Picture, cela fonctionne bien
Il faut créér tous les boutons dans l'UserForm avant de lancer la macro
C'est pas le plus long ...
Par-contre pour 50 boutons, est-ce qu'une boucle serait possible ??

Est-il imaginable de copier le code associé aux boutons ?

A+
 

Lone-wolf

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonjour Wily, Hieu, Job :)

Oui je pense que c'est possible. Un exemple à tester

Code:
Dim Ctrl as Control, Cmd
Dim x, i as Integer

i = 1
For x = 1 to 50
i = i + 1
Cmd= ThisWorkbook.VBProject.VBComponents("UserForm1").Designer.Controls("CommandButton" & i)
next x

For each Ctrl In Cmd
 .Caption = Cmd.Caption
  .Width = Cmd.Width
  .Height = Cmd.Height
  .BackColor = Cmd.BackColor
  .Picture = Cmd.Picture
next Ctrl

EDIT: ce n'est pas ça, désolé. Je pense qu'il va falloir un module de classe, à moins de me tromper encore une fois.
 
Dernière édition:

Wily

XLDnaute Junior
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonsoir Wily, Hieu, Lone-wolf, et tout le Forum

Merci Lone-wolf pour cette boucle
Mais il y a une Erreur de compilation:
Référence incorrecte ou non qualifié

Sa plante au niveau des propriétés

Je vais regarder si je vois le problème
Mais je ne comprends pas la variable Control

A+
 

job75

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonjour Wily et les autres,

Il ne faut surtout pas mettre d'images permanentes dans les boutons d'un l'USF quand il y en a beaucoup.

Cela alourdit inutilement le fichier.

Dans le fichier joint des FaceID sont chargées temporairement dans les 4 boutons de l'USF.

Le code de la 1ère feuille :

Code:
Dim Bt(1 To 4) As New Classe1 'nombre de boutons, à adapter

Private Sub CommandButton1_Click() 'Ouvrir l'USF avec FaceID
Initialiser
AvecFaceID
UserForm1.Caption = "Test avec FaceID"
UserForm1.Show
End Sub

Private Sub CommandButton2_Click() 'Ouvrir l'USF sans FaceID
Initialiser
UserForm1.Caption = "Test sans FaceID"
UserForm1.Show
End Sub

Private Sub Initialiser()
Dim i
For i = 1 To UBound(Bt)
  Set Bt(i).Bt = UserForm1("CommandButton" & i)
  Bt(i).Bt.Tag = i 'pour le repérage
Next
End Sub

Private Sub AvecFaceID()
Dim fid, cBar As CommandBar, cb As CommandBarButton, i
fid = Array(4, 17, 49, 255) 'liste des FaceID, à adapter
If UBound(Bt) <> UBound(fid) + 1 Then MsgBox "Array fid à revoir !", 48: Exit Sub
Set cBar = CommandBars.Add(Position:=msoBarFloating, MenuBar:=False, Temporary:=True)
For i = 1 To UBound(Bt)
  Set cb = cBar.Controls.Add(Type:=msoControlButton, Temporary:=True)
  cb.FaceId = fid(i - 1)
  With Bt(i).Bt
    .Picture = cb.Picture
    .PicturePosition = fmPicturePositionAboveCenter 'position modifiable
  End With
Next
cBar.Delete
End Sub
Le code, très simple, du module de classe :

Code:
Public WithEvents Bt As MSForms.CommandButton

Private Sub Bt_Click()
Run "Macro" & Bt.Tag
End Sub
Le module de classe permet d'affecter facilement les macros du Module1 aux boutons.

Bien sûr les noms des macros, comme ceux des boutons, sont indicés.

Fichier joint.

A+
 

Pièces jointes

  • FaceID dans UserForm(1).xlsm
    29.4 KB · Affichages: 38

job75

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Re,

Avec des Images c'est plus classique.

Mettez-les fichiers dans un sous-dossier nommé "Images" et nommez-les Image1 Image2 etc...

Apparemment il faut des fichiers JPEG (.jpg), je n'y suis pas arrivé avec des PNG.

Fichiers joints.

Bonne nuit.
 

Pièces jointes

  • Images dans UserForm(1).zip
    40.7 KB · Affichages: 43

Si...

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

salut

le fichier joint - à partir d’une macro de Michel Pierron (sauf erreur de ma part)- correspond-il à la demande ?

Nota: je ne sais pas ce que cela donne au niveau du gain "poids" ?
 

Pièces jointes

  • CommandButton onglet vers UsF.xlsm
    227.4 KB · Affichages: 61

job75

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonjour Si..., le forum,

Les APIs Windows utilisées sont intéressantes, je ne les avais jamais vues.

Mais les images créées dans l'USF sont temporaires, on ne peut donc pas supprimer les boutons de l'onglet.

Il est plus simple et moins lourd d'utiliser des fichiers sources JPEG ou des FaceID.

Bonne journée.
 

job75

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

Bonjour Wily,

Au post #10 j'ai supposé que les fichiers JPEG existaient mais vous avez dit :

Le problème c'est que je n'ai pas conservé ces photos, j'ai préféré faire une sauvegarde de mon fichier

Alors il faut d'abord les recréer avec cette macro :

Code:
Private Sub CommandButton101_Click() 'Créer les fichier JPEG
Dim chemin$, i
chemin = ThisWorkbook.Path & "\Images\"
If Dir(chemin, vbDirectory) = "" Then MkDir chemin 'crée le sous-dossier
Application.ScreenUpdating = False
For i = 1 To UBound(Im)
  With Shapes("CommandButton" & i)
    .CopyPicture
    With ChartObjects.Add(0, 0, .Width, .Height).Chart
      .Paste
      .Export chemin & "Image" & i & ".jpg", "JPG"
      .Parent.Delete
    End With
    '.Delete 'pour supprimer les boutons de l'onglet
  End With
Next
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Images dans UserForm(2).xlsm
    274.9 KB · Affichages: 41
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Est-il possible de recopier des boutons installés dans une feuille dans un userf

re

Il est plus simple et moins lourd d'utiliser des fichiers sources JPEG ...

mais j'ai cru comprendre que les images utilisées n'ont pas été enregistrées.

Tu as raison Job pour la "volatilité", j’aurais dû enregistrer les images avant leur suppression puis leur récupération dans un autre « Userform» prévu en lieu et place de celui utilisé (devenu caduque).
 

Pièces jointes

  • CommandButton onglet vers UsF(2).xlsm
    230.8 KB · Affichages: 45

Discussions similaires

Réponses
0
Affichages
234

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote