Como hacer una búsqueda usando como referencia filas y Columnas

Lo que necesito hacer es que según el usuario selección ciertos elemento de una formulario se seleccione un bloque de datos, me explico mejor:
Este es el formulario

Y un ejemplo de opciones que puede seleccionar el usuario es este

Una vez el usuario seleccione los datos le dará click al botón "Buscar y Enviar", el código en primer lugar deberá ir a la siguente BD para hacer la busqueda

El dato de la primer lista desplegable se buscara en la columna "BP", pero como ven el valor "STC" se repite, por lo cual se incluyo el segundo filtro el cual es en las filas buscar esa medida o "diámetro" que sale en la segunda lista que en este caso es "400X400" una vez localizado ese segundo dato se deberá seleccionar el bloque de datos que le pertenece y llevarlo a otra hoja, así:

Copia los datos y los lleva a otra hoja y los pega en la segunda hoja

Espero que me lograra hacer entender, de igual forma les adjunto un pequeño archivo que contiene los datos que necesito (no es el archivo completo, ya que este no lo podría subir)
Archivo ejemplo

1 Respuesta

Respuesta
2

Te anexo el código para buscar y enviar

Private Sub cmdenv_Click()
'Por Dante Amor
'Buscar y enviar
'
    Set h1 = Sheets("MEMORIAS ACTO")    'hoja origen
    Set h2 = Sheets("EMPALMES2")        'hoja destino
    h2.Range("A15:E28").ClearContents
    '
    If cbxsum.Value = "" Or cbxsum.ListIndex = -1 Then
        MsgBox "Seleccionar un suministro"
        cbxsum.SetFocus
        Exit Sub
    End If
    If cbxMed.Value = "" Or cbxMed.ListIndex = -1 Then
        MsgBox "Seleccionar un diámetro"
        cbxMed.SetFocus
        Exit Sub
    End If
    '
    existe = False
    Set r = h1.Columns("BO:BP")
    Set b = r.Find(cbxsum, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            fila = b.Row + 1
            k = 15
            For j = Columns("BQ").Column To Columns("CF").Column
                If h1.Cells(fila, j).Value = cbxMed.Value Then
                    existe = True
                    fila = fila + 1
                    Do While h1.Cells(fila, j).Value <> ""
                        h2.Cells(k, "B").Value = h1.Cells(fila, j).Value
                        h2.Cells(k, "C").Value = h1.Cells(fila, j + 1).Value
                        fila = fila + 1
                        k = k + 1
                    Loop
                    Exit For
                End If
            Next
            If existe Then Exit Do
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    If existe = False Then
        MsgBox "No existe la combinación de suministro y diámetro", vbExclamation
    Else
        MsgBox "Empalmes copiados", vbInformation
    End If
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

¡Gracias! El código funciona perfectamente, te lo agradezco mucho

Hola como estas, tomando en cuenta un comentario que se hizo trate de adaptar el código para que el usuario pudiera agregar varios "Bloques" de empalmes, y digamos que lo logre, pero cuando creo una nueva tabla la idea es que los nuevos empalmes nuevamente se empiecen a copiar en la segunda tabla, pero actualmente se copian en una celda más abajo de la última celda con datos, tal vez podrías ayudarme a arreglar el código, y espero que me lograra explicar bien, de todas formas te adjunto de nuevo el archivo con el código modificado
Este es el código ya modificado (ya también lo implemente en el archivo)

    Set h1 = Sheets("MEMORIAS ACTO")    'hoja origen
    Set h2 = Sheets("EMPALMES2")        'hoja destino
    'h2.Range("A15:E28").ClearContents
    '
    If cbxsum.Value = "" Or cbxsum.ListIndex = -1 Then
        MsgBox "Seleccionar un suministro"
        cbxsum.SetFocus
        Exit Sub
    End If
    If cbxMed.Value = "" Or cbxMed.ListIndex = -1 Then
        MsgBox "Seleccionar un diámetro"
        cbxMed.SetFocus
        Exit Sub
    End If
    '
    existe = False
    Set r = h1.Columns("BO:BP")
    Set b = r.Find(cbxsum, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            fila = b.Row + 1
            'k = 15
            k = h2.Range("B" & Rows.Count).End(xlUp).Row + 2
            rng = k
            For j = Columns("BQ").Column To Columns("CF").Column
                If h1.Cells(fila, j).Value = cbxMed.Value Then
                    existe = True
                    fila = fila + 1
                    Do While h1.Cells(fila, j).Value <> ""
'                        h2.Cells(k, "B").Value = h1.Cells(fila, j).Value
'                        h2.Cells(k, "C").Value = h1.Cells(fila, j + 1).Value
                     h2.Cells(rng, "B").Value = h1.Cells(fila, j).Value '**
                     h2.Cells(rng, "C").Value = h1.Cells(fila, j + 1).Value '**
                        fila = fila + 1
                        'k = k + 1
                       rng = rng + 1
                    Loop
                    Exit For
                End If
            Next
            If existe Then Exit Do
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    If existe = False Then
        MsgBox "No existe la combinación de suministro y diámetro", vbExclamation
    Else
        MsgBox "Empalmes copiados", vbInformation
    End If

Archivo modificado

Con todo gusto te ayudo con todas tus peticiones, crea una nueva pregunta y lo explicas con ejemplos, con imágenes y subes el archivo a la nube con los ejemplos, tal y como lo expusiste en esta pregunta.

Gracias de antemano por la ayuda, ya cree la nueva pregunta y acá te la adjunto

 Nueva Pregunta 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas