Identificar O/F en una columna y colocar N° Factura relacionada a dicha O/F

Recurro a tu experiencia, para pedirte de favor que me ayudes a resolver el siguiente inconveniente.

Estoy haciendo un aplicativo de facturación con Macros Excel. Actualmente tengo un formulario que me permite realizar el ingreso de las O/F a una hoja excel "Base". La O/F puede estar compuesta por varios materiales y en la hoja base se guarda un registro por cada producto, relacionada a la O/F (Autoincremental). El siguiente procedimiento es solicitar la impresión de la factura que esta relacionada a la O/F, pero esto puede ser 1 o 2 días después. Es por ello que he creado un formulario con 03 textbox, uno para ingresar el número de O/F y los otros 02 textbox, son para ingresar el número de factura y la fecha de registro, para que haya una relación en la hoja "Base", entre la O/F y el número de Factura.

Intenté con una rutina, utilizando un Buscarv (Macros - Find), pero solo me encuentra el primer registro, pero para los siguientes registros con la misma O/F, ya no copia nada.

Es un tema netamente de bucle de repetición, pero no se como hacerexactamente para que siga encontrando los siguientes registros con el mismo número de O/F y guarde el número de factura y fecha.

Mi tabla Base tiene la siguiente estructura, que inicia en la columna A1 y termina en la columna F1, con un número de filas dinámico, ya que aqui se van guardando las O/F.

FECHA1 | N° O/F   | CÓDIGO |TEXTO MATERIAL | N° FACTURA | FECHA2|

15/03/15     285            0001        ESCOBA PLASTICA    211-000458       17/03/15

17/03/15     286            0002       LIMPIADOR VIDRIO  211-000460        19/03/15

17/03/15     286            0005       JABON ANTIBACT      211-000460        19/03/15

17/03/15     286            0009       TRAPEADOR               211-000460        19/03/15

El código que tengo actualmente es:

Private Sub CommandButton3_Click()
Dim dato As String
Dim busco As Range
dato = TextBox1

Set busco = Sheets("Base").Range("B2:H20000").Find(dato, LookIn:=xlValues, LookAt:=xlWhole)
If Not busco Is Nothing Then

busco.Offset(0, 20) = Factura.Value
busco.Offset(0, 21) = FeFactura.Value

Else
'Si no encontró el dato puedes dejar un mensaje o los controles vacíos
MsgBox "No se encontró el N° de O/F"
End If

Worksheets("Inicio").Activate
Range("A1").Select
Unload Confirmar
End Sub

1 Respuesta

Respuesta
1

Haber si entendí, en tu formulario vas a capturar, por ejemplo, el OF = 286, en tu ejemplo tienes 3 registros con el mismo OF=286.

¿Qué quieres que haga la macro?

¿Qué tome el textbox2 (Factura) y que lo ponga en la columna "E" en los 3 registros con OF=286?

¿Y qué tome el textbox3 (fefactura) y que lo ponga en la columna "F" de los 3 registros?

Si es correcto te anexo la macro:

Private Sub CommandButton3_Click()
'Por.Dante Amor
    '
    Set h = Sheets("Base")
    Set r = h.Columns("B")
    If IsNumeric(TextBox1) Then dato = Val(TextBox1)
    Set b = r.Find(dato, lookat:=xlWhole)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            h.Cells(b.Row, "E") = Factura
            h.Cells(b.Row, "F") = FeFactura
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    Else
        MsgBox "No se encontró el N° de O/F " & TextBox1
    End If
    '
    Worksheets("Inicio").Activate
    Range("A1").Select
    Unload Confirmar
End Sub

Saludos.Dante Amor

Si es lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas