Jeremy45380
Messages postés5Date d'inscriptionjeudi 16 décembre 2010StatutMembreDernière intervention21 décembre 2010
-
21 déc. 2010 à 09:44
Jeremy45380
Messages postés5Date d'inscriptionjeudi 16 décembre 2010StatutMembreDernière intervention21 décembre 2010
-
21 déc. 2010 à 15:22
Bonjour à toutes et à tous!
Le problème que je rencontre est, je pense, plus simple qu'il ne m'en donne l'impression.
J'ai créé un code vb qui permet d'exécuter une recherchev sur une base de données. Cette recherchev est créée sur une nouvelle feuille de mon classeur. Sur cette feuille je crée un bouton.
Là où je bloque, c'est au moment d'affecter une macro à ce bouton.
La macro est déjà prête dans un module il me suffit de l'affecter.
Le but étant de pouvoir créer autant de fois que nécessaire cette feuille et ce bouton puisque le bouton inséré permettra avec sa macro de fermer(supprimer) cette feuille.
Merci de m'avoir accordé un peu de temps de lecture et je l'espère de réponse.
Bonne journée
Jeremy45380
Messages postés5Date d'inscriptionjeudi 16 décembre 2010StatutMembreDernière intervention21 décembre 2010 21 déc. 2010 à 12:11
Bonjour Monsieur,
Merci beaucoup pour votre réponse. J'ai compris globalement le code que vous me proposez cependant je ne parvient pas à régler le(s) problème(s).
Voici comment j'ai aménagé ce code:
'Attribute VB_Name = "CreerDetruireUnBoutonEtSonCode" J'ai mis cette ligne en commentaire à cause d'un message d'erreur (erreur de syntaxe)
'Public Const NomBouton$ = "MonBouton" J'ai mis cette ligne en commentaire à cause d'une erreur (attribut incorrect dans un Sub ou Function)
Dim Btn As OLEObject, VbCodeMod As Object
Dim i&, Code$
'le bouton
Set Btn = ActiveSheet.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1") '
i = ActiveSheet.OLEObjects.Count
With Btn
.Object.Caption = "Test bouton " & i
.Object.Font.Bold = True
.Top = ActiveCell(1, 2).Top
.Left = ActiveCell(1, 2).Left
.Name = NomBouton & i
.Visible = True
End With
'son code
Set VbCodeMod = ActiveWorkbook.VBProject. _
VBComponents(Btn.Parent.Sortie_tableau) Le nom de ma macro.Module8 Le module dans lequel elle se trouve
Code = "Private Sub " & Btn.Name & "_Click()" & vbLf
Code = Code & " MsgBox ""Test réussi : " & Btn.Name & "" & vbLf
Code = Code & " ActiveCell.Select" & vbLf
Code = Code & "End Sub"
VbCodeMod.AddFromString Code
Lorsque je déroule le programme, celui-ci va jusqu'à la création du bouton nommé "bouton test 1" mais je ne sais pas pourquoi cela s'arrête et aucune maccro n'est affectée au bouton.
cs_Le Pivert
Messages postés7903Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention11 mars 2024137 21 déc. 2010 à 12:55
Avant de soumettre ce code je l'ai vérifié, il fonctionne. Voici la marche à suivre:
Ouvrir un nouveau classeur aller dans la partie code insérer un module où vous mettez ce code:
Public Const NomBouton$ = "MonBouton"
Sub CreeBoutonFeuilleEtCode()
Dim Btn As OLEObject, VbCodeMod As Object
Dim i&, Code$
'le bouton
Set Btn = ActiveSheet.OLEObjects.Add _
(ClassType:="Forms.CommandButton.1") '
i = ActiveSheet.OLEObjects.Count
With Btn
.Object.Caption = "Test bouton " & i
.Object.Font.Bold = True
.Top = ActiveCell(1, 2).Top
.Left = ActiveCell(1, 2).Left
.Name = NomBouton & i
.Visible = True
End With
'son code
Set VbCodeMod = ActiveWorkbook.VBProject. _
VBComponents(Btn.Parent.CodeName).CodeModule
Code = "Private Sub " & Btn.Name & "_Click()" & vbLf
Code = Code & " MsgBox ""Test réussi : " & Btn.Name & "" & vbLf
Code = Code & " ActiveCell.Select" & vbLf
Code = Code & "End Sub"
VbCodeMod.AddFromString Code
End Sub 'fs
Sub NettoieBoutonEtCode()
Dim NomBtn$, Shp As OLEObject, Sht As Worksheet
For Each Sht In ActiveWorkbook.Sheets
For Each Shp In Sht.OLEObjects
NomBtn = Shp.Name
If Left(NomBtn, 9) = NomBouton Then
Shp.Delete
With ActiveWorkbook.VBProject. _
VBComponents(Sht.CodeName).CodeModule
Deb = .ProcStartLine(NomBtn & "_Click", 0)
NbLi = .ProcCountLines(NomBtn & "_Click", 0)
.DeleteLines Deb, NbLi
End With
End If
Next Shp
Next Sht
End Sub
Ensuite mettre dans ThisWorkBook ce code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
NettoieBoutonEtCode
End Sub
Private Sub Workbook_Open()
CreeBoutonFeuilleEtCode
End Sub
On ferme en enregistrant, c'est tout.
Pour l'adapter à votre projet il faut que j'ai plus d'élément.