Macro para Tabla Dinámica

Favor necesito de su ayuda para crear una macro que genere una tabla dinámica,

Pero la información base siempre se esta modificado. Me explico solo se modifican las cantidades de lineas no de tipo, asi que le muestro un ejemplo:

Segmento - folio - numero - modelo - pedido - marca

Negocios - 70233 - 400000 - Nokia X8 - 135486 - Nokia

Empresas - 70324 - 500000 - Galaxy S2 - 456466 - Samsung

Bueno la tabla dinámica debe ir ordenada por segmento-pedido-modelo y cuenta de modelo.

Favor de su ayuda y recuerden que las cantidades de datos se modifican pero no los encabezados.

1 Respuesta

Respuesta
1

La siguiente macro, lee los datos empezando en la celda A1.

Borra las columnas K, L y M y te pone la tabla dinámica actualizada en la celda K2.

Sub tabla()
'Por.DAM
Columns("K:M").Clear
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
    SourceData:=Range("A1:F" & Range("A" & Rows.Count).End(xlUp).Row), _
    Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:=Range("K2"), _
    TableName:="TD1", _
    DefaultVersion:=xlPivotTableVersion12
With ActiveSheet.PivotTables("TD1")
    .PivotFields("SEGMENTO").Orientation = xlRowField
    .PivotFields("PEDIDO").Orientation = xlRowField
    .AddDataField ActiveSheet.PivotTables("TD1"). _
        PivotFields("MODELO"), _
        "Cuenta de MODELO", xlCount
    .PivotFields("MODELO").Orientation = xlRowField
End With
End Sub

Saludos.Dante Amor
Si es lo que necesitas.

DAM, si funciona pero lo que pasa es que es mucha mas información y solo te envíe un poco de columnas. La tabla dinámica debe hacerla en otra hoja.

¿tienes algún correo? asi te envío el archivo completo y como debe quedar la tabla dinámica sin alterar la primera hoja de datos.

Envíame tu archivo, me dices en qué hoja están los datos y cuál hoja quieres el resultado.

En el asunto del correo escribe tu nombre de usuario y el título de esta pregunta.

Mi correo [email protected]
Saludos. Dante Amor

No pude abrir las macros de tu archivo, porque tiene password.

Pero utilicé la información, debes ejecutar la macro en la hoja "logística" y también debes tener una hoja llamada "Hoja1"

Esta es la nueva macro

Sub tabla()
'Por.DAM
Set h1 = Sheets("Hoja1")
h1.Cells.Clear
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
    SourceData:=Range("A1:BL" & Range("A" & Rows.Count).End(xlUp).Row), _
    Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:=h1.Range("A3"), _
    TableName:="TD1", _
    DefaultVersion:=xlPivotTableVersion12
h1.Select
With ActiveSheet.PivotTables("TD1")
    .PivotFields("SEGMENTO").Orientation = xlRowField
    .PivotFields("PEDIDO").Orientation = xlRowField
    .AddDataField ActiveSheet.PivotTables("TD1"). _
        PivotFields("MODELO"), _
        "Cuenta de MODELO", xlCount
    .PivotFields("MODELO").Orientation = xlRowField
End With
End Sub

Saludos.Dante Amor
Si es lo que necesitas.

DAM.

Muchas gracias, me funciona perfecto en excel 2007, pero como debo hacerlo para que me funcione en 2003.

Favor, seria mi ultima duda.

nuevamente Muchas Gracias.

Busca en la macro esto

XlPivotTableVersion12

Y cámbialo por esto

XlPivotTableVersion10

(Aparece en 2 líneas)

Prueba y me comentas

Estimado,

me aparece error "438" y al poner depurar me salen estas lineas en amarillo

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=Range("A1:BL" & Range("A" & Rows.Count).End(xlUp).Row), _
Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:=h1.Range("A3"), _
TableName:="TD1", _
DefaultVersion:=xlPivotTableVersion10

Prueba con esta macro en ambas versión 2003 y 2007

Sub tabla()
'Por.DAM
Set h1 = Sheets("Hoja1")
h1.Cells.Clear
u = Range("A" & Rows.Count).End(xlUp).Row
ver = Application.Version
Select Case ver
    Case "14.0" 'Versión 2010
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
            SourceData:=Range("A1:BL" & u), _
            Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:=h1.Range("A3"), _
            TableName:="TD1", _
            DefaultVersion:=xlPivotTableVersion14
    Case "12.0" 'Versión 2007
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
            SourceData:=Range("A1:BL" & u), _
            Version:=xlPivotTableVersion12).CreatePivotTable _
            TableDestination:=h1.Range("A3"), _
            TableName:="TD1", _
            DefaultVersion:=xlPivotTableVersion12
    Case "11.0" 'Versión 2003
        ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
            SourceData:=Range("A1:BL" & u)).CreatePivotTable _
            TableDestination:=h1.Range("A3"), _
            TableName:="TD1", _
            DefaultVersion:=xlPivotTableVersion10
End Select
h1.Select
With ActiveSheet.PivotTables("TD1")
    .PivotFields("SEGMENTO").Orientation = xlRowField
    .PivotFields("PEDIDO").Orientation = xlRowField
    .AddDataField ActiveSheet.PivotTables("TD1"). _
        PivotFields("MODELO"), _
        "Cuenta de MODELO", xlCount
    .PivotFields("MODELO").Orientation = xlRowField
End With
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas