¿Cómo realizar una búsqueda de acuerdo a criterios de tipo fecha para luego copiarlos en otra hoja, pero solo datos específicos?

Necesito de su ayuda en darme una solución o una idea de cómo se puede crear un sistema de búsqueda sin utilizar filtros que evalúe dos criterios: Fecha_Inicio y Fecha_Fin a demas de otro criterio que queda a discresión y que para el caso podría ser "Código" contenidos en unas celdas de excel y que a partir de ello se le de clik a un boton de comando para que realice la acción de volcar los datos encontrados en otra hoja, pero solo los datos que se necesitan.

Les comparto las imágenes de las tablas de datos para mejor comprensión del caso.

En primer lugar esta la Hoja "Matriz" donde se realizará la búsqueda.

Luego está la Hoja "kardex" donde se volcarán los datos encontrados y solo los requeridos ya que algunas contienen fórmulas que solo necesitan de ciertos datos especificos. Desde la columna "Fecha" hasta la columna "Proveedor/Cliente" serán datos fijos seguidamente solo se necesitarán copiar 3 valores en las columnas "Unidades" y "Costo Unitario" del grupo "ENTRADAS" y en la columna "Unidades" del grupo "SALIDAS" de ahí el cuadro, como comenté anteriormente, ya esta formulado para que realice los cálculos respectivos.

Entonces en otra hoja esta creada la opciones con los criterios de búqueda.

Para el caso ya poseo un código que funciona muy bien con la limitante que solo esta diseñado para utilizar el criterio de la opción "Código" que de acuerdo a este se pasan los datos a la hoja "Kardex" y lo que se desea hacer es integrar otro código o modifcar el que ya se tiene para que también tome en cuenta las fechas de búsqueda, adicionalmente en la línea de "Saldo Inicial" coloque los valores contenidos en el grupo "SALDO" del día anterior a la Fecha_Inicio y que al final se totalicen los valores de los Grupos "ENTRADAS", "SALIDAS" Y "SALDO".

Este es el código mencionado.

Para correr la macro con el botón de comando, se lo asigno con una llamada de esta macro que está contenida en un módulo.

1 respuesta

Respuesta
1

Son varias peticiones en una sola pregunta.

Te ayudo con la primera petición: "que evalúe dos criterios: Fecha_Inicio y Fecha_Fin".

Según tu macro el código a buscar está en la hoja "kardex", entonces también supongo que las fechas estarán en la hoja "kardex"

En tus imágenes no se aprecia, en qué hoja ni en cuáles celdas estarán las fechas y el código. Así que te pongo un ejemplo, pero deberás cambiar las celdas en estas líneas:

    codigo = h2.Range("C3").Value   'código
    fecini = h2.Range("C2").Value   'indicar celda de fecha inicio
    fecfin = h2.Range("E2").Value   'indicar celda de fecha fin

Te anexo la macro renovada.

Sub Busqueda_Kardex()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Matriz")
    Set h2 = Sheets("Kardex")
    '
    fila = 8
    codigo = h2.Range("C3").Value   'código
    fecini = h2.Range("C2").Value   'indicar celda de fecha inicio
    fecfin = h2.Range("E2").Value   'indicar celda de fecha fin
    'Valida fechas
    If fecini <> "" Then
        If fecfin = "" Then
            MsgBox "Falta fecha fin"
            Exit Sub
        Else
            If fecfin < fecini Then
                MsgBox "La fecha fin es menor a lafecha inicio"
                Exit Sub
            End If
        End If
    Else
        If fecfin <> "" Then
            MsgBox "Falta fecha inicio"
            Exit Sub
        End If
    End If
    '
    Set r = h1.Columns("D")
    Set b = r.Find(codigo, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            If fecini = "" Then
                fval1 = b.Offset(0, -3)
                fval2 = b.Offset(0, -3)
            Else
                fval1 = fecini
                fval2 = fecfin
            End If
            '
            If b.Offset(0, -3) >= fval1 And b.Offset(0, -3) <= fval2 Then
                h2.Cells(fila, 1) = b.Offset(0, -3)
                h2.Cells(fila, 2) = b.Offset(0, -2)
                h2.Cells(fila, 3) = b.Offset(0, -1)
                h2.Cells(fila, 4) = b.Offset(0, 1)
                h2.Cells(fila, 5) = b.Offset(0, 3)
                h2.Cells(fila, 6) = b.Offset(0, 4)
                h2.Cells(fila, 7) = b.Offset(0, 5)
                h2.Cells(fila, 9) = b.Offset(0, 7)
                fila = fila + 1
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    Set b = Nothing
    Set r = Nothing
    Set h2 = Nothing
    Set h1 = Nothing
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

Te sugiero que trabajes sobre la nueva macro, avísame cualquier duda.


Crea una nueva pregunta y me explicas con ejemplos cómo se obtiene esto:

"Adicionalmente en la línea de "Saldo Inicial" coloque los valores contenidos en el grupo "SALDO" del día anterior a la Fecha_Inicio".

En el desarrollo de la nueva pregunta escribe "Para Dante Amor"


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

Hola amigo. Creo que me falto un poco más de explicación. Resumiendo son 3 hojas 1- es donde están los campos de los criterios de búsqueda 2- es la matriz donde se encuentran los datos a buscar y 3- es la hoja kardex donde se mostrarán los resultados de acuerdo a los criterios de búsqueda ingresados. En efecto en la hoja kardex hay una celda que tiene una condición para que se genere la búsqueda que valida el dato código que se encuentra en los criterios de búsqueda y si este es igual al que esta en otro rango como un listado, lo valida y genera el reporte con la limitante que no esta de acuerdo a fechas si no que muestra todos los datos desde el primer registro es decir que no valida las fechas sólo el código.

El otro caso de que muestre el saldo del día anterior a la Fecha_Inicio es por ejemplo que si en los criterios de búsqueda se le coloca que quieres los datos de las fechas del 01-04-2017 al 30-04-2017 el reporte muestre además el saldo que quedo al 31-03-2017.

Agradezo tu respuesta y desde luego que probare tu macro y te aviso. Muchas gracias.....

Vamos a continuar solamente con la primera petición:

"que evalúe dos criterios: Fecha_Inicio y Fecha_Fin".

Te anexo la macro con la hoja3 "Criterios" ajusta C3, C2 y E2 por las celdas de la hoja "Criterios"

Sub Busqueda_Kardex()
'Act.Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Matriz")
    Set h2 = Sheets("Kardex")
    Set h3 = Sheets("Criterios")
    '
    fila = 8
    codigo = h3.Range("C3").Value   'código
    fecini = h3.Range("C2").Value   'indicar celda de fecha inicio
    fecfin = h3.Range("E2").Value   'indicar celda de fecha fin
    'Valida fechas
    If fecini <> "" Then
        If fecfin = "" Then
            MsgBox "Falta fecha fin"
            Exit Sub
        Else
            If fecfin < fecini Then
                MsgBox "La fecha fin es menor a lafecha inicio"
                Exit Sub
            End If
        End If
    Else
        If fecfin <> "" Then
            MsgBox "Falta fecha inicio"
            Exit Sub
        End If
    End If
    '
    Set r = h1.Columns("D")
    Set b = r.Find(codigo, lookat:=xlWhole, LookIn:=xlValues)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            'detalle
            If fecini = "" Then
                fval1 = b.Offset(0, -3)
                fval2 = b.Offset(0, -3)
            Else
                fval1 = fecini
                fval2 = fecfin
            End If
            '
            If b.Offset(0, -3) >= fval1 And b.Offset(0, -3) <= fval2 Then
                h2.Cells(fila, 1) = b.Offset(0, -3)
                h2.Cells(fila, 2) = b.Offset(0, -2)
                h2.Cells(fila, 3) = b.Offset(0, -1)
                h2.Cells(fila, 4) = b.Offset(0, 1)
                h2.Cells(fila, 5) = b.Offset(0, 3)
                h2.Cells(fila, 6) = b.Offset(0, 4)
                h2.Cells(fila, 7) = b.Offset(0, 5)
                h2.Cells(fila, 9) = b.Offset(0, 7)
                fila = fila + 1
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
    '
    Set b = Nothing
    Set r = Nothing
    Set h3 = Nothing
    Set h2 = Nothing
    Set h1 = Nothing
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

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

¡Gracias! 

Ya revisé y corrí la macro y la verdad funciona muy bien. La otra consulta: "Adicionalmente en la línea de "Saldo Inicial" coloque los valores contenidos en el grupo "SALDO" del día anterior a la Fecha_Inicio", acabo de caer en cuenta que no se puede, bueno según como lo veo, ya que para eso tendría que crear una hoja más donde se trasladen todos los valores del código buscado sin importar las fechas y a partir de ahí ya se podría obtener el valor anterior a la fecha Inicio ya que la hoja matriz recoge el movimiento de todos los articulos y no saldos independientes. Bueno acá veré si puedo resolver esa parte.

Gracias por todo has sido de gran ayuda.......Excelente!!! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas