Créer bouton en VBA
rixm86
-
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
lermite222 Messages postés 8724 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Créer bouton en VBA
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Créer un lien pour partager des photos - Guide
- Comment créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
3 réponses
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
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
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