Foros del Web » Soporte técnico » Ofimática »

Tabla dinámica en Vba

Estas en el tema de Tabla dinámica en Vba en el foro de Ofimática en Foros del Web. Hola a todos de nuevo, volvemos a la carga: Necesito crear una tabla dinámica desde Vba para realizar filtros cruzados y no se como hacerla. ...
  #1 (permalink)  
Antiguo 21/08/2015, 18:31
Avatar de davidhelios  
Fecha de Ingreso: agosto-2015
Ubicación: Alemania
Mensajes: 11
Antigüedad: 8 años, 8 meses
Puntos: 0
Información Tabla dinámica en Vba

Hola a todos de nuevo, volvemos a la carga:

Necesito crear una tabla dinámica desde Vba para realizar filtros cruzados y no se como hacerla. He probado incluso a crear una grabando una macro para luego editarla pero ya antes de editarla, solo al ejecutar me daba (incomprensiblemente) error.

Al final he decidido dejar la tabla dinámica y extraer los datos que necesito directamente a una nueva tabla pero el resultado de la funcion IMPORTARDATOSDINAMICOS no me termina de convencer porque solo me da los datos como fórmula y mantiene el resultado de la tabla dinámica en la celda. Así que yo me pregunto y ya puesto a vosotros también:

La tabla dinámica está configurada para que en el apartado de totales me refleje el precio más bajo de un artículo, existe alguna manera para poder extraer los datos y concatenar el precio con el producto y el supermercado correspondiente al resultado final de la tabla dinámica?

Me explico, la columna de totales cuando tiene el raton encima sin pulsar, me refleja el nombre del producto y el supermercado al que pertenece dicho precio. He probado a mostrar detalles, convertir en celdas la tabla, copiar los datos, eliminar la nueva hoja y pegar, pero si eso lo hago grabando una macro al ejecutarla me va a crear 267 hojas nuevas y ni siquiera se si funcionara el copia y pega.

Alguna idea?
  #2 (permalink)  
Antiguo 22/08/2015, 19:45
Avatar de davidhelios  
Fecha de Ingreso: agosto-2015
Ubicación: Alemania
Mensajes: 11
Antigüedad: 8 años, 8 meses
Puntos: 0
Respuesta: Tabla dinámica en Vba

Buenas a todos, he buscado, buscado y buscado todo el día desde ayer y por casualidad utilice la función buscar y me ha servido para extraer los datos de la tabla dinámica.

Ahora me encuentro con el siguiente dilema, soy novato 90% en Vba aunque voy aprendiendo día a día, pero no sé simplificar la macro grabada para poder editar el código.

Os pego lo que llevo y vemos si a alguien se le ocurre o sabe simplificar la sintaxis:

Código:
 Range("L3").Select
    ActiveCell.FormulaR1C1 = _
        "=LOOKUP(RC[-1],RC[-10]:RC[-5],R[-1]C[-10]:R[-1]C[-5])"
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Selection.AutoFill Destination:=Range("L3:L4"), Type:=xlFillDefault
    Range("L3:L4").Select
    Range("L4").Select
    ActiveCell.FormulaR1C1 = _
        "=LOOKUP(RC[-1],RC[-10]:RC[-5],R[-2]C[-10]:R[-2]C[-5])"
    Range("L4").Select
    Selection.AutoFill Destination:=Range("L4:L5"), Type:=xlFillDefault
    Range("L4:L5").Select
    Range("L5").Select
    ActiveCell.FormulaR1C1 = _
        "=LOOKUP(RC[-1],RC[-10]:RC[-5],R[-3]C[-10]:R[-3]C[-5])"
    Range("L6").Select
Como veis, he realizado la accion tres veces seguidas para poder encontrar diferencias de acción y saber dónde modificar, pero no me ha servido de mucho. Podría editarlo amano, pero la tabla sigue creciendo y tendría que hacerlo a diario, asi que me gustaría saber si, además de simplificar la fórmula, a alguien se le ocurre cómo podría pasar a la siguiente linea automáticamente. Había pensado en utizar el comando offset, pero no tengo la menor idea de dónde debería escribirlo

Etiquetas: hoja, hojas, macro, tabla, vba
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:06.