Macro para ocultar y mostrar filas según condición de una formula.

Llevo varios días mirando por internet para encontrar una macro que me oculte solo una serie de filas en función a una serie de resultados obtenidos en otras celdas de la misma hoja que están previamente formulas. En la hoja "Resumen" tengo la celda "L2" que al ingresar el código de cliente me arroja automáticamente en las celdas E10, E11, E13, E14, I10, I11, I12 y I13 la respuesta de "SI o "NO" y en función a estos resultados me gustaría ocultar o mostrar las filas. Si en la celda "L2" no indico nada, todas las celdas se quedan en blanco y se debería mostrar todo nuevamente. He adaptado esta macro, pero tengo el problema de que con celdas formuladas no funciona, solo lo hace si le escribo directamente. Además, cuando dejo el formulario en blanco, me deja las filas ocultas de la ultima consulta. Ruego la ayuda de un experto para adaptar la macro para que funcione automáticamente. Un millón de gracias

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("I10").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A71:A77").EntireRow.Hidden = True
        Else
        Range("A71:A77").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("I11").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A68:A70").EntireRow.Hidden = True
        Else
        Range("A68:A70").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("I12").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A78:A107").EntireRow.Hidden = True
        Else
        Range("A78:A107").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("I13").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A108:A129").EntireRow.Hidden = True
        Else
        Range("A108:A129").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("E13").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A61:A67").EntireRow.Hidden = True
        Else
        Range("A61:A67").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("E14").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A57:A60").EntireRow.Hidden = True
        Else
        Range("A57:A60").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("E10").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A19:A45", "A55:A56").EntireRow.Hidden = True
        Else
        Range("A19:A45", "A55:A56").EntireRow.Hidden = False
    End If
End If
If Target.Address = Range("E11").Address Then
    If UCase(Target.Value) = "NO" Then
        Range("A46:A54").EntireRow.Hidden = True
        Else
        Range("A46:A54").EntireRow.Hidden = False
    End If
End If
End Sub
Respuesta
1

Coloca el siguiente código para que detecte el cambio en la celda L2

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 2 And Target.Column = 12 Then
        If IsEmpty(Target.Value) Then
            Range("A71:A77").EntireRow.Hidden = False
            Range("A68:A70").EntireRow.Hidden = False
            Range("A68:A70").EntireRow.Hidden = False
            Range("A108:A129").EntireRow.Hidden = False
            Range("A61:A67").EntireRow.Hidden = False
            Range("A57:A60").EntireRow.Hidden = False
            Range("A19:A45", "A55:A56").EntireRow.Hidden = False
            Range("A46:A54").EntireRow.Hidden = False
        End If
    End If
End Sub

Y ahora adapta el siguiente código a las celdas que necesites, solamente agrega los demás rangos bajo el siguiente codigo:

Private Sub Worksheet_Calculate()
    If Range("I10") = "NO" Then
        Range("A71:A77").EntireRow.Hidden = True
    Else
        Range("A71:A77").EntireRow.Hidden = False
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas