Modificar macro para que muestre las filas ocultas

Pregunta para Dante Amor:

Buenas tardes Dante:

Estoy usando una macro para que me oculta automáticamente una serie de filas según la condición dada en algunas celdas. El problema que me encuentro es que si las celdas están en blanco me deja las filas ocultas y me gustaría que fueran visibles si la celda está en blanco o si cumple la condición de "SI". Solo en el caso que la condición fuese "NO", entonces es cuando debe ocultarlas. Te adjunto la macro.

Muchas gracias por tu ayuda.

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

H o l a:

Te anexo la macro, solamente revisa las filas y las celdas. Cada celda debe tener su correspondiente filas

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Target.Address(False, False) = "L2" Then
        filas = Array("71:77", "68:70", "78:107", "108:129", "61:67", "57:60", "19:45", "46:54")
        celda = Array("I10", "I11", "I12", "I13", "E13", "E14", "E10", "E11")
        For i = LBound(filas) To UBound(filas)
            Rows(filas(i)).Hidden = False
        Next
        '
        For i = LBound(filas) To UBound(filas)
            If Range(celda(i)) = "NO" Then
                Rows(filas(i)).Hidden = True
            End If
        Next
    End If
End Sub

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Buenos días Dante:

Ante todo y como siempre, darte las gracias por tu inestimable ayuda que como siempre te agradezco de todo corazón. Por otra parte espero que hayas descansado en tus vacaciones.

La macro está genial y funciona perfectamente, salvo porque no vuelve a mostrar las filas que están ocultas cuando todas las celdas se quedan en blanco. Cuando dejo la celda L2 en blanco, automáticamente también lo hacen las celdas I10, I11, I12, I13, E13, E14, E10, E10, E11.

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "xxxx"
Application.ScreenUpdating = False
    If Target.Count > 1 Then Exit Sub
    If Target.Address(False, False) = "L2" Then
        filas = Array("71:77", "68:70", "78:107", "108:129", "61:67", "57:60", "20:45", "55:56", "46:54")
        celda = Array("I10", "I11", "I12", "I13", "E13", "E14", "E10", "E10", "E11")
        For i = LBound(filas) To UBound(filas)
            Rows(filas(i)).Hidden = False
        Next
        '
        For i = LBound(filas) To UBound(filas)
            If Range(celda(i)) = "NO" Then
                Rows(filas(i)).Hidden = True
            End If
        Next
    End If
Application.ScreenUpdating = True
ActiveSheet.Protect "xxxx"
End Sub

Se podría adaptar el código para que cumpla esta condición?

Un millón de gracias.

Lo primero que hace la macro es mostrar todas las filas:

        For i = LBound(filas) To UBound(filas)
            Rows(filas(i)).Hidden = False
        Next
  

Después de mostrar las filas, solamente oculta las filas cuando en la celda tiene la palabra "NO"

For i = LBound(filas) To UBound(filas)
            If Range(celda(i)) = "NO" Then
                Rows(filas(i)).Hidden = True
            End If
        Next

Si está ocultando algunas filas, es probable que tengas en la celda la palabra "NO".

O revisa bien los rangos de filas para mostrar todas las filas, en esta parte:

Filas = Array("71:77", "68:70", "78:107", "108:129", "61:67", "57:60", "20:45", "55:56", "46:54")

Si todavía tienes problemas, envíame tu archivo con la macro para revisarlo.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Manuel Garcia R” y el título de esta pregunta.

Buenas tardes Dante:

Te he pasado por correo el fichero de pruebas donde podrás ver que la celda L2 no muestra todas las filas ocultas con anterioridad en el caso de quedarse en blanco.

Un saludo.

H o  l a:

Lo que pasaba es que tienes la celda L2 combinada con la celda M2. Te anexo la macro actualizada:

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    Application.ScreenUpdating = False
    If Target.Count > 5 Then Exit Sub
    If Not Intersect(Target, Range("L2:M2")) Is Nothing Then
        filas = Array("71:77", "68:70", "78:107", "108:129", "61:67", "57:60", "20:45", "55:56", "46:54")
        celda = Array("I10", "I11", "I12", "I13", "E13", "E14", "E10", "E10", "E11")
        For i = LBound(filas) To UBound(filas)
            Rows(filas(i)).Hidden = False
        Next
        '
        For i = LBound(filas) To UBound(filas)
            If Range(celda(i)) = "NO" Then
                Rows(filas(i)).Hidden = True
            End If
        Next
    End If
    Application.ScreenUpdating = True
End Sub

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas