Créer bouton en VBA

rixm86 -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

Je travaille sur un fichier assez lourd et pour un utilisateur sans aucunes connaissances de VBA

Mon objectif est de lui faciliter le travail sur le fichier en mettant des boutons entre chaque macro, afin qu'il puisse modifier éventuellement son fichier entre chaque étape.

Ce que je souhaite donc est: a la fin de ma macro1, créer un bouton qui permette de lancer la macro2

Je debute en VBA et j'ai trouvé le code suivant en regardant un peu partout sur le net:

Sub Macro1()
...
...

Dim bouton As OLEObject

Set bouton = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=451.5, Top:=231, Width:=200, Height:=71)
bouton.Name = "boutonBA"
'texte sur le bouton
ActiveSheet.OLEObjects(1).Object.Caption = "Lancer la macro2"

Code = "Sub BoutonAna_Click()" & vbCrLf
Code = Code & "Call Macro2" & vbCrLf
Code = Code & "End Sub"

End Sub

Sub Macro2()
...
...
End Sub


Le bouton se crée bien sur ma feuille de travail, ma macro2 fonctionne bien quand je la lance moi-meme, mais le bouton créé ne réagit pas en cas de clic.

Le probleme vient-il de la syntaxe, de la position du code bouton dans le code global, bref, comment faire pour que ca fonctionne?

Merci d'avance pour vos réponses
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. rixm86
     
    j'oubliais de préciser que la feuille sur laquelle se trouve le bouton est créée par la macro1
    0
    1. rixm86
       
      Bon, comme je continue a chercher, j'ai cru comprendre qu'il fallait rajouter les lignes suivantes , que je ne comprends pas, donc si quelqu'un peut m'expliquer...:

      With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
      NextLine = .CountOfLines + 1
      .insertlines NextLine, Code


      Après une première erreur de fiabilité, j'ai reglé excel pour qu'il fasse confiance au projet.

      Néanmoins j'ai toujours une erreur : Erreur d'execution (9) L'indice n'appartient pas a la selection, qui pointe la ligne:

      With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule

      Comme je ne sais pas trop à quoi cette ligne fait reference, j'ai du mal à regler le pb
      0
  2. BloodyAngel Messages postés 1487 Date d'inscription   Statut Contributeur Dernière intervention   403
     
    Hello
    j'ai réalisé une chose semblable sinon qu'elle tournait sous Access.

    Dim mdl As Module ' Pour Event
    Dim ctl As Control ' Controle
    Set ctls(c) = CreateControl("TodayOps", acLabel, acDetail, , , x, y, 3000, 300)
    With ctls(c)
    .Caption = CStr(tabTriIn(0, 4))
    .Name = "Lab" + CStr(c) + "4"
    .BorderStyle = 0
    .FontBold = False
    .FontSize = 8
    .ForeColor = RGB(0, 0, 0)
    .TextAlign = 1
    End With
    Set mdl = frm.Module
    lng = mdl.CreateEventProc("Click", ctls(c).Name)

    '***************************

    Private Sub CreeMod()

    Dim md As Module
    Dim i As Integer

    On Error GoTo MyErr
    Set md = Application.Modules("Form_TodayOps")
    md.InsertLines md.CountOfLines + 1, "Private Sub ModifJS()"
    md.InsertLines md.CountOfLines + 1, ""
    md.InsertLines md.CountOfLines + 1, ""
    md.InsertLines md.CountOfLines + 1, ""

    Exit Sub
    MyErr:
    i = MsgBox("Sorry but it seems there is an internal error. They application will not work correctly", vbCritical + vbOKOnly, "ERROR")
    Exit Sub

    End Sub

    /****************************

    Le premier code créait un label qui réagissait à un click. Un code dans un module devait alors se lancer (voir fonction CreeMod).
    Désolé de ne pas détailler plus mais ça fait un bail...
    J'espère que ça pourra t'aider.

    Tchuss et bon courage

    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    bonjour,
    voir..
    http://www.commentcamarche.net/faq/sujet 11237 vba ajouter commandbutton et le code qui va avec
    A+
    0