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 ?
 

Pierrot93

XLDnaute Barbatruc
Re : Ajouter un CommandButton via VBA

Bonjour,

regarde peut être ceci :
Code:
Dim MonBouton As OLEObject
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.Object.Caption = "nom"

bon après midi
@+
 

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Effectivement, cela semble résoudre mon problème.
J'avoue que je ne comprends pas pourquoi on doit utiliser ".Object" alors qu'on peut s'en passer quand le bouton est situé sur un userform....

En tout cas merci pour ton aide.
 

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Re,

Merci pour tous ces renseignements.
Pour la couleur, je ne savais pas qu'il fallait préférer le RGB (y a - t - il un impact notable ?).

J'aurai encore une toute petite question car je n'arrive pas à finaliser ma macro.
Après avoir créé le bouton, je veux le relier à un module de classe (afin que chaque bouton déclenche une macro avec un argument qui lui est propre).

Ça donne ça :

En tête de mon module :
Code:
Private Bouton_Valideur() As New Bouton_Validation
La boucle qui lance la création des boutons :
Code:
    For i = 7 To NLigneDest - 1
        Call AjouterBouton(.Cells(i, 15), i - 6)
    Next
Ma macro de création de boutons :
Code:
Sub AjouterBouton(CellDest As Range, Position As Integer)
    Dim BoutonValid As Object
    Set BoutonValid = ThisWorkbook.Sheets("CPG_Validation").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
    ReDim Preserve Bouton_Valideur(Position)
    Set Bouton_Valideur(Position).MonBouton = BoutonValid.Object
End Sub

Mon code s'exécute normalement mais on dirait que les boutons ne sont pas reliés au module de classe.

Aurais tu une idée ?
 
Dernière édition:

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Bonjour Pierrot et merci d'avoir retrouvé ce vieux post contenant un précieux enseignement.

J'ai bien compris que la création d'un nouveau CommandButton directement sur ma feuille provoque une espèce de réinitialisation de mon projet Vba.

La solution proposée n'étant pas facile à mettre en place dans mon cas, j'ai voulu essayer autre chose.

Plutôt que de créer les boutons un par un en les rattachant immédiatement au module de classe, j'ai essayé de créer tous les boutons d'un coup et de boucler ensuite sur chacun d'eux pour les rattacher au module. La réinitialisation du projet ne devrait alors poser aucun problème......

Ben pourtant ça marche pas mieux ^^

Du coup, je me demande si le problème ne viendrait pas d'ailleurs.

(Je remets un fichier exemple en PJ)
 

Pièces jointes

  • Test2.xls
    60 KB · Affichages: 49
  • Test2.xls
    60 KB · Affichages: 46
  • Test2.xls
    60 KB · Affichages: 50
Dernière édition:

Troudz

XLDnaute Occasionnel
Re : Ajouter un CommandButton via VBA

Oui le code est toujours dans le même classeur mais n'est plus organisé de la même façon. (La solution de la macro complémentaire n'est pas vraiment possible à mettre en place dans mon cas).

Avant : j'avais une seule boucle qui créait un bouton puis le reliait au module de classe. La création du bouton entraînant une réinitialisation du code (comme il est indiqué dans ton lien), le lien avec le module de classe était perdu à chaque création d'un nouveau bouton.

Maintenant : je relie les boutons au module de classe APRES les avoir tous créés. En procédant de la sorte, il ne devrait y avoir aucun problème de réinitialisation. A moins que j'ai mal compris l'explication fournie dans ton lien.
 

Discussions similaires

Statistiques des forums

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