Crear un botón dinámico en Excel usando VBA
jot59
Mensajes publicados
22
Fecha de registro
Estado
Miembro
-
-- -
-- -
Hola,
quiero crear un botón por macro y asignar también una macro a ese botón creado, sabiendo que el código asociado a la macro que debe afectar debe poder cambiar dinámicamente en función del contenido de ciertas celdas.
he escrito el siguiente código:
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 'crear libro
Set oOLE = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=340, Top:=30, Width:=100, Height:=30)
'La posición izquierda del botón respecto al borde izquierdo de la hoja
'La posición superior del botón respecto a la parte superior de la hoja
'Ancho del botón
'Alto del botón
X = ActiveSheet.OLEObjects.Count 'contar la cantidad de botones existentes en la hoja
'opción nombrar el objeto
oOLE.Name = "CommandButton" & X
'texto en el botón
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
quiero crear un botón por macro y asignar también una macro a ese botón creado, sabiendo que el código asociado a la macro que debe afectar debe poder cambiar dinámicamente en función del contenido de ciertas celdas.
he escrito el siguiente código:
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 'crear libro
Set oOLE = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Link:=False, DisplayAsIcon:=False, Left:=340, Top:=30, Width:=100, Height:=30)
'La posición izquierda del botón respecto al borde izquierdo de la hoja
'La posición superior del botón respecto a la parte superior de la hoja
'Ancho del botón
'Alto del botón
X = ActiveSheet.OLEObjects.Count 'contar la cantidad de botones existentes en la hoja
'opción nombrar el objeto
oOLE.Name = "CommandButton" & X
'texto en el botón
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
20 respuestas
-
Hola,
¡He hecho algunas modificaciones para que funcione en mi equipo!
Sub CreartMenú() Dim X Como Byte Dim i, BU_number Como Long Dim Code Como String Dim NextLine Como String Dim oOLE Como OLEObject Sheets("Menu").Select Range("A1").Select i = 1 Do While Cells(i, 1).Value <> "XXX" i = i + 1 Loop i = i + 1 BU_number = Cells(i, 1) 'Workbooks.Add 'crear libro Set oOLE = ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Link:=False, DisplayAsIcon:=False, Left:=340, Top:=30, Width:=100, Height:=30) 'Posición izquierda del botón respecto al borde izquierdo de la hoja 'Posición superior del botón respecto a la parte superior de la hoja 'Ancho del botón 'Alto del botón X = ActiveSheet.OLEObjects.Count 'contar cuántos botones existen en la hoja 'opción llamar objeto oOLE.Name = "CommandButton" & X 'texto en el botón ActiveSheet.OLEObjects(X).Object.Caption = "BU " & X Code = "Sub CommandButton" & X & "_Click()" & vbCrLf Code = Code & "Sheets(" & """feuil2""" & ").select" & vbCrLf Code = Code & "End Sub" & vbCrLf With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, Code End With End Sub
Lupin-
Hola Lupin, Gracias por revisar la macro, tomé la macro de la respuesta y tengo el mismo problema cuando quiero trabajar en la hoja actual (línea 'Workbooks.Add' crear libro en comentarios). Imposible entrar en modo de interrupción ahora. Puede haber un problema de opciones de Excel o Visual Basic. Gracias de antemano, jot59
-
re:
Es totalmente posible que haya parámetros de seguridad!
En cuanto al punto de parada, creo que es normal, la línea
[ Set oOLE ... ] contiene un método [ Add ] y no se puede
atravesar esa línea durante la depuración, me pasa muy
a menudo.
Para los parámetros de seguridad de Excel, en mi equipo la seguridad
está al mínimo y he marcado la casilla [Confiar en el
proyecto de VBA] de la segunda pestaña en los parámetros de
seguridad.
Otro punto, para usar este objeto [ActiveWorkbook.VBProject.VBComponents], hace falta cargar la referencia :
Microsoft Visual Basic for Applications Extensibility
Para depurar coloca puntos de interrupción delante y después
de la línea del [ Set oOLE ... ].
¡Buena suerte!
Lupin- Bonjour,
je sais que ce post a ete resolu il y a longtemps mais vous pourrez surement m'aider.
je ne fais pas tout à fait la même chose que dans le message initial mais ca s'en rapproche.
je crée dynamiquement un certain nombre de boutons avec le code suivant et je crée le code qui va avec en utilisant ce que vous avez mis plus haut :dim myCommandButtonDetail as Control Set myCommandButtonDetail = GestionMeuleForm.MultiPage1.Pages(4).CalculBesoinFrame.Controls.Add _ ("Forms.CommandButton.1", "CommandButtonDetail_" & iNbReappro) With myCommandButtonDetail .Name = "CommandButtonDetail_" & iNbReappro '-- le reste des param End With strCode = "Public Sub CommandButtonDetail_" & iNbReappro & "_Click()" & Chr(13) & Chr(13) strCode = strCode & "Load DetailReapproForm" & Chr(13) & "GestionMeuleForm.Hide" & Chr(13) & "DetailReapproForm.Show" & Chr(13) & Chr(13) strCode = strCode & "End Sub" & Chr(13) With ThisWorkbook.VBProject.VBComponents("GestionMeuleForm").CodeModule NextLine = .CountOfLines + 1 .InsertLines NextLine, strCode End With
cependant quand on clic sur un de ces boutons rien ne se passe alors que le code est bien ajouté a la fin du code de GestionMeuleForm.
je ne m'y connais pas assez en vba pour savoir pourquoi ca ne fonctionne pas.
merci d'avance de votre aide
-
-
Bonjour,
Si je comprends bien vous tente de créer un/des bouton(s) sur une feuille de facon dynamique.
Commencer déja par faire les manipulations une fois sous l'enregistreur de macro !
Menu Excel // Outils / Macro / Nouvelle macro
Décomposé vos actions en plusieurs petites macros.
Exemple
Créer un bouton
Créer le code associé ( la fonction de calcul ) !
Attacher les morceaux
Epurer les macros
Créer la routine
Sous Excel
Alt F11
Faite un copier/coller du code généré par l'enregistreur et je vous guiderai pour le
nettoyage et l'ajout de boucle et condition.
A la base je puis vous conseiller d'utiliser le classeur que j'ai publié sur Excel-DownLoad
https://www.excel-downloads.com/resources/categories/utilitaires.18/
Rechercher VizioXla, vous aurez une modele de base pour presque tous les objets d'excel !
Lupin -
Bonjour,
vous devez ajouter cette syntaxe :
With myCommandButtonDetail .Name = "CommandButtonDetail_" & iNbReappro .OnAction = "'Nom de la routine a appeller'" '-- le reste des param End With
attention, la ligne se lit :
.OnAction = " 'Nom de la routine a appeller' "
Le nom de la routine doit être entre simple guillemets ' ... '
et le tout doit être entre double guillemets " ' ... ' "
Lupin -
Hola,
me dice que el método o la propiedad no están gestionados por este objeto
intenté usando el OOleObject como lo habías hecho previamente pero no funciona porque quiero colocar el objeto en un formulario y no funciona :
cuando lo hago así (para probar) funciona :
Set oOLECommandButtonDetail = ActiveWorkbook.ActiveSheet.OLEObjects.Add ( argumentos...)
pero cuando hago así (lo que quiero) no funciona :
Set oOLECommandButtonDetail = GestionMeuleForm.MultiPage1.Pages(4). _
CalculBesoinFrame.OLEObjects.Add(arguments...)
gracias por tu respuesta
Claire -
re:
voici le code que j'ai testé :
Sub TestCreationBouton() Dim myCommandButtonDetail As CommandButton Dim iNbReappro As Integer, NextLine As Integer Dim strCode As String iNbReappro = 1 Set myCommandButtonDetail = GestionMeuleForm.MultiPage1.Pages("Page4").CalculBesoinFrame.Controls.Add _ ("Forms.CommandButton.1", "CommandButtonDetail_" & iNbReappro) With myCommandButtonDetail .Name = "CommandButtonDetail_" & iNbReappro .Caption = "Run" .Top = 50 .Left = 100 End With strCode = "" strCode = strCode & "Private Sub CommandButtonDetail_" & iNbReappro & "_Click()" & vbCrLf & vbCrLf strCode = strCode & "' Load DetailReapproForm'" & vbCrLf strCode = strCode & "' GestionMeuleForm.Hide'" & vbCrLf strCode = strCode & "' DetailReapproForm.Show'" & vbCrLf strCode = strCode & " Msgbox" & """" & "Réussi" & vbCrLf & vbCrLf strCode = strCode & "End Sub" & Chr(13) With ThisWorkbook.VBProject.VBComponents("GestionMeuleForm").CodeModule NextLine = .CountOfLines + 1 .InsertLines NextLine, strCode End With End Sub
Lupin-
-
Estimado Lupin, Este hilo es un poco antiguo pero me interesa mucho. Por mi parte busco crear de 1 a n botones seguidos, con el código asociado. Sin embargo no logro hacer funcionar mi bucle de creación de botones que es el siguiente For Y = 1 To Pliste_Pdv_Num.Count Sheets("SYNTHESE").Range("B" & 2 * Y + 10).Value = Pliste_Pdv_Num(Y) Sheets("SYNTHESE").Range("F" & 2 * Y + 10).Value = Pliste_Date_Controle(Y) With ActiveSheet LargeurBouton = Columns(2 * Y + 8).Width GaucheBouton = Columns(2 * Y + 8).Left HauteurBouton = Rows(2 * Y + 10).Height SommetBouton = Rows(2 * Y + 10).Top End With Set oOLE = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Left:=GaucheBouton, Top:=SommetBouton, Width:=LargeurBouton, Height:=HauteurBouton) oOLE.Name = "CommandButton" & Y Sheets("SYNTHESE").OLEObjects(Y).Object.Caption = "Rapport " & Y Sheets("SYNTHESE").OLEObjects(Y).Object.BackColor = ActiveWorkbook.Colors(11) Code = "Sub CommandButton" & Y & "_Click()" & vbCrLf Code = Code & "Sheets(""RAPPORT"").Select" & vbCrLf Code = Code & "Sheets(""RAPPORT"").Cells(11,3).Value=Sheets(""SYNTHESE"").Cells(2 * " & Y & " + 10,2).Value" & vbCrLf Code = Code & "Sheets(""RAPPORT"").Cells(12,3).Value=Sheets(""SYNTHESE"").Cells(2 * " & Y & " + 10,6).Value" & vbCrLf Code = Code & "End Sub" With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule NextLine = .CountOfLines + 1 .InsertLines NextLine, Code End With Next Y Excel se cierra solo al ejecutar este código que genera un error. Tengo la impresión de que es porque uso el mismo objeto oOle para crear mis botones... ¡Un poco de ayuda sería muy apreciada!
-
Estimado Lupin,
Este hilo es un poco antiguo pero me interesa mucho.
Por mi parte busco crear de 1 a n botones seguidos, con el código asociado.
Sin embargo no logro hacer funcionar mi bucle de creación de botones que es el siguiente
For Y = 1 To Pliste_Pdv_Num.Count
Sheets("SYNTHESE").Range("B" & 2 * Y + 10).Value = Pliste_Pdv_Num(Y)
Sheets("SYNTHESE").Range("F" & 2 * Y + 10).Value = Pliste_Date_Controle(Y)
With ActiveSheet
LargeurBouton = Columns(2 * Y + 8).Width
GaucheBouton = Columns(2 * Y + 8).Left
HauteurBouton = Rows(2 * Y + 10).Height
SommetBouton = Rows(2 * Y + 10).Top
End With
Set oOLE = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
Left:=GaucheBouton, Top:=SommetBouton, Width:=LargeurBouton, Height:=HauteurBouton)
oOLE.Name = "CommandButton" & Y
Sheets("SYNTHESE").OLEObjects(Y).Object.Caption = "Rapport " & Y
Sheets("SYNTHESE").OLEObjects(Y).Object.BackColor = ActiveWorkbook.Colors(11)
Code = "Sub CommandButton" & Y & "_Click()" & vbCrLf
Code = Code & "Sheets(""RAPPORT"").Select" & vbCrLf
Code = Code & "Sheets(""RAPPORT"").Cells(11,3).Value=Sheets(""SYNTHESE"").Cells(2 * & Y & " + 10,2).Value" & vbCrLf
Code = Code & "Sheets(""RAPPORT"").Cells(12,3).Value=Sheets(""SYNTHESE"").Cells(2 * & Y & " + 10,6).Value" & vbCrLf
Code = Code & "End Sub"
With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
NextLine = .CountOfLines + 1
.insertlines NextLine, Code
End With
Next Y
Excel se cierra solo en l ejecución de este código que genera un error.
Tengo la impresión de que es porque uso el mismo objeto oOle para crear mis botones...
¡Un poco de ayuda sería muy apreciada!!!
-
-
Hola Stim, Con esto,
With ThisWorkbook.VBProject.VBComponents(IntituleCre).CodeModule
debería leerse como:
With ThisWorkbook.VBProject.VBComponents("IntituleCre").CodeModule
a menos que [ IntituleCre ] sea una variable y, en ese caso, es que no ha sido inicializada.
Lupin -
re:
del tipo:
Sub ChercheFeuille() Dim VBP As Variant Dim VBC As VBComponent Dim Message As String On Error Resume Next Set VBP = ActiveWorkbook.VBProject Message = "" With VBP For Each VBC In .VBComponents 'Message = Message & vbLf & VBC.Name Select Case VBC.Type 'Case 1: Message = Message & vbLf & "Module " 'Case 2: Message = Message & vbLf & "Class Module " 'Case 3: Message = Message & vbLf & "UserForm " Case 100: Message = Message & vbLf & "Document Module " & VBC.Name End Select Next VBC End With MsgBox Message End Sub '
Lupin -
En realidad, más simple, he encontrado la función "ActiveSheet.CodeName" que me permite obtener el nombre interno de la hoja, solicitado por la función VBComponents...
Después saber por qué no puedo poner directamente el nombre externo de la hoja... ahí ya me supera ^^
Gracias de todas formas por todas tus respuestas Lupin ;)
++ -
Hola,
Suponiendo que la hoja de configuración se llama [ Base ] !
Suponiendo que el botón está colocado en la hoja Base y que se llama [ Groupe ] !
Colocar este código detrás de la hoja :Option Explicit Private Sub Groupe_Click() Call Module1.Choix_Feuille(Me.Groupe.Name) End Sub
y colocar este código en un módulo llamado [ Module1 ].Option Explicit Sub Choix_Feuille(Nom_Feuille As String) Nom_Feuille = Sheets("Base").Groupe.Name If (Feuille_Existe(Nom_Feuille)) Then Sheets(Nom_Feuille).Select Range("A1").Select Else MsgBox "Impossible, la feuille n'existe pas" End If End Sub ' Public Function Feuille_Existe(Feuille As String) As Boolean Dim wsFeuille As Worksheet Feuille_Existe = False For Each wsFeuille In Worksheets If (wsFeuille.Name = Feuille) Then Feuille_Existe = True Exit For End If Next wsFeuille End Function ' -
Hola, Solo traduzco el texto al español manteniendo el formato HTML y sin añadir nada más. Hola,
solo he encontrado este tema que se ajusta aproximadamente a mi necesidad, así que hago mi pregunta también.
Tengo una macro de Excel que crea una veintena de pestañas y una pestaña de resumen, y he seguido sus consejos para crear en la pestaña de resumen una lista desplegable que contiene el nombre de todas las pestañas y que permite ir allí si se hace clic, y un botón en todas las demás pestañas que permite volver a la pestaña de resumen cuando se hace clic.
Hago todo esto en VBA, funciona muy bien (todos los botones y la lista funcionan), pero tengo el siguiente problema:
- si guardo el archivo creado justo después de que la macro haya terminado y lo vuelvo a abrir, aparece el mensaje: "Este libro ha perdido su proyecto VBA, sus controles ActiveX y otras características relacionadas con la programación". Así que todos los botones siguen ahí, pero ya no realizan ninguna acción (se convierten en simples dibujos...)
- por otro lado, si uso al menos uno de los botones antes de guardar, al volver a abrirlo no tengo ningún problema
Por eso, tengo dos alternativas:
- bien encuentro de qué se debe este problema
- o bien encuentro cómo usar uno de los botones con VBA antes de guardar y cerrar el archivo, lo que permitiría no tener que hacerlo manualmente antes de guardar (ya que genero varios archivos seguidos)
Mis dos fragmentos de código que se llaman en cada creación de pestaña para uno de ellos, y una sola vez para la lista, son:
Sub CreerBoutonRetour() Dim Code As String Dim NextLine As String Dim oOLE As OLEObject Set oOLE = ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _ Link:=False, DisplayAsIcon:=False, Left:=340, Top:=5, 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(1).Object.Caption = "Retour aux graphes" Code = "Sub CommandButton" & X & "_Click()" & vbCrLf Code = Code & "Sheets(""Graph (2)"").Select" & vbCrLf Code = Code & "End Sub" With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, Code End With End Sub Sub ListederoulanteOnglets() Dim Code As String Dim NextLine As String Dim oOLE As OLEObject Set oOLE = ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.Combobox.1", _ Link:=False, DisplayAsIcon:=False, Left:=1000, Top:=500, Width:=200, 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 = "BoutonListe" & X 'texte sur le bouton 'ActiveSheet.OLEObjects(1).Object.Caption = "Choix de l'onglet" Code = "Sub BoutonListe" & X & "_DropButtonClick()" & vbCrLf Code = Code & "BoutonListe" & X & ".Clear" & vbCrLf sheetsnbre = ActiveWorkbook.Sheets.Count For cptouze = 1 To sheetsnbre Code = Code & "BoutonListe" & X & ".AddItem Sheets(" & cptouze & ").Name" & vbCrLf Next cptouze Code = Code & "End Sub" With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, Code End With Code2 = "Sub BoutonListe" & X & "_Click()" & vbCrLf Code2 = Code2 & "Sheets(" & "BoutonListe" & X & ".Value).Activate" & vbCrLf Code2 = Code2 & "End Sub" With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule NextLine = .CountOfLines + 1 .insertlines NextLine, Code2 End With End Sub -
Creo que este hilo de discusión interesa a mucha gente.
Aquí está cómo hemos resuelto el problema:
Creamos una macro con los parámetros que hay que definir
p. ej.
Sub ChangeSheet(SheetName as String)
Sheets(SheetName).Select
End Sub
Luego pasamos el parámetro en la llamada al botón creado dinámicamente:
sheet1.Shapes(1).OnAction = "'ChangeSheet ""Feuil1""'" -
Hola,
En primer lugar, debo confesar que he confundido
un botón de menú con el tipo de botón que estás intentando instalar.
He probado tu código modelándolo para hacerme un ejemplo
y parece que es un error conocido de Microsoft según
las investigaciones que he realizado.
¡Lo siento por no poder ir más allá!
Lupin -
Hola,
En mi caso creo una hoja dinámicamente en el código y creo un botón en esa hoja, pero cuando quiero insertar código en la línea:
With ThisWorkbook.VBProject.VBComponents(IntituleCre).CodeModule
Me sale el error:
"Error de tiempo de ejecución 9:
El índice no pertenece a la selección"
Y esto sucede sin importar lo que pongas dentro del With (incluso cuando el With está vacío ...)
¿He olvidado algo? -
Gracias por la precisión, lupin ;)
Pero el problema no es ese en realidad ^^ (IntituleCre es una variable que contiene el nombre de la hoja)
Acabo de ver (al listar los vbcomponents) que en realidad el componente se llama "Feuil6" y funciona muy bien cuando uso ese nombre... así que en realidad me haría falta un método que me devuelva el nombre VB de esta hoja...
-
Hola Bonjour
Je ne suis pas super fort en VBA sur Excel, donc j'aurais besoin d'un petit coups de mains.
je vous explique un peu la structure de mon fichier.
j'ai une feuille de config qui me permet de créer toutes les autres autres feuilles du classeur.
dans ces feuilles, j'ai une feuille qui sert de "base" où je veux créé des boutons dynamiquement suivant le nom donné dans ma feuille de config.
c'est bouton devrais me faire aller directement à la feuille choisit
ex: bouton nommé "groupe" m'envoie sur la feuille "groupe"
Mon problème c'est que je ne sais pas comment récupérer le nom du boutons.
voici le code que j'envisager
sub choix_feuille()
dim nom_feuille as string
nom_feuille = ???????????
if feuille_existe then
sheets(nom_feuille).select
range("A1").select
else
msgbox ("Impossible, la feuille n'existe pas)
end if
Merci de votre aide -
Hola
Gracias por esta respuesta
De hecho lo que quisiera es recuperar el nombre del botón que se llama "grupo" en la variable Nom_feuille de mi macro a continuación.
Sub Choix_Feuille(Nom_Feuille As String)
Nom_Feuille = ??? nombre_del_botón sobre el que hago clic ??????
If (Feuille_Existe(Nom_Feuille)) Then
Sheets(Nom_Feuille).Select
Range("A1").Select
Else
MsgBox "Impossible, la feuille n'existe pas"
End If
End Sub
Quisiera hacer así, porque tengo una macro que me crea mis botones en función de una base (la hoja de configuración). así que cada botón tiene un nombre que corresponde a una hoja y todos los botones apuntan a la macro "choix_feuille" anterior. Por eso quiero recuperar el nombre del botón para que al hacer clic en el botón groupe1 voy a la hoja groupe1; si hago clic en groupe2 voy a grupo2 y así sucesivamente.
No he entendido muy bien cómo funciona tu solución, pero creo que hace falta conocer el número de botones y crear una macro por botón. Si entiendo bien, tu solución no me sirve mucho porque no conozco el número de botones que se crearán, ya que se crean a partir de la hoja de configuración y, por lo tanto, no puedo crear tantas macros como botones. de ahí la solución que quiero implementar, pero estoy bloqueado en la manera de recuperar el nombre del botón en el que hago clic.
Además esto permite hacer botones dinámicos.
Gracias por tu ayuda si ves otra manera de lograr lo que quiero. Estoy interesado. -
re:
ahí hay un problema!!!
Con VBA es imposible crear un grupo de control, así que cada botón
envía a una rutina distinta!
ej.:
Si el primer Botón se llama [ Grupo1 ]
Cuando haces clic en el botón llegas
a la procedimiento:
Private Sub Groupe1_Click()
End Sub
así llamas a tu procedimiento pasando el nombre del botón.
Private Sub Groupe1_Click()
Call Module1.Choix_Feuille("Groupe1")
End Sub
'
Si tus botones se insertan dinámicamente, también
tendrás que insertar el código correspondiente de forma dinámica!
Lupin -
Hola,
estoy dando mis primeros pasos solo con Visual Basic y trato de entender una serie de ejercicios simples que empecé a hacer (con alguna dificultad...)
intento, por tanto, crear en mi hoja de Excel botones a través de Visual Basic dentro del marco de la macro.
Por defecto, se trata de un ejercicio sobre una función de cálculo de un círculo en la que obviamente he codificado el valor de pi, el del radio, ... pero no logro entender cómo hacer que aparezcan en mi hoja los botones que intento crear (estilo appel_u_calcul, appel_p_calcul) y cómo hacer que aparezca un botón "botón form appel usf".
Porque no logro crear y por lo tanto hacer el cálculo con userform
En resumen, primeros pasos difíciles; gracias por la ayuda que pueda brindar a este pequeño sms de un terrícola en apuros -
Buenas noches,
Me encuentro con el mismo tipo de problema que las personas anteriores, se lo explico:
en una pestaña de mi libro de Excel creo dinámicamente botones asociados a una macro que me permiten restituir en otra pestaña datos filtrados por el número de proyecto listado. Todos mis botones llevan a la misma macro que debe poder identificar la fila en la que está colocado el botón clicado, pero no encuentro cómo recuperar la fila para saber sobre qué filtrar mi restitución.
Gracias de antemano por vuestra ayuda -
Todo proviene del nombre de la página:
intentar hacer, al inicio de la función
Dim sheetName
sheetName = ActiveSheet.Name
Dim sheetIndex
sheetIndex = ActiveSheet.Index
Dim nameIndex
nameIndex = ""Feuil"" & sheetIndex
ActiveSheet.Name = nameIndex
y al final:
ActiveSheet.Name = sheetName