[excel vba] Problema al asignar una macro a un botón
Thomaaaas
Mensajes publicados
4
Estado
Miembro
-
michel_m Mensajes publicados 18903 Fecha de registro Estado Colaborador Última intervención -
michel_m Mensajes publicados 18903 Fecha de registro Estado Colaborador Última intervención -
Hola a todos,
En pocas palabras, aprendí a programar en VBA un poco tarde. No siempre es muy limpio, pero me arreglo. Aún así, tengo un problema recurrente: en algunas de mis macros, cuando intento asignarla a un botón (para una hoja de Excel), "esta fórmula es demasiado complicada para ser asignada a un objeto". A veces funciona, a veces no (la mayoría de las veces). Cabe mencionar que la macro funciona muy bien cuando la ejecuto desde la página de VBA (F5). No entiendo...
Ejemplo de esta macro tan simple: agrupa las pestañas siguientes en la pestaña "Recap"
Sub Synth()
Sheets("Recap").Select
EndIndicCode = Range("B1000").End(xlUp).Row
j = 5
For i = 0 To EndIndicCode - 17
feuille = Sheets("recap").Range("c17").Offset(i, 0).Value
Sheets(feuille).Select
Range("A:B").Select
Selection.Copy Destination:=Sheets("Synth").Cells(1, j)
Application.CutCopyMode = False
j = j + 3
Next i
Sheets("Synth").Range("A1").Select
End Sub
He revisado los foros antes de hacer mi pregunta.
¡Gracias (mucho!) de antemano!
PD: ¡Fue mi primera pregunta en Cómo funciona, y en un foro en general!
En pocas palabras, aprendí a programar en VBA un poco tarde. No siempre es muy limpio, pero me arreglo. Aún así, tengo un problema recurrente: en algunas de mis macros, cuando intento asignarla a un botón (para una hoja de Excel), "esta fórmula es demasiado complicada para ser asignada a un objeto". A veces funciona, a veces no (la mayoría de las veces). Cabe mencionar que la macro funciona muy bien cuando la ejecuto desde la página de VBA (F5). No entiendo...
Ejemplo de esta macro tan simple: agrupa las pestañas siguientes en la pestaña "Recap"
Sub Synth()
Sheets("Recap").Select
EndIndicCode = Range("B1000").End(xlUp).Row
j = 5
For i = 0 To EndIndicCode - 17
feuille = Sheets("recap").Range("c17").Offset(i, 0).Value
Sheets(feuille).Select
Range("A:B").Select
Selection.Copy Destination:=Sheets("Synth").Cells(1, j)
Application.CutCopyMode = False
j = j + 3
Next i
Sheets("Synth").Range("A1").Select
End Sub
He revisado los foros antes de hacer mi pregunta.
¡Gracias (mucho!) de antemano!
PD: ¡Fue mi primera pregunta en Cómo funciona, y en un foro en general!
5 respuestas
Hola,
Nos dices que quieres enviar a la hoja "recap" y en tu código envías copias a la hoja "synth"?...
también nos dices que agrupa las pestañas, sin embargo, en tu código solo envías una sola pestaña llamada "hoja"... ¿entonces habría un botón en cada hoja?....
en espera...
Michel
Nos dices que quieres enviar a la hoja "recap" y en tu código envías copias a la hoja "synth"?...
también nos dices que agrupa las pestañas, sin embargo, en tu código solo envías una sola pestaña llamada "hoja"... ¿entonces habría un botón en cada hoja?....
en espera...
Michel
Hola Michel,
Gracias por tu respuesta. Algunas precisiones:
- De hecho, en la pestaña "recap", en C17:C60: hay el nombre de todas las pestañas.
- La variable hoja permite seleccionarlas una por una.
- Con el fin de copiar las columnas A:B y luego copiarlas en la pestaña "Synth" una tras otra (en resumen, en F:G para la pestaña 3, luego en I:J para la pestaña 4...).
Por lo tanto, el botón estaría únicamente en "recap" o en "synth", me da igual :)
Perdona por no haber sido más claro al principio.
Que tengas un buen día y gracias de nuevo.
Gracias por tu respuesta. Algunas precisiones:
- De hecho, en la pestaña "recap", en C17:C60: hay el nombre de todas las pestañas.
- La variable hoja permite seleccionarlas una por una.
- Con el fin de copiar las columnas A:B y luego copiarlas en la pestaña "Synth" una tras otra (en resumen, en F:G para la pestaña 3, luego en I:J para la pestaña 4...).
Por lo tanto, el botón estaría únicamente en "recap" o en "synth", me da igual :)
Perdona por no haber sido más claro al principio.
Que tengas un buen día y gracias de nuevo.
Hola
Algunas líneas me han planteado problemas de comprensión (puntos de interrogación)
restituir los valores de las columnas A B de las hojas en "synth";propuesta:
https://www.cjoint.com/?3Bch3xUCyLK
--
Michel
Algunas líneas me han planteado problemas de comprensión (puntos de interrogación)
restituir los valores de las columnas A B de las hojas en "synth";propuesta:
Option ExplicitMaqueta de trabajo:
'-------------------------------------------
Sub Sintetizar()
Dim EndIndicCode As Integer, Lig As Integer, Hoja As String
Dim Derlig As Integer, Col As Integer, T_hoja()
'Pantalla bloqueada
Application.ScreenUpdating = False
With Sheets("recap")
EndIndicCode = .Range("B1000").End(xlUp).Row
Col = 5
For Lig = 17 To EndIndicCode '???? no comprendí los -17
Hoja = .Cells(Lig, "C")
With Sheets(Hoja)
Derlig = .Cells.Find("*", , , , , xlPrevious).Row
T_hoja = .Range("A1:B" & Derlig).Value
Sheets("Synth").Cells(1, Col).Resize(UBound(T_hoja), 2) = T_hoja
Col = Col + 3 '???? +2 si es junto ....
End With
Next
End With
Sheets("Synth").Range("A1").Select
End Sub
https://www.cjoint.com/?3Bch3xUCyLK
--
Michel
Hola Michel,
Debí haberte puesto el archivo en adjunto desde el principio.
Extrañamente, puedo crear un botón con tu archivo, pero no con el mío (incluso poniendo tus macros en mi archivo).
Adjunto el archivo, tomé como ejemplo la macro A3_OngletSynth. Pero también se aplica a A2_MajData, por ejemplo. (Y esto a pesar de que otras macros en el archivo pasan por un botón -situados en la pestaña Resumen-).
https://www.cjoint.com/?0BcteDPtf8n
Gracias por todo, Michel.
Que tengas un buen fin de día.
Saludos cordiales, Thomas.
Debí haberte puesto el archivo en adjunto desde el principio.
Extrañamente, puedo crear un botón con tu archivo, pero no con el mío (incluso poniendo tus macros en mi archivo).
Adjunto el archivo, tomé como ejemplo la macro A3_OngletSynth. Pero también se aplica a A2_MajData, por ejemplo. (Y esto a pesar de que otras macros en el archivo pasan por un botón -situados en la pestaña Resumen-).
https://www.cjoint.com/?0BcteDPtf8n
Gracias por todo, Michel.
Que tengas un buen fin de día.
Saludos cordiales, Thomas.