Option Explicit Public Sub test() Dim Ws As Worksheet Dim Obj As OLEObject Dim laMacro As String Dim x As Integer Set Ws = Sheets.Add 'Ajoute une nouvelle feuille 'ajoute un CommandButton dans la nouvelle feuille Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1") With Obj .Name = "monBouton" 'renomme le bouton .Left = 50 'position horizontale par rapport au bord gauche de la feuille .Top = 50 'position verticale par rapport au bord haut de la feuille .Width = 150 'largeur .Height = 30 'hauteur .Object.Caption = "Supprimer données feuille" End With 'Spécifie le contenu de la macro qui sera associée au bouton laMacro = "Sub monBouton_Click()" & vbCrLf laMacro = laMacro & "multiabscisse" & vbCrLf laMacro = laMacro & "End Sub" 'Ajoute la procédure dans la feuille With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule x = .CountOfLines + 1 .InsertLines x, laMacro End With End Sub Public Sub multiabscisse() MsgBox "La macro multiabscisse est en cours. Nikel !" End Sub
sheets("nom de la feuille").etc
Sub faire_bouton() Dim toto As OLEObject Dim F As Worksheet Set F = Sheets("Feuil1") Set toto = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _ , DisplayAsIcon:=False) With toto .Name = "coucou" .Left = F.Range("H39").Left .Top = F.Range("H39").Top .Width = F.Range("H39:K41").Width .Height = F.Range("H39:K41").Height .Object.Caption = "BLA BLA" .Object.Font.Name = "Cambria" .Object.Font.Size = 12 .Object.Font.Bold = True End With End Sub
Private Sub coucou_Click() MsgBox "click constaté sur le nouveau bouton" End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJ'avoue que là j'ai de la misère à suivre. En principe, au moment de la création de la feuille, on peut lui donner un nom. Ensuite, on peut l'utiliser avec quelque chose du genre:
Il te faut donc mettre le code de son écènement dans le module de code de Feuil1
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)qui me détectera quand on cliquera sur la cellule. La encore je ne passe pas par le module de la feuille.
Plus je lis, plus je sens sinon carrément l'usine à gaz
si nous avons bien compris, tu veux doter chaque nouvelle feuille créée d'un bouton de commande utilisable sur cette feuille.
Question toute bête : quel code (instructions) devra s'exécuter au clic de ce bouton ?
Question toute bête : quel code (instructions) devra s'exécuter au clic de ce bouton ?
Dim VBComp As VBComponent Set VBComp = ThisWorkbook.VBProject.VBComponents.Add(1) VBComp.Name = "NouveauModule" ReDim tabl(3) tabl(0) = "Sub laMacro()" tabl(1) " Range(""A1"").Value ""Coucou""" tabl(2) = "End Sub" With VBComp.CodeModule For i = 0 To UBound(tabl) .InsertLines .CountOfLines + 1 + i, tabl(i) Next ReDim Preserve tabl(4) tabl(0) = "Sub autreMacro()" tabl(1) " Range(""A1"").Value ""blabla""" tabl(2) " Range(""A1"").Value ""blibli""" tabl(3) = "End Sub" For i = 0 To UBound(tabl) .InsertLines .CountOfLines + 1 + i, tabl(i) Next End With End Sub
'Ajoute la procédure dans la feuille With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule x = .CountOfLines + 1 .InsertLines x, laMacro End With