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

20 respuestas

  1. Usuario anónimo
     
    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
    4
    1. jot59 Mensajes publicados 22 Fecha de registro   Estado Miembro 2
       
      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
      0
    2. Usuario anónimo
       
      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
      0
      1. jot59 Mensajes publicados 22 Fecha de registro   Estado Miembro 2 > Usuario anónimo
         
        Hola Lupin,

        de hecho tienes razón, cuando ejecuto la macro fuera de VB, así que desde Excel, funciona.

        ok gracias por tu ayuda

        nos vemos pronto
        0
      2. Naya > Usuario anónimo
         
        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
        0
  2. Usuario anónimo
     
    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
    2
  3. Usuario anónimo
     
    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
    1
  4. Naya
     
    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
    1
  5. Usuario anónimo
     
    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
    1
    1. Naya
       
      Gracias, en todo caso, por haber buscado (sé al menos que no viene de mí y de mis conocimientos limitados en VBA :p sino del propio Windows).

      Voy a darle vueltas para encontrar la forma de sortear el problema ^^
      0
    2. PM76
       
      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!
      0
    3. PM76
       
      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!!!
      0
  6. Usuario anónimo
     
    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
    1
  7. Usuario anónimo
     
    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
    1
    1. djetther2006
       
      Quiero crear un botón que me devuelva a otra celda el cronómetro que ya está mostrado en una celda.

      Mi problema es que la macro que uso para este botón no es buena, porque cuando activo el botón en lugar de hacer que aparezca el cronómetro, congela el valor.


      Gracias por ayudarme....
      0
  8. stim
     
    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 ;)

    ++
    1
  9. Usuario anónimo
     
    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 ' 
    1
  10. Wackolas
     
    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
    1
  11. Varaxor
     
    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""'"
    1
  12. Usuario anónimo
     
    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
    0
  13. Stim
     
    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?
    0
  14. Stim
     
    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...

    0
  15. xaphie
     
    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
    0
  16. xaphie
     
    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.
    0
  17. Usuario anónimo
     
    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
    0
  18. guiss
     
    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
    0
  19. chlore
     
    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
    0
  20. --
     
    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
    0