Ocultar Gráfico de Barra o cualquier tipo de gráfico si no hay valores en excel

Estoy preparando un reporte con gráficos de barras o circulares en excel, yo tengo por ejemplo 4 empresas y cada empresa tiene a su vez 5 proyectos que son los mismos proyectos en cada empresa, lo que debo hacer es evaluar el avance por empresa y por proyecto (lo único que no se repite la empresa, por lo que cree una lista desplegable con validación de datos el nombre de la Empresa y del proyecto, lo que quisiera hacer con la lista desplegable es que si elijo por ejemplo la empresa 1 y el proyecto 1 que abajo me muestre el gráfico, y en caso que quisiera ver todas las empresas y el proyecto 1, ¿qué me muestres 4 gráficos de cada empresa del proyecto 1 y el problema es que como hago que no salga el gráfico en caso que no tenga valores en mi base de datos?, los resultados lo estoy estirando con sumar. Si. Conjunto y función si.

Aquí por ejemplo yo haría la consulta individual por una empresa y por el proyecto 1 y quisiera que solo me muestre 1 solo gráfico y que las demás no muestren siendo que le estoy indicando que solo quiero saber de una sola empresa.

Luego aquí quisiera tener plantear la siguiente forma como que me aparezcan 4 gráficos por empresa si tuvieran valor y si no que lo oculte, por el proyecto 1.

Por ultimo si se podría elegir "Todas las empresas" y todos los proyectos "son 5 proyectos que tienen las 4 empresas"

1 respuesta

Respuesta
1

Responde en el siguiente orden:

1. ¿En total cuántos gráficos tienes?

2. Puedes poner una imagen de tus gráficos.

3. Pon aquí el nombre de todos tus gráficos.


¿el problema es que como hago que no salga el gráfico en caso que no tenga valores en mi base de datos?

4. Cómo sabes que el gráfico no tiene valores, puedes explicarlo con un ejemplo.


Te ayudo con un código en VBA para ocultar o hacer visibles los gráficos, según la selección de empresa o proyecto. Pero debes responder con claridad mis dudas.

Mi gran experto Dante

Tengo 4 gráficos porque son 4 empresas

El nombre del Gráfico sería el Proyecto, este tengo 5 proyectos, ¿sera qué te puedo pasar mi archivo de ejemplo? Aquí al momento de seleccionar una única empresa ejemplo si solo quiere ver el gráfico del proyecto 1 de la empresa, entonces quiero que me muestre un solo gráfico, sin embargo me muestra así

Y yo realmente solo quiero que cuando elija una sola empresa y el proyecto especifico que me muestre un solo gráfico y que los demás se oculten automáticamente o si habría alguna otra forma

Sí, comparte tu archivo en googledrive, comparte el archivo a "Cualquier persona que tenga el vínculo", copia el enlace y lo pegas aquí.

Mi gran experto Dante aquí coloco el enlace de mi archivo si podrías mirar por favor te voy a agradecer

https://mega.nz/file/cMByhZIL#g4uNFffmi_irfJ_HaF24Dq2ehFyyGHI6-VFTdPe_kNs 

Si eliges la "Empresa 1" que te muestre el gráfico 1. Eso me queda claro.

Pero no entiendo la relación con el proyecto. Si elijo la "Empresa 1" y el "proyecto 1" o el "proyecto 2", solamente sigo mostrando el "gráfico 1". No entiendo cuál es la relación del proyecto con los gráficos.


Empecemos con esto. Pon el siguiente código en los eventos de tu hoja "Consulta"

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.CountLarge > 1 Then Exit Sub
  If Target.Address(0, 0) = "C2" Then
    '
    ActiveSheet.DrawingObjects("Gráfico 1").Visible = False
    ActiveSheet.DrawingObjects("Gráfico 6").Visible = False
    ActiveSheet.DrawingObjects("Gráfico 8").Visible = False
    ActiveSheet.DrawingObjects("Gráfico 9").Visible = False
    '
    Select Case LCase(Target.Value)
      Case LCase("Empresa 1")
        ActiveSheet.DrawingObjects("Gráfico 1").Visible = True
      Case LCase("Empresa 2")
        ActiveSheet.DrawingObjects("Gráfico 6").Visible = True
      Case LCase("Empresa 3")
        ActiveSheet.DrawingObjects("Gráfico 8").Visible = True
      Case LCase("Empresa 4")
        ActiveSheet.DrawingObjects("Gráfico 9").Visible = True
      Case Else
        ActiveSheet.DrawingObjects("Gráfico 1").Visible = True
        ActiveSheet.DrawingObjects("Gráfico 6").Visible = True
        ActiveSheet.DrawingObjects("Gráfico 8").Visible = True
        ActiveSheet.DrawingObjects("Gráfico 9").Visible = True
    End Select
  End If
End Sub

Funciona de la siguiente manera, cambia en la celda C2 el dato a "Todas las empresas" o "Empresa 1" o "Empresa 2"...

El código se activará y ocultará los gráficos y solamente quedará visible el gráfico correspondiente a la empresa.


Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Mi gran experto, cuando elijo una sola empresa y un solo proyecto no me devuelve el gráfico quedando así

Y pegué la macro tal cual según los pasos indicado, si tendrías un correo para enviarte el archivo por favor te lo agradecería

Saludos

Ya corregí el rango mi gran experto, funciona la macro ahora lo que me percaté es si existiría una posibilidad de que cuando elija unas de las empresas "Empresa 1, empresa 2, empresa 3, empresa 4" y un proyecto si el gráfico se podría quedar quieto ya que al elegir la "empresa 2" y el proyecto 1 el gráfico se mueve hacia el medio y lo que quisiera es que se quede como el gráfico de la empresa 1 y el proyecto que elija en el mismo lugar

Buen día mi gran experto Dante, ¿se podría congelar un gráfico cuando se seleccione de forma individual por ejemplo la empresa 3 y el proyecto 1 y me muestre en el mismo lugar del gráfico de la empresa 1?

Si el gráfico se podría quedar quieto

Cambia el código por este:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.CountLarge > 1 Then Exit Sub
  If Target.Address(0, 0) = "C2" Then
    If LCase(Target.Value) = LCase("Todas las empresas") Then
      Call Mover("Gráfico 1", "B13", True)
      Call Mover("Gráfico 6", "F13", True)
      Call Mover("Gráfico 8", "B23", True)
      Call Mover("Gráfico 9", "F23", True)
    Else
      Call Mover("Gráfico 1", "B13", Target.Value = "Empresa 1")
      Call Mover("Gráfico 6", "B13", Target.Value = "Empresa 2")
      Call Mover("Gráfico 8", "B13", Target.Value = "Empresa 3")
      Call Mover("Gráfico 9", "B13", Target.Value = "Empresa 4")
    End If
  End If
End Sub
'
Sub Mover(nombre As String, celda As String, visual As Boolean)
  With ActiveSheet.DrawingObjects(nombre)
    .Visible = visual
    .Top = Range(celda).Top
    .Left = Range(celda).Left
  End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas