Macro para obtener una búsqueda inteligente y poder tomar un valor de la misma búsqueda

Me gustaría poder contar con su conocimiento y soporte para ayudarme a resolver lo siguiente.

Tengo el siguiente ejemplo de captura donde requiero de una opción de búsqueda inteligente.

*.- Las celdas en color blanco son las de captura.

*.- En la hoja llamada CAPTURA dentro del rango de celdas B6:B10, voy a capturar material de almacén.

*.- En la columna F necesito que muestre el resultado de una búsqueda inteligente, como en el caso de la imagen se muestra que estoy capturando las letras "MAR" en la celda B6 y en la columna F me esta mostrando solamente el material que contiene esas 3 letras en su contenido, en tiempo real.

*.- La lista de ese material la tengo en otra hoja que se llama LISTA rango A1:A1000

*.- Después de la búsqueda inteligente, necesito dar un doble click a alguno de los resultados para que se muestre en la celda que corresponda de la columba B.

He hecho algunas pruebas de ejemplos de foros pero no he podido llevar a cabo la tarea.

1 Respuesta

Respuesta
1

Hay un problema con lo que pides ya que para llevarlo a cabo se ocupan dos macro eventos worksheet_change y worksheet_beforedoubleclick, la primera macro en cuanto tecles las tres primeras letras te traerá todo lo que coincida en la lista que manejas, luego mediante un truco y con la segunda macro te colocara el dato en la celda en cuestión y aquí vienen los problemas, si en el segundo renglón colocas de nuevo MAR te lo va a completar con el contenido de la celda más próxima, es decir si se acompleto la celda anterior con Martillo de goma eso mismo te pondrá en la segunda y de paso te activara el filtro, este es el resultado en cuestión

 y esta es la macro

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
COL = Target.Column
If COL = 6 Then
    Set DATOS = Range("B6:C10")
    CUENTA = WorksheetFunction.CountIf(DATOS.Columns(2), "X")
    If CUENTA > 0 Then
        INDICE = WorksheetFunction.Match("X", DATOS.Columns(2), 0)
        DATOS.Cells(INDICE, 1) = Target.Value
        DATOS.Cells(INDICE, 2) = Empty
    End If
End If
set datos=nothing
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
FILA = Target.Row
COL = Target.Column
If FILA > 5 And COL = 2 Then
Range("F:F").Clear
    TEXTO = Target.Value
    With Sheets("LISTA").Range("A1").CurrentRegion
        .AutoFilter
        On Error Resume Next
        .AutoFilter 1, "*" & TEXTO & "*"
        If Err.Number > 0 Then GoTo SALIR
        On Error GoTo 0
        .Offset(1).Copy
        Range("F1").PasteSpecial xlPasteAll
        Target.Offset(0, 1) = "X"
    End With
End If
SALIR:
End Sub

Buen dia James Bond gracias, ahora la pregunta es ver si hay alguna manera de que no se tenga que dar un enter al rango de celdas B6:B10, para que aparezca en la columna F, es decir que conforme se vaya tecleando letra por letra vaya apareciendo en la columna F los resultados. osease en tiempo real.

Eso directamente en la hoja no se puede hacer, para que vaya filtrando conforme vas tecleando y sin darle enter se necesita hacerlo mediante un formulario para ello requieres un textbox y un listbox conforme vayas teclando se va haciendo el filtro al listbox, seleccionas, das la cantidad y luego con un buttoncommand lo pasas a la hoja.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas