Ajouter un CommandButton via VBA

Troudz

XLDnaute Occasionnel
Bonjour,

Après avoir créé un tableau, je voudrais ajouter automatiquement un CommandButton en face de chaque ligne.

Mon soucis est que je n'arrive pas à modifier toutes les propriétés de cet objet.
Aucun problème pour modifier sa position mais impossible de modifier tout ce qui est caption, backcolor etc...

Voici mon code :
Code:
Sub AjouterBouton(CellDest As Range)
    Dim MonBouton As Object
    Set MonBouton = ThisWorkbook.Sheets("CPG_Validation").OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=1, Top:=1, Width:=70, Height:=40)
    MonBouton.Top = CellDest.Top + (CellDest.Height - MonBouton.Height) / 2
    MonBouton.Left = CellDest.Left + (CellDest.Width - MonBouton.Width) / 2
    MonBouton.Caption = "Validation"
    MonBouton.Font = "Verdana"
    MonBouton.ForeColor = &H823700
    MonBouton.BackColor = &H59BB9B
End Sub

Auriez vous une idée ?
 

laetitia90

XLDnaute Barbatruc
Re : Ajouter un CommandButton via VBA

bonjour Troudz ,l'ami Pierrot:):)
essai comme cela pour initialiser
attention perso j'aime pas trop les classes sur feuilles cela peut vite devenir une "usine a gaz"

il faudrait savoir ce que tu veus faire exactement pour essayer de sans passer!!!
 

Pièces jointes

  • class.xls
    62.5 KB · Affichages: 50
  • class.xls
    62.5 KB · Affichages: 52
  • class.xls
    62.5 KB · Affichages: 53

Pierrot93

XLDnaute Barbatruc
Re : Ajouter un CommandButton via VBA

Re, bonjour Laetitia:)

on pourrais même se passer du bouton "initialise".... code du module1 ci-dessous, pas de modif dans le module de classe...

Code:
Public Collect As Collection
Private Bouton_Valideur()  As New Bouton_Test
Sub Charger_Revue()
    Dim Bouton As Object
    Dim i As Byte
    Dim Cptr As Byte
    For Each Bouton In ThisWorkbook.Sheets("Test").OLEObjects
        Bouton.Delete
    Next
      For i = 7 To 15
        Call AjouterBouton(ThisWorkbook.Sheets("Test").Cells(i, 15), i - 6)
    Next
Application.OnTime Now + TimeValue("00:00:01"), "recup"
End Sub
Sub recup()
 Dim Obj As OLEObject, Cl As Bouton_Test
 Set Collect = New Collection
 For Each Obj In Feuil4.OLEObjects
 If TypeOf Obj.Object Is MSForms.CommandButton Then
 Set Cl = New Bouton_Test
 Set Cl.MonBouton = Obj.Object
 Collect.Add Cl
 End If
 Next Obj
End Sub
Sub AjouterBouton(CellDest As Range, Position As Integer)
    Dim BoutonValid As Object
    Set BoutonValid = ThisWorkbook.Sheets("Test").OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=1, Top:=1, Width:=70, Height:=30)
    With BoutonValid
        .Top = CellDest.Top + (CellDest.Height - .Height) / 2
        .Left = CellDest.Left + (CellDest.Width - .Width) / 2
        .Object.Caption = "Validation"
        .Object.Font.Bold = True
        .Object.ForeColor = &H823700
        .Object.BackColor = &H59BB9B
    End With
End Sub
 

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Bonjour Laetitia et Pierrot et merci pour votre aide,

Je vous remercie pour vos propositions que je vais regarder de ce pas.

Sinon, pour expliquer plus en détail mon projet :

Mon but est d'organiser le remplissage d'une base de données par plusieurs utilisateurs. Lorsque l'utilisateur va ouvrir le tableau, seules les données le concernant vont être affichées. L'utilisateur devra alors compléter les lignes puis valider chacune d'elles. Cette validation entraînera l'injection des nouvelles données dans la base.

Je voulais donc, sur chaque ligne, ajouter un bouton validation (nommés BoutonValide1, BoutonValide2, BoutonValide3....) qui déclencheront tous une même procédure mais avec des arguments différents :
BoutonValide1 ===> Call Sub ValidationLigne(1)
BoutonValide2 ===> Call Sub ValidationLigne(2)
BoutonValide3 ===> Call Sub ValidationLigne(3)

Je voulais passer par un module de classe car je peux facilement récupérer le nom du bouton déclencheur par ce biais.

Est ce que cette méthode vous paraît cohérente ?
 

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Re,

Après quelques tests (et l'intégration de la modif de Pierrot), ton code marche parfaitement Laetitia ! Je t'en remercie. J'ai tout de même du mal à comprendre comment il fonctionne (je n'ai jamais utilisé les collections).

J'avais effectivement pensé à un userform au départ mais j'ai trop de contraintes au niveau de l'affichage :
- certaines colonnes vont contenir beaucoup de blabla ce qui est difficile à caser dans un listview
- le tableau est relativement grand mais doit parfois être affiché sur des écrans de 24" ou 15"". Les userform redimensionnables ne sont quand même toujours parfait.
 

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Bonjour et merci pour cette solution assez sympa. Je vais étudiez ça de près.

Je me posais une question :
Est - il possible, dans une procédure, de récupérer le nom du bouton à partir de laquelle elle a été lancée ?
 

Discussions similaires

Statistiques des forums

Discussions
314 190
Messages
2 106 996
Membres
109 735
dernier inscrit
Mounskad