Affecter du code à un bouton par VBA

Bonjour à tous,

Voici le contexte de mon programme VBA : L'utilisateur est sur la page principale du fichier excel, il clique sur un bouton de commande, grâce à un userform cela crée sur une nouvelle page un tableau dépendant des valeurs entrées.

Sur cette nouvelle page, est crée un bouton "importer plan" qui, lorsqu'il clique dessus, lui ouvre le gestionnaire de fichier et il choisit le plan qu'il lui faut (le plan étant différent à chaque page).

Mon problème est le suivant :

Le bouton se crée sans problème à l'endroit voulu sur la nouvelle page. Mais je n'arrive pas du tout à lui affecter du code.

Voici ce que j'ai pour le moment :

ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, _

DisplayAsIcon:=False, Left:=50, Top:=20, Width:=100, Height:= _

36.6).Select

ActiveSheet.OLEObjects(1).Object.Caption = "Importer_plan"

Ces 4 premières lignes fonctionnent pour créer le bouton.

La fonction que je souhaite insérer dans le bouton est le suivant :

Sub InsertionImage()

Dim Emplacement As Range

Dim Img As Object

Dim ShapeObj As Shape

'Boucle pour supprimer l'ancienne image

For Each ShapeObj In ActiveSheet.Shapes

If ShapeObj.Name = "Cible" Then ActiveSheet.Shapes("Cible").Delete

Next ShapeObj

If Application.Dialogs(xlDialogInsertPicture).Show Then

'Définit l'emplacement de l'image

Set Emplacement = Range("E3:H8")

Set Img = ActiveSheet.DrawingObjects(ActiveSheet.Shapes.Count)

With Img.ShapeRange

'Nommer l'image insérée (Pour la supprimer plus facilement ensuite)

.Name = "Cible"

.LockAspectRatio = msoFalse

.Left = Emplacement.Left

.Top = Emplacement.Top

.Height = Emplacement.Height

.Width = Emplacement.Width

End With

Else

MsgBox "Insertion d'image interrompue."

End If

End Sub

Et de ce que j'ai vu sur d'autres forums, j'ai essayé de m'inspirer de cet exemple pour y affecter du code mais cela ne fonctionne pas :

laMacro = "Private Sub CommandButton.1_Click()" & vbCrLf

laMacro = laMacro & "Cells(1,2).Value=2" & 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

J'espère avoir été bien clair,

Je vous remercie par avance pour essayer de m'aider à résoudre mon problème,

Bonjour,

Testes ce code :

Sub Test()

    Dim Code As String

    ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=50, Top:=20, Width:=100, Height:=36.6
    ActiveSheet.OLEObjects(1).Object.Caption = "Importer_plan"

    Code = "Sub CommandButton1_Click()" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "    Dim Emplacement As Range" & vbCrLf
    Code = Code & "    Dim Img As Object" & vbCrLf
    Code = Code & "    Dim ShapeObj As Shape" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "    'Boucle pour supprimer l'ancienne image" & vbCrLf
    Code = Code & "    For Each ShapeObj In ActiveSheet.Shapes" & vbCrLf
    Code = Code & "        If ShapeObj.Name = ""Cible"" Then ActiveSheet.Shapes(""Cible"").Delete" & vbCrLf
    Code = Code & "    Next ShapeObj" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "    If Application.Dialogs(xlDialogInsertPicture).Show Then" & vbCrLf
    Code = Code & "        'Définit l'emplacement de l'image" & vbCrLf
    Code = Code & "        Set Emplacement = Range(""E3:H8"")" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "        Set Img = ActiveSheet.DrawingObjects(ActiveSheet.Shapes.Count)" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "        With Img.ShapeRange" & vbCrLf
    Code = Code & "            'Nommer l'image insérée (Pour la supprimer plus facilement ensuite)" & vbCrLf
    Code = Code & "            .Name = ""Cible""" & vbCrLf
    Code = Code & "            .LockAspectRatio = msoFalse" & vbCrLf
    Code = Code & "            .Left = Emplacement.Left" & vbCrLf
    Code = Code & "            .Top = Emplacement.Top" & vbCrLf
    Code = Code & "            .Height = Emplacement.Height" & vbCrLf
    Code = Code & "            .Width = Emplacement.Width" & vbCrLf
    Code = Code & "        End With" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "    Else" & vbCrLf
    Code = Code & "        MsgBox ""Insertion d'image interrompue.""" & vbCrLf
    Code = Code & "    End If" & vbCrLf
    Code = Code & vbCrLf
    Code = Code & "End Sub"

    With ThisWorkbook.VBProject.VBComponents("Feuil1").CodeModule

        .InsertLines .CountOfLines + 2, Code

    End With

End Sub
Rechercher des sujets similaires à "affecter code bouton vba"