Salut,
Cela ressemble à ce que demander Emeric, il faudra que je le mette sur mon wiki.
Voici un exemple de code où le nom du bouton est "Bouton1" et pour caption "Mon Bouton" .
Sub Princ() 'Zon
Dim Ch$, F As Worksheet
Set F = Sheets(1) 'à adapter
SupprObj F, "Bouton1"
SupprUneProc ThisWorkbook, F.CodeName, "Bouton1_Click"
Ch = "MsgBox ""Salut XLD"""
AjouterUnObj Sheets(1), "Forms.commandbutton.1", Array("Bouton1", 30, 4, 100, 20, "Mon Bouton")
AjouterProcEven ThisWorkbook, F.CodeName, "Click", "Bouton1", Ch
End Sub
Sub AjouterUnObj(F As Worksheet, Objet$, Optional T)
Dim B As OLEObject
Set B = F.OLEObjects.Add(Objet)
If IsMissing(T) Then Exit Sub
With B
.Name = T(0)
.Left = T(1)
.Top = T(2)
.Width = T(3)
.Height = T(4)
.Object.Caption = T(5)
End With
End Sub
Sub AjouterProcEven(C As Workbook, NomModule$, Evenement$, Objet$, Code$)
With C.VBProject.VBComponents(NomModule).CodeModule
.InsertLines .CreateEventProc(Evenement, Objet) + 1, Code
End With
End Sub
Sub SupprUneProc(C As Workbook, NomModule$, NomProc$)
On Error Resume Next
With C.VBProject.VBComponents(NomModule).CodeModule
.DeleteLines .ProcStartLine(NomProc, 0), .ProcCountLines(NomProc, 0)
End With
End Sub
Sub SupprObj(F As Worksheet, Nom$)
On Error Resume Next
F.OLEObjects(Nom).Delete
End Sub
A+++