Créer bouton en VBA

Fermé
rixm86 - 28 mai 2008 à 23:14
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 29 mai 2008 à 11:46
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

3 réponses

j'oubliais de préciser que la feuille sur laquelle se trouve le bouton est créée par la macro1
0
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
BloodyAngel Messages postés 1482 Date d'inscription mardi 21 juin 2005 Statut Contributeur Dernière intervention 21 juin 2018 401
28 mai 2008 à 23:33
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
29 mai 2008 à 11:46
bonjour,
voir..
http://www.commentcamarche.net/faq/sujet 11237 vba ajouter commandbutton et le code qui va avec
A+
0