VBA TCD Tabla/rango hasta la última línea llena

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,

2 respuestas

  1. via55 Mensajes publicados 14396 Fecha de registro   Estado Miembro Última intervención   2 759
     
    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
    1
    1. Jerome
       
      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 :-)
      0
  2. via55 Mensajes publicados 14396 Fecha de registro   Estado Miembro Última intervención   2 759
     
    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
    1
    1. Jerome
       
      Rehola Via,

      Muchas gracias por esta explicación tan clara. En efecto, ahora entiendo mucho mejor el interés. Dado que mi macro ya es muy pesada, de hecho, tengo todo el interés en reemplazar mi variable por un entero.

      Con gusto y de nuevo, gracias por todo.

      Con cariño
      0