Bucle para leer una lista de artículos en una hoja y modificar los importes en otra Excel vba

Estoy haciendo una planilla en donde cargo entradas y salidas de un producto y en otra hoja actualiza el stock. El problema que estoy teniendo es que sólo me toma la primer línea de la planilla y no sigue con las demás. AYUDA

Sub Actualizar()

    Dim ultLinea As Long

    Dim ultLineaDatos As Long

    Dim codigo, cantidad, movimiento, posicion, ordenpicking As String

    Dim busquedaFilaDatos As Range

    Dim rangoBusqueda As String

    Dim filaRegistro As Long

    Dim x As Integer

     'validar que los campos tengan la info necesaria

         codigo = Sheets("PICKING").Cells(5, 1)

     cantidad = Sheets("PICKING").Cells(5, 2)

     movimiento = Sheets("PICKING").Cells(5, 3)

     posicion = Sheets("PICKING").Cells(5, 4)

     ordenpicking = Sheets("PICKING").Cells(5, 6)

    'Actualizar entrada de datos

    ultLineaDatos = Sheets("Control de Stock").Range("A" & Rows.Count).End(xlUp).Row

    rangoBusqueda = "B11:B" & ultLineaDatos

          Set busquedaFilaDatos = Sheets("Control de Stock").Range(rangoBusqueda).Find(posicion, lookat:=xlWhole)

      If busquedaFilaDatos Is Nothing Then

          MsgBox "El posición ingresada no existe", vbCritical, "Resultado"

       Exit Sub

      Else

       filaRegistro = busquedaFilaDatos.Row

      If movimiento = "Entradas" Then

         Sheets("Control de Stock").Cells(filaRegistro, 3) = Sheets("Control de Stock").Cells(filaRegistro, 3) + cantidad

         Else

         Sheets("Control de Stock").Cells(filaRegistro, 3) = Sheets("Control de Stock").Cells(filaRegistro, 3) - cantidad

      End If

    'Limpiar datos

       Sheets("PICKING").Range("A5:C293") = ""

       MsgBox "Actualización Exitosa", vbInformation, "Resultado"

       Sheets("PICKING").Range("A5").Select

     End If

End Sub

2 Respuestas

Respuesta
1
Respuesta
1

Te anexo el código actualizado con el Bucle

Sub Actualizar()
    Dim ultLinea As Long, u As Long
    Dim ultLineaDatos As Long
    Dim codigo As String, cantidad As Long, movimiento As String
    Dim posicion As String, ordenpicking As String
    Dim busquedaFilaDatos As Range
    Dim rangoBusqueda As String
    Dim filaRegistro As Long
    Dim x As Integer
    '
    Dim h1 As Object, h2 As Object
    'validar que los campos tengan la info necesaria
    Set h1 = Sheets("PICKING")
    Set h2 = Sheets("Control de Stock")
    u = h1.Range("A" & Rows.Count).End(xlUp).Row
    For i = 5 To u
        codigo = h1.Cells(i, 1)
        cantidad = h1.Cells(i, 2)
        movimiento = h1.Cells(i, 3)
        posicion = h1.Cells(i, 4)
        ordenpicking = h1.Cells(i, 6)
        'Actualizar entrada de datos
        ultLineaDatos = h2.Range("B" & Rows.Count).End(xlUp).Row
        rangoBusqueda = "B11:B" & ultLineaDatos
        Set busquedaFilaDatos = h2.Range(rangoBusqueda).Find(posicion, lookat:=xlWhole)
        If busquedaFilaDatos Is Nothing Then
            'MsgBox "El posición ingresada no existe", vbCritical, "Resultado"
            'Exit Sub
        Else
            filaRegistro = busquedaFilaDatos.Row
            If movimiento = "Entradas" Then
                h2.Cells(filaRegistro, 3) = Sheets("Control de Stock").Cells(filaRegistro, 3) + cantidad
            Else
                h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) - cantidad
            End If
        End If
    Next
    'Limpiar datos
    h1.Range("A5:C" & u).Value = ""
    MsgBox "Actualización Exitosa", vbInformation, "Resultado"
    Range("A5").Select
End Sub

.

.Sal u dos. Dante Amor. R ecuerda valorar la respuesta. G racias

.

¡Gracias! Dante Amor, me salvaste!! FUncionoi PERFECTO

Una consulta más, que tendría que modificar en el código si hago en 2 hojas distintas, una de ENTRADAS y otra de SALIDAS!?

Podrías crear una nueva pregunta, en el desarrollo de la pregunta escribe para Dante Amor y ahí describe lo que necesitas. Preparo la macro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas