Macro descuenta artículos del almacen al realizar venta

Alguien que me ayude por favor, se necesita una macro que al pulsar el botón VENDER en la hoja1 "factura", descuente las cantidades vendidas, el rango de las cantidades a vender es (C33:C59), y el rango de código del articulo es (D33:D59),

En la hoja3 "articulos" contiene el listado del almacen, en el rango (B5:B160) es código de articulo, en el rango (E5:E160) son las existencias, agradezco de ante mano a toda la comunidad de expertos saludos...

1 Respuesta

Respuesta
3

H o l a: Te anexo la macro

Sub Venta()
'Por.Dante Amor
    Set h1 = Sheets("factura")
    Set h2 = Sheets("articulos")
    '
    'Validar existencias
    i = 33
    valida = ""
    Do While h1.Cells(i, "C") <> ""
        If h1.Cells(i, "C").Value <= 0 Or Not IsNumeric(h1.Cells(i, "C")) Then
            valida = valida & "Fila " & i & ". No tiene un valor numérico." & vbCr
        End If
        If h1.Cells(i, "D").Value = "" Then
            valida = valida & "Fila " & i & ". Código vacío." & vbCr
        End If
        If IsNumeric(h1.Cells(i, "C").Value) And h1.Cells(i, "D").Value <> "" Then
            Set b = h2.Columns("B").Find(h1.Cells(i, "D").Value, lookat:=xlWhole)
            If Not b Is Nothing Then
                If h1.Cells(i, "C").Value > h2.Cells(b.Row, "E").Value Then
                    valida = valida & "Fila " & i & ". Existencias insuficientes." & vbCr
                End If
            Else
                valida = valida & "Fila " & i & ". No existe el código." & vbCr
            End If
        End If
        i = i + 1
        If i > 59 Then Exit Do
    Loop
    '
    If valida <> "" Then
        MsgBox valida, vbCritical, "Validación de existencias"
        Exit Sub
    End If
    '
    'Actualiza existencias
    i = 33
    Do While h1.Cells(i, "C") <> ""
        Set b = h2.Columns("B").Find(h1.Cells(i, "D").Value, lookat:=xlWhole)
        If Not b Is Nothing Then
            h2.Cells(b.Row, "E").Value = h2.Cells(b.Row, "E").Value - h1.Cells(i, "C").Value
        End If
        i = i + 1
        If i > 59 Then Exit Do
    Loop
    MsgBox "Existencias actualizadas", vbInformation, "FACTURACIÓN"
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas