Macro excel copiar datos pivot a hoja y actual. Gráfico

Tengo en la hoja1 una tabla dínamica con lo siguiente: en fila [cliente],[tipo_cli] y en columna [kilos]
En la hoja2 deseo que me aparezcan los datos de los clientes cuyos kilos son mayores al 5% del total de kilos y el resto como otros.
En la mima hoja2 tengo un graficico de torta que lee estos datos, el cual tendría que actualizarse según la cantidad de clientes que aparezcan
el problema es que un mes pueden ser 12 clientes y al otro 10, etc,
Si me pueden ayudar con una macro para poder leer la pivot y pegar en la hoja2 solo los que cumplen la condición y el resto que quede en "Otros Clientes"
Y posteriorment el gráfico se actualize a la cantidad de clientes que se traspasaron a la hoja 2
eso, seria, Gracias
Respuesta
1
Vamos a ver si te entiendo, si en la celda C1 tengo 90 (kilos) se supone que si este peso supera al 5% de la suma de los kilos de todos los clientes (debe de ser mayor a 1900 kilos) copie la fila completa y la pegue en la hoja2.
Los que no superen el 5% deben de ser agregados al grupo Otros, ¿este grupo donde está? O es lo que hay que escribir en la celda contigua, aclarame esto.
No me hago mucho la idea, ¿para qué 10 ó 12 clientes pasen de 1900 kilos deben de pesar una media de 180 Kilos?.
Otra cosa, partiendo de la hoja 2, quieres hacer un gráfico en la misma hoja, del tipo de queso, con los kilos como datos.
Aclarame mis errores para que sepa capaz de reproducir tu archivo y poder darte una solución.
>Un saludo
>Julio
Hola Julio, primero que todo gracias por tomar mi caso y por la prontitud de tu respuesta.
Con respecto a la agrupación "Otros" efectivamente esta debe ir en la hoja2 al final de las filas que ya se copiaron
- Con respecto a los kilos, justamente es lo que entiendes, si entre todos los clientes suman 1900 kilos, solo los que pasan de 180(5%) kgs deben copiarse a la hoja2
-Finalmente con respecto al gráfico de torta o queso, este efectivamente existe en la hoja2 con los campos cliente y kilos, lo que deseo es que el rango de este gráfico se actualize con el rango de datos que se copiaron, o sea que si los que se copiaron tienen como rango en la hoja2 range(c3:f20), me actualize el gráfico a ese rango, y si el mes siguiente es de range(c3:f33), igualmente vaya a reconocer este rango para actualizar el gráfico.
Saludos y Gracias
Aquí tienes la macro me ha llevado toda la tarde pero ya la tienes, analizalá para cambiar tus rangos de celdas:
Private Sub Valida_Copia()
Sheets("Hoja1").Select
Range("A1").Select
'Que no se pare de buscar, hasta que no encuentre una fila vacía
Do While Not IsEmpty(ActiveCell.Offset(0, 0))
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(1, 0).Select
cel = ActiveCell.Address
MiRango = Range(ActiveCell.Offset(-2, 0), ActiveCell.Offset(-2, 0).End(xlUp)).Select
'En este preciso momento ya estamos en la primera fila vacía,
NombRango = Selection.Address
Range(cel).Select
ActiveCell.Formula = "=SUM(" & NombRango & ")"
dat = ActiveCell.Value
Range("B1").Select
Var = ActiveCell.Offset(0, -1).Address
If ActiveCell.Offset(0, -1).Value > (dat * 0.05) Then
ActiveCell.Value = "SI"
Else
ActiveCell.Value = "NO"
End If
Do While ActiveCell.Offset(0, -1) <> ""
ActiveCell.Offset(1, 0).Select
If ActiveCell.Offset(0, -1).Value > (dat * 0.05) Then
ActiveCell.Value = "SI"
Else
ActiveCell.Value = "NO"
End If
If ActiveCell.Offset(0, -1).Value = "" Then
ActiveCell.Value = ""
End If
Loop
fila = Sheets("Hoja2").Range("A65536").End(xlUp).Row + 1
Range("B1").Select
If ActiveCell.Value = "SI" Then
Selection.EntireRow.Copy Destination:=Sheets("Hoja2").Range("A" & fila)
ActiveCell.Offset(1, 0).Select
End If
Do While ActiveCell.Value <> ""
fila = Sheets("Hoja2").Range("A65536").End(xlUp).Row + 1
If ActiveCell.Value = "SI" Then
Selection.EntireRow.Copy Destination:=Sheets("Hoja2").Range("A" & fila)
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Sheets("Hoja2").Select
Range("A2").Select
Do While Not IsEmpty(ActiveCell.Offset(0, 0))
ActiveCell.Offset(1, 0).Select
Loop
MiRango2 = Range(ActiveCell.Offset(-1, 0), ActiveCell.Offset(-1, 0).End(xlUp)).Select
NombRango2 = Selection.Address
Charts.Add
ActiveChart.ApplyCustomType ChartType:=xlBuiltIn, TypeName:= _
"Circular llamativo"
ActiveChart.SetSourceData Source:=Sheets("Hoja2").Range(NombRango), PlotBy:= _
xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja2"
End Sub
<div>Te la explico, esta preparada para que te situe en la Hoja1 en la celda A1 que es donde debes ir poniendo los kilos, empezando en la celda A1 todo esto si quieres lo cambias en la macro), necesitaremos la columna B vacía para que haga la validación de si los kilos de la celda contigua es mayor del 5% de la suma (que te la pondrá al final de A separado por una celda en blanco).</div>
<div>Si los kilos superan el 5% pasará la fila completa a la Hoja2 a la celda A2 en adelante. Se generará el gráfico. Todo esto independientemente de la cantidad de lineas de kilos que pongas en la hoja1.( Por tu referencia a que podrían ser 10 o 12 o los que sean dá igual)
</div>
<div>
</div>
<div>Aprovechalá que cuesta un rato crearla</div>
<div>>Un saludo</div>
<div>
</div>
<div>>Julio
</div>
Muchas Gracias, con esto tengo la base para actualizar mi informe, ahora solo ajusto las demás columnas y filas de destino y listo,
Se agradece la dedicación y disponibilidad, que Dios te bendiga

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas