Saltar al contenido

ordenar graficas creadas con macro en la hoja


ebetapia

Recommended Posts

publicado

hola me gustaria saber cual es la parte del codigo donde pones que se ordenen las graficas una debajo de la otra por codigo osea cual es codigo, yo tengo el sig. codigo que grafica me grafica una sobre otra. anexo el codigo aunque esta muy personalizada a cierto formato que tengo pero solo me falta eso que te explico arriba. gracias de antemano

Sub crear_grafico()
‘Ocultamos el procedimiento
Application.ScreenUpdating = False
‘Pasamos a una variable la celda donde estamos,
‘para volver a ella al finalizar el macro
celda_donde_estamos = ActiveCell.Address
‘Vamos al principio del rango de datos
‘(celda de arriba a la izquierda).
‘Mejor usar esto, que CurrentRegion:
If ActiveCell.Row 1 Then
If ActiveCell.Offset(-1, 0) “” Then
Selection.End(xlUp).Select
End If
End If
If ActiveCell.Column 1 Then
If ActiveCell.Offset(0, -1) “” Then
Selection.End(xlToLeft).Select
End If
End If
‘Pasamos la celda inicial (donde estamos ahora)
celda_inicial = ActiveCell.Address
‘si la celda está vacía, no creamos el gráfico
If celda_inicial = “” Or IsEmpty(ActiveCell) Then
mensaje = MsgBox(“No hay datos para crear el gráfico. “, vbInformation, “Imposible crear gráfico”)
Exit Sub
End If
‘Pasamos a una variable, el nombre de la hoja
nombre_de_la_hoja = ActiveSheet.Name
‘Pasamos a una variable, el área de datos para el gráfico
area_de_datos = Range(celda_inicial).CurrentRegion.SpecialCells(xlVisible).Address
‘Creamos el gráfico
Charts.Add
‘Informamos del tipo de gráfico que deseamos
ActiveChart.ChartType = xlLineStacked
‘Seleccionamos el área de datos para montar el gráfico
ActiveChart.SetSourceData Source:=Sheets(nombre_de_la_hoja).Range(area_de_datos), PlotBy:=xlColumns
‘Creamos el gráfico en la hoja donde estamos
ActiveChart.Location Where:=xlLocationAsObject, Name:=nombre_de_la_hoja
‘Cambiamos el título del gráfico
With ActiveChart
.HasTitle = True
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).HasTitle = True
End With
With ActiveChart
.SeriesCollection(1).Select
Selection.Delete
.SeriesCollection(1).Select
Selection.Delete
.SeriesCollection(3).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
.SeriesCollection(5).Select
Selection.Delete
End With
ActiveChart.ChartType = xlXYScatterLinesNoMarkers
‘Quitamos la leyenda
ActiveChart.SeriesCollection(2).Select
ActiveChart.SeriesCollection(2).AxisGroup = 2
With ActiveChart
.Axes(xlValue).MinimumScale = 0
.Axes(xlValue).MinimumScale = 1.2
.Axes(xlValue).MaximumScale = 3
.Axes(xlValue).MaximumScale = 3
.Axes(xlValue).MajorUnit = 0.5
.Axes(xlValue).MajorUnit = 0.2
End With
With ActiveChart
.Axes(xlValue, xlSecondary).MinimumScale = 270
.Axes(xlValue, xlSecondary).MinimumScale = 80
.Axes(xlValue, xlSecondary).MaximumScale = 360
.Axes(xlValue, xlSecondary).MaximumScale = 440
.Axes(xlValue, xlSecondary).MajorUnit = 10
.Axes(xlValue, xlSecondary).MajorUnit = 40
End With
ActiveChart.HasLegend = True
ActiveChart.SeriesCollection(4).Select
ActiveChart.SeriesCollection(4).AxisGroup = 2
ActiveChart.Axes(xlCategory, xlPrimary).AxisTitle.Text = “y2″
ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = “y”
ActiveChart.ChartTitle.Text = “Profile”
ActiveChart.SetElement (msoElementSecondaryValueAxisTitleRotated)
ActiveChart.Axes(xlValue, xlSecondary).AxisTitle.Text = _
“date”
‘Ponemos tamaño 8 para el eje Y
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlValue).HasMajorGridlines = True
ActiveChart.Axes(xlValue).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Size = 12
End With
‘Ponemos tamaño 8 para el eje X
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.AutoScaleFont = True
With Selection.TickLabels.Font
.Size = 12
End With
‘Ponemos el título en negrita
ActiveChart.ChartTitle.Select
Selection.Font.Bold = True
‘Volvemos a la celda donde estábamos inicialmente
Range(celda_donde_estamos).Select
‘Mostramos el procedimiento
Application.ScreenUpdating = True
End Sub[/PHP]

anexo el link del archivo que aqui no me permitio subirlo por que era muy grande espero esto si se pueda: http://dl.dropbox.com/u/95230904/graficos.zip

este archivo tiene un boton llamado graficar que al seleccionar una casilla del rango te grafica todo el rango, esta diseñado para graficar los rangos desde la columna second solo hay que seleccionar la casilla de esa columna y y dar clic al boton graficar y graficara el primer rango y de ay hay que seleccionar la primera casilla del otro rango para generar la otra grafica y asi sucesibamente, lo que deseo es saber como acomodar las graficas como las que estan al lado derecho que se realizaron manualmente y que el boton vaya bajando automaticamente de antemano gracias saludos.

publicado

Como no ajustes lo que pides a las normas del foro.........creo que esperarás sin respuesta en el horizonte.....

Un saludo,

Tese

publicado

creo que solo la norma que no segui es la siguiente 6. Las fórmulas o códigos tienen que estar siempre envueltas con las etiquetas CODE, PHP o HTML. Más información en: Envolver fórmulas y códigos con etiquetas en los mensajes.

y 5. Adjunta siempre un archivo con la estructura de trabajo y los resultados que esperas obtener y de cómo obtienes los datos. No es necesario el archivo completo, una simple parte de los datos y la estructura del mismo es suficiente. Tipos de Archivos permitidos para subir al foro. No adjuntes imágenes nunca, las imágenes no nos sirven para buscar la solución adecuada.

soy novato asi que me gustaria que me ayudaras a ver como se trabaja en el foro gracias de antemano saludos.

publicado

Buenos días novato ebetapia bienvenido

Ya que sabes que errores cometiste deberías de reparar el error o no lo crees así????, sube tu archivo para entender mejor tu pregunta y te ayudaran gratamente en la solicitud que estas haciendo.

Saludos

publicado

he investigado y leido un poco y encontre que estas son las propiedades para mover una grafica en determinada pocicion me gustaria solo saber como implementarla para los n graficos que puedo generar con este codigo y se vayan acomodando una debajo de la otra

.Left = 100

.Top = 200

publicado

bueno por lo bisto no hubo respuesta y pues ya encontre la respuesta selas dejo por si alguien la ocupa gracias de todos modos :nevreness::drunk::highly_amused:

Sub ArrangeMyCharts()
Dim iChart As Long
Dim nCharts As Long
Dim dTop As Double
Dim dLeft As Double
Dim dHeight As Double
Dim dWidth As Double
Dim nColumns As Long
dTop = 200 ' top of first row of charts
dLeft = 1500 ' left of first column of charts
dHeight = 450 ' height of all charts
dWidth = 900 ' width of all charts
nColumns = 2 ' number of columns of charts
nCharts = ActiveSheet.ChartObjects.Count
For iChart = 1 To nCharts
With ActiveSheet.ChartObjects(iChart)
.Height = dHeight
.Width = dWidth
.Top = dTop + Int((iChart - 1) / nColumns) * dHeight
.Left = dLeft + ((iChart - 1) Mod nColumns) * dWidth
End With
Next
End Sub
[/php]

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.