créer un bouton dynamiquement un bouton dans une feuille excel
1 réponse
Jot59
Bonjour ,
je souhaite créer un bouton par macro et affecter une macro également à ce
bouton créé, sachant que le code lié à la macro qui doit affecter doit
pouvoir être changé dynamiquement en fonction du contenu de certaines
cellules.
j'ai écrit le code suivant :
Dim X As Byte
Dim Code As String
Dim NextLine As String
Dim oOLE As OLEObject
Sheets("Menu").Select
Range("A1").Select
i = 1
Do While Cells(i, 1) <> "XXX"
i = i + 1
Loop
i = i + 1
BU_number = Cells(i, 1)
Workbooks.Add 'creer classeur
Set oOLE =
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=340, Top:=30, Width:=100,
Height:=30)
'Left position bouton par rapport au bord gauche de la feuille
'Top position bouton par rapport au haut de la feuille
'Width largeur bouton
'Height hauteur bouton
X = ActiveSheet.OLEObjects.Count 'compter le nombre de boutons existants
dans la feuille
'option nommer l'objet
oOLE.Name = "CommandButton" & X
'texte sur le bouton
ActiveSheet.OLEObjects(X).Object.Caption = "BU " & X
Code = "Sub CommandButton" & X & "_Click()" & vbCrLf
Code = Code & "Sheets(""feuil2"").select" & vbCrLf
Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.insertlines NextLine, Code
End With
End Sub
ce code fonctionne très bien lorsqu'on crée une nouvelle feuille
"Workbooks.Add 'creer classeur" après la boucle.
Le fait d'appuyer sur le bouton me fait aller sur la feuille "feuil2"
par contre dès qu'on supprime la ligne "Workbooks.Add 'creer classeur "
qui permet donc de créer le bouton sur la feuille active cane marche plus
j'ai le message suivant :
"Impossible d'entrer en mode arrêt maintenant"
puis si je fais continuer : message : l'indice n'appartient à la sélection"
Quelqu'un peut m'aider sur le sujet
merci d'avance
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David
Salut,
j'ai regardé ton code et comme chez toi, au moment de l'execution il est marqué Impossible d'entrer en mode arrêt maintenant, puis lorsqu'on continue j'obtiens une nouvelle erreur. Je pense que le probleme provient des ligne apres ActiveSheet.OLEObjects.Add. Il doit y avoir un probleme d'indice pour un des tableaux utilises, je pense VBComponents ensuite et il n'est pas possible d'entrer en mode debuggage avec la fonction ActiveSheet.OLEObjects.Add c'est pourquoi il met l'erreur Impossible d'entrer en mode arrêt maintenant.
En esperant que cela t'aide...
David
"Jot59" wrote in message news:
Bonjour , je souhaite créer un bouton par macro et affecter une macro également à ce bouton créé, sachant que le code lié à la macro qui doit affecter doit pouvoir être changé dynamiquement en fonction du contenu de certaines cellules. j'ai écrit le code suivant : Dim X As Byte Dim Code As String Dim NextLine As String Dim oOLE As OLEObject Sheets("Menu").Select Range("A1").Select i = 1 Do While Cells(i, 1) <> "XXX" i = i + 1 Loop i = i + 1 BU_number = Cells(i, 1)
Workbooks.Add 'creer classeur Set oOLE > ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Link:úlse, DisplayAsIcon:úlse, Left:40, Top:0, Width:0, Height:0) 'Left position bouton par rapport au bord gauche de la feuille 'Top position bouton par rapport au haut de la feuille 'Width largeur bouton 'Height hauteur bouton
X = ActiveSheet.OLEObjects.Count 'compter le nombre de boutons existants dans la feuille
'option nommer l'objet oOLE.Name = "CommandButton" & X 'texte sur le bouton ActiveSheet.OLEObjects(X).Object.Caption = "BU " & X Code = "Sub CommandButton" & X & "_Click()" & vbCrLf Code = Code & "Sheets(""feuil2"").select" & vbCrLf Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, Code End With End Sub
ce code fonctionne très bien lorsqu'on crée une nouvelle feuille "Workbooks.Add 'creer classeur" après la boucle. Le fait d'appuyer sur le bouton me fait aller sur la feuille "feuil2"
par contre dès qu'on supprime la ligne "Workbooks.Add 'creer classeur " qui permet donc de créer le bouton sur la feuille active cane marche plus j'ai le message suivant : "Impossible d'entrer en mode arrêt maintenant" puis si je fais continuer : message : l'indice n'appartient à la sélection"
Quelqu'un peut m'aider sur le sujet merci d'avance
Salut,
j'ai regardé ton code et comme chez toi, au moment de l'execution il est
marqué Impossible d'entrer en mode arrêt maintenant, puis lorsqu'on continue
j'obtiens une nouvelle erreur.
Je pense que le probleme provient des ligne apres
ActiveSheet.OLEObjects.Add.
Il doit y avoir un probleme d'indice pour un des tableaux utilises, je pense
VBComponents ensuite et il n'est pas possible d'entrer en mode debuggage
avec la fonction ActiveSheet.OLEObjects.Add c'est pourquoi il met l'erreur
Impossible d'entrer en mode arrêt maintenant.
En esperant que cela t'aide...
David
"Jot59" <Jot59@discussions.microsoft.com> wrote in message
news:1F519C60-52E3-4C3E-AC72-D2F80FFB6E96@microsoft.com...
Bonjour ,
je souhaite créer un bouton par macro et affecter une macro également à ce
bouton créé, sachant que le code lié à la macro qui doit affecter doit
pouvoir être changé dynamiquement en fonction du contenu de certaines
cellules.
j'ai écrit le code suivant :
Dim X As Byte
Dim Code As String
Dim NextLine As String
Dim oOLE As OLEObject
Sheets("Menu").Select
Range("A1").Select
i = 1
Do While Cells(i, 1) <> "XXX"
i = i + 1
Loop
i = i + 1
BU_number = Cells(i, 1)
Workbooks.Add 'creer classeur
Set oOLE > ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:úlse, DisplayAsIcon:úlse, Left:40, Top:0, Width:0,
Height:0)
'Left position bouton par rapport au bord gauche de la feuille
'Top position bouton par rapport au haut de la feuille
'Width largeur bouton
'Height hauteur bouton
X = ActiveSheet.OLEObjects.Count 'compter le nombre de boutons
existants
dans la feuille
'option nommer l'objet
oOLE.Name = "CommandButton" & X
'texte sur le bouton
ActiveSheet.OLEObjects(X).Object.Caption = "BU " & X
Code = "Sub CommandButton" & X & "_Click()" & vbCrLf
Code = Code & "Sheets(""feuil2"").select" & vbCrLf
Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
NextLine = .CountOfLines + 1
.insertlines NextLine, Code
End With
End Sub
ce code fonctionne très bien lorsqu'on crée une nouvelle feuille
"Workbooks.Add 'creer classeur" après la boucle.
Le fait d'appuyer sur le bouton me fait aller sur la feuille "feuil2"
par contre dès qu'on supprime la ligne "Workbooks.Add 'creer classeur "
qui permet donc de créer le bouton sur la feuille active cane marche plus
j'ai le message suivant :
"Impossible d'entrer en mode arrêt maintenant"
puis si je fais continuer : message : l'indice n'appartient à la
sélection"
Quelqu'un peut m'aider sur le sujet
merci d'avance
j'ai regardé ton code et comme chez toi, au moment de l'execution il est marqué Impossible d'entrer en mode arrêt maintenant, puis lorsqu'on continue j'obtiens une nouvelle erreur. Je pense que le probleme provient des ligne apres ActiveSheet.OLEObjects.Add. Il doit y avoir un probleme d'indice pour un des tableaux utilises, je pense VBComponents ensuite et il n'est pas possible d'entrer en mode debuggage avec la fonction ActiveSheet.OLEObjects.Add c'est pourquoi il met l'erreur Impossible d'entrer en mode arrêt maintenant.
En esperant que cela t'aide...
David
"Jot59" wrote in message news:
Bonjour , je souhaite créer un bouton par macro et affecter une macro également à ce bouton créé, sachant que le code lié à la macro qui doit affecter doit pouvoir être changé dynamiquement en fonction du contenu de certaines cellules. j'ai écrit le code suivant : Dim X As Byte Dim Code As String Dim NextLine As String Dim oOLE As OLEObject Sheets("Menu").Select Range("A1").Select i = 1 Do While Cells(i, 1) <> "XXX" i = i + 1 Loop i = i + 1 BU_number = Cells(i, 1)
Workbooks.Add 'creer classeur Set oOLE > ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Link:úlse, DisplayAsIcon:úlse, Left:40, Top:0, Width:0, Height:0) 'Left position bouton par rapport au bord gauche de la feuille 'Top position bouton par rapport au haut de la feuille 'Width largeur bouton 'Height hauteur bouton
X = ActiveSheet.OLEObjects.Count 'compter le nombre de boutons existants dans la feuille
'option nommer l'objet oOLE.Name = "CommandButton" & X 'texte sur le bouton ActiveSheet.OLEObjects(X).Object.Caption = "BU " & X Code = "Sub CommandButton" & X & "_Click()" & vbCrLf Code = Code & "Sheets(""feuil2"").select" & vbCrLf Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, Code End With End Sub
ce code fonctionne très bien lorsqu'on crée une nouvelle feuille "Workbooks.Add 'creer classeur" après la boucle. Le fait d'appuyer sur le bouton me fait aller sur la feuille "feuil2"
par contre dès qu'on supprime la ligne "Workbooks.Add 'creer classeur " qui permet donc de créer le bouton sur la feuille active cane marche plus j'ai le message suivant : "Impossible d'entrer en mode arrêt maintenant" puis si je fais continuer : message : l'indice n'appartient à la sélection"
Quelqu'un peut m'aider sur le sujet merci d'avance