VBA TCD Tabla/rango hasta la última línea llena
Jerome
-
Jerome -
Jerome -
Bonjour,
Me permito solicitar su ayuda porque estoy atascado con un TCD en VBA. Realmente no soy muy bueno y, por consiguiente, realizo todas mis macros con el grabador, pero con muchos errores. Así que vuelvo a revisar en VBA, pero como suele suceder, no puedo avanzar.
Aquí está mi problema: he creado un TCD (con el grabador) en mi hoja llamada "Suivi". Selecciono la celda A1 para el inicio de mi TCD, y voy a una hoja llamada "IEP" a buscar mi rango. Actualmente, la macro graba el rango de la celda A1 a S8320 (última fila no vacía). Sin embargo, las otras semanas mi rango variará y puede que tenga 10,000 o incluso 15,000 filas. Por lo tanto, me gustaría modificar el código a continuación simplemente para obtener la última fila no vacía y no S8320 que corresponda a la ejecución de mi macro a través del grabador.
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
Application.CutCopyMode = False
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!R1C1:R8320C19", Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Por lo tanto, he hecho intentos como el siguiente, pero no funciona y me devuelve un error de ejecución 1004 (La referencia no es válida). ¿Podría ayudarme, por favor?
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
'Variable última fila llena de la pestaña IEP de la columna A
LIEP = Sheets("IEP").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!$A$1:$S$" & LIEP, Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Gracias a todos por su ayuda,
Me permito solicitar su ayuda porque estoy atascado con un TCD en VBA. Realmente no soy muy bueno y, por consiguiente, realizo todas mis macros con el grabador, pero con muchos errores. Así que vuelvo a revisar en VBA, pero como suele suceder, no puedo avanzar.
Aquí está mi problema: he creado un TCD (con el grabador) en mi hoja llamada "Suivi". Selecciono la celda A1 para el inicio de mi TCD, y voy a una hoja llamada "IEP" a buscar mi rango. Actualmente, la macro graba el rango de la celda A1 a S8320 (última fila no vacía). Sin embargo, las otras semanas mi rango variará y puede que tenga 10,000 o incluso 15,000 filas. Por lo tanto, me gustaría modificar el código a continuación simplemente para obtener la última fila no vacía y no S8320 que corresponda a la ejecución de mi macro a través del grabador.
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
Application.CutCopyMode = False
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!R1C1:R8320C19", Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Por lo tanto, he hecho intentos como el siguiente, pero no funciona y me devuelve un error de ejecución 1004 (La referencia no es válida). ¿Podría ayudarme, por favor?
Sheets("Suivi").Select
ActiveWindow.ScrollRow = 1
Range("A1").Select
'Variable última fila llena de la pestaña IEP de la columna A
LIEP = Sheets("IEP").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!$A$1:$S$" & LIEP, Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
Sheets("Suivi").Select
Cells(1, 1).Select
Gracias a todos por su ayuda,
2 respuestas
-
Hola Jerome
¡Estuviste casi allí! La escritura correcta no es "IEP!$A$1:$S$ & LIEP" sino "IEP!$A$1:$S$" & LIEP
Saludos
Via
--
"La imaginación es más importante que el conocimiento." A. Einstein-
Hola Via,
Francamente y sinceramente te digo un muuuuy grande gracias por tu ayuda. Soy un desastre y espero mejorar ;-) pero mientras tanto, es gracias a personas como tú que logro avanzar.
Aprovecho para hacerte una pequeña pregunta, si lo deseas y para mi comprensión, cuando creo variables tipo:
'Variable última fila llena de la hoja IEP de la columna A
LIEP = Sheets("IEP").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
'Variable para determinar la última fila llena de la columna M
línea = Sheets("IEP S-1").Columns(13).Find("*", , , , xlByColumns, xlPrevious).Row
'Variable derligne = Envía la fórmula hasta la última fila llena de la columna D
derligne = Range("D" & Rows.Count).End(xlUp).Row
No he creado un DIM correspondiente (LIEP, línea y derligne) por error al principio, pero funciona muy bien sin ello, ¿es lógico? No comprendí el sentido de DIM y si no es necesario. ¿Es normal que funcione bien sin?
Aquí tienes ejemplos de códigos donde los utilizo
'Enviar el Sí hasta la última fila
Range("R2").AutoFill Destination:=Range("R2:R" & derligne)
ActiveCell.Formula = "=IFERROR(VLOOKUP(N2,'IEP S-1'!$M$2:$R$" & línea & ",6,0),""No"")"
Range("S2").Select
'Enviar la fórmula busquedaV hasta la última fila
Selection.AutoFill Destination:=Range("S2:S" & derligne)
'Selección del rango del TCD hasta la última fila
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"IEP!$A$1:$S$" & LIEP, Version:=6).CreatePivotTable TableDestination:= _
"Suivi!R1C1", TableName:"Tabla dinámica1", DefaultVersion:=6
Sheets("Suivi").Select
Gracias por tu ayuda :-)
-
-
Re,
Sí, esto funciona sin declaración.
Por defecto, sin DIM, todas las variables serán del tipo Variant (que pueden ocupar 22 bytes de memoria, mientras que una variable del tipo Integer solo ocupa 2 bytes. Véase: https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/data-type-summary, esta es la primera utilidad de la declaración.
La segunda utilidad es para ayudar a ubicarse, véase: https://www.excel-pratique.com/fr/vba/variables
Cordialmente
Vía
--
"La imaginación es más importante que el conocimiento." A. Einstein