Como ocultar todas las casillas de verificación de una hoja menos la correspondiente a una fila concreta.

Dante Amor,

Hola Dante yo sigo intentándolo pero no lo consigo, esta pregunta es la misma que la que te hice pero he avanzado algo, te explico.

He aplicado una serie de fórmulas en la hoja donde tengo el código del buscador. He cojido todos los valores de busqueda y los he pegado en unas celdas como valor, ese valor lo aplico a otra formula de buesqueda que me entrega el número de fila donde está el nombre que busco en el buscador, luego así sé la fila donde quiero que se queden las casillas de verificación de formulario, a parte he encontrado este código que oculta todas las casillas de la selección manual que haces en la hoja:

Sub OcultaCasillasVerificacion()

'
'Declaramos variables.
Dim Celda As Range
Dim Range As Integer
Dim PrimeraColumna As Integer
Dim UltimaFila As Integer
Dim UltimaColumna As Integer
Dim shp As Object
Dim tc As Integer
Dim tr As Integer
Dim Cuenta As Integer
Dim ErrorHandler As String

'
'En caso de error...
On Error GoTo ErrorHandler
'
'Recorre cada celda de la selección.
For Each Celda In rng
    PrimeraFila = Celda.Row
    PrimeraColumna = Celda.Column
    GoTo Jump
Next Celda
'
Jump:
'
For Each Celda In Selection
    UltimaFila = Celda.Row
    UltimaColumna = Celda.Column
Next Celda
'
Cuenta = 0
'
'Recorre cada objeto de la hoja y valida su posición.
For Each shp In ActiveSheet.Shapes
    tc = shp.BottomRightCell.Column
    tr = shp.BottomRightCell.Row
    If (tc >= PrimeraColumna And tc <= UltimaColumna) And _
       (tr >= PrimeraFila And tr <= UltimaFila) Then
        shp.Visible = False
        Cuenta = Cuenta + 1
    Else
    End If
Next
MsgBox Cuenta & " objetos eliminados.", vbInformation, Titulo
'
Exit Sub
'
'En caso de detectar un error...
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, Titulo
'
End Sub

Necesito la siguiente ayuda:

1 Adaptar el código para que el rango esté preestablecido y no se tenga que seleccionar manulmente en la hoja.

2 Adaptar el código para excluir la fila donde están las casillas del dato encontrado por el buscador. (Yo ya he preparado la hoja para que me localice la fila donde está el dato buscado.

3 Como se puede adptar el código para que cuando el valor de la celda de la fila donde está el dato, cuando valga 0 se vuelva a mostrar todas las casillas de selección. Yo ya he puesto un 0 cuando el campo del dato buscado está en blanco, además el filtro se despliega nuevamente y la casilla que localiza la fila se pone como valor 0. 

Podrías ayudarme a adaptar el código de la macro para hacer todo esto?

bf3 es la celda donde recojo el número de fila o un 0.

Te mando por mail el libro hoja Seguimiento de Clientes donde tengo 2 botones, uno para mostrar y otro para ocultar.

Muchas gracias de antemano. 

1 Respuesta

Respuesta
1

Te paso la macro para ocultar todos y mostrar todos.

Intenté revisar fila por fila después del filtro avanzado, pero tal parece que pierden su posición.

Sub BUSQUEDA_LUPA()
' Libro realizado por: Miguel Angel Franco Lommers
' Filtro avanzado con tabla dinámica para la búsqueda de Clientes registrados.
    ActiveSheet.Unprotect
    Range("B10:E105").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("B2:E3"), Unique:=False
    '
    If ActiveSheet.FilterMode Then
        Set rango = Range("AS10:AU107")
        For Each img In ActiveSheet.Shapes
            If Not Intersect(img.TopLeftCell, rango) Is Nothing And _
               Not Intersect(img.BottomRightCell, rango) Is Nothing Then
                    img.Visible = False
            End If
        Next
    Else
        For Each sh In ActiveSheet.Shapes
            sh.Visible = True
        Next
    End If
    Range("B3:E3").Select
    Selection.ClearContents
    Range("B3").Select
' Proteger objetos, contenido, escenarios
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
' Permitir la selecciòn de celdas desbloqueadas
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

La otra forma, es filtrar fila por fila.

Está bien pero como bien dices, me oculta todas las casillas de verificación. Como puedo definir las variables necesarias para que como número de fila me tome el valor de una celda, es decir, si yo sé de antemano y antes de realizar la búsqueda el número de fila donde me encontrará el dato y ese valor de fila es igual al valor que figura en una celda concreta, como puedo definir las variables necesarias para seleccionar esa fila y que hay no me oculte la imagen.

El objeto del buscador es localizar el registro y actuar sobre las casillas para cerrar el estado de la operación, si no aparecen las casillas, en parte no tendría sentido buscar el regisro. Le estoy dando vueltas al tema y mi mayor problema es definir las variables, antes de armar la instrucción. ¿Crees que se puede mejorar la solución? 

Listo!

Te anexo la macro para ocultar las filas

Sub BUSQUEDA_LUPA()
'Act.Por.Dante Amor
    'ActiveSheet.Unprotect
    Application.ScreenUpdating = False
    For Each sh In ActiveSheet.Shapes
        sh.Visible = True
    Next
    u = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    For i = 11 To u
        Rows(i).Hidden = False
    Next
    '
    If [B3] <> "" Then
        For i = 11 To u
            If InStr(1, UCase(Cells(i, "B")), UCase([B3])) = 0 Then
                Set rango = Range("AS" & i & ":AU" & i)
                For Each img In ActiveSheet.Shapes
                    If Not Intersect(img.TopLeftCell, rango) Is Nothing And _
                       Not Intersect(img.BottomRightCell, rango) Is Nothing Then
                            img.Visible = False
                    End If
                Next
                Rows(i).Hidden = True
            End If
        Next
    End If
    '
    Range("B3:E3").Select
    Selection.ClearContents
    Range("B3").Select
    ' Proteger objetos, contenido, escenarios
    'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ' Permitir la selecciòn de celdas desbloqueadas
    ActiveSheet.EnableSelection = xlUnlockedCells
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas