Control de salidas de productos con fecha de vencimiento

Buenas tardes

Mi pregunta seria; tengo el stock de un producto con 3 fechas distintas de vencimiento (más reciente a más antigua),¿habría alguna macro que me permita realizar el siguiente ejemplo de salida de stock comparando las fechas de vencimiento? Ejemplo:

Tengo el siguiente stock en almacen con 3 fechas de vencimiento (unidades en cajas)

Jamón (80 cajas) 20 20-05-2015

                                   10   10-06-2015

                                   50   20-06-2015,

Se descarga de almacen 25 cajas; la macro debería mostrar:

Jamón (55 cajas) 05 10-06-2015

                                  50  20-06-2015

Agradeceré su respuesta. (Adjunto el excel, la macro resta correctamente la cantidad pero los lotes solo coge el ultimo, falta corregir pero no se que... : ( )

Saludos Cordiales

https://mega.co.nz/#!6dxGxbpR!e3-z7_AzRX6olp6_zsFwRnYqoLJC6-wMafqricy8D34

1 respuesta

Respuesta
-1
Ya ha pasado un tiempo y no se si lo habrás podido hacer tu solo pero aquí está el código
Private Sub CommandButton1_Click()
    'Lo que hago al principio es copiar
    'lo que tienes en la hoja base en la
    'hoja final a partir de ahi voy modificando
 'la hoja final
        Dim cant_base As Double
    Dim cant_consumo As Double
    Dim cant_lote As Double
    Dim fecha_lote As String
    Dim i As Integer
    Dim j As Integer
    Dim fila_de_datos As Integer
    Dim columna_de_Datos As Integer
    Dim max_lotes As Integer
    max_lotes = 4
    fila_de_datos = 4
    columna_de_Datos = 5
    cant_base = Hoja2.Range("E5")
    cant_consumo = Hoja1.Range("E4")
    If (cant_consumo > cant_base) Then
        MsgBox ("No se puede consumir más de las existencias actuales")
    Else
        Hoja3.Range("E4").Activate
        For i = 0 To max_lotes - 1
            cant_lote = Cells(fila_de_datos, columna_de_Datos + i * 2)
            fecha_lote = Cells(fila_de_datos, columna_de_Datos + 1 + i * 2)
            If (cant_consumo > cant_lote) Then
                Cells(fila_de_datos, columna_de_Datos + i * 2) = CStr(cant_lote - cant_consumo)
                If (Cells(fila_de_datos, columna_de_Datos + i * 2) < 0) Then
                    Cells(fila_de_datos, columna_de_Datos + i * 2) = ""
                End If
                Cells(fila_de_datos, columna_de_Datos + 1 + i * 2) = ""
                cant_consumo = cant_consumo - cant_lote
            Else
                Cells(fila_de_datos, columna_de_Datos + i * 2) = cant_lote - cant_consumo
                j = i * 2
                If (j > 0) Then 'Esta parte es para que mueva los datos a la izquierda
                    For j = 0 To 2 * (max_lotes - i) + 6 'Este 6 es para que los datos de la derecha se queden en blanco
                        Cells(fila_de_datos, columna_de_Datos + j) = Cells(fila_de_datos, columna_de_Datos + j + 2 * i)
                    Next j
                End If
                Exit For
            End If
        Next i
    End If
End Sub

¡Gracias! voy a probarlo......

Hola de nuevo. Gracias por responderme, al parecer me sale un error en el archivo, lo adjunto para que lo puedas ver (le adjunte el código también). de nuevo gracias por tu apoyo...

https://mega.co.nz/#!YhQimb4b!ripWVMA8SgEgwv8aDxyA657yJxsMQ06eKf2drhC0emE

Lo he probado y el error es por una tontería.

Te ha dado el error ese porque estabas en la hoja que no era.

Si el código estaba así

Else
        Hoja3.Range("E4").Activate

has de poner

Else
        Hoja3. Activate
        Hoja3. Range("E4"). Activate

Hola...

Algo pasa en el archivo, cambie y active la hoja 3, pero la macro no arroja ningún valor solo me dirige a la hoja 3 y a una celda vacía... por otra parte creo que tampoco esta leyendo las fechas... lo adjunto el archivo. Gracias antares

https://mega.co.nz/#!AxwgVKII!rtt8T88oomNSXZw5se4xmU9KumXPYl3OU1ZJwvKAFLc

Perdona este es el nuevo código

Private Sub CommandButton1_Click()
    Dim cant_base As Double
    Dim cant_consumo As Double
    Dim cant_lote As Double
    Dim fecha_lote As String
    Dim i As Integer
    Dim j As Integer
    Dim fila_de_datos As Integer
    Dim columna_de_Datos As Integer
    Dim max_lotes As Integer
    max_lotes = 5
    fila_de_datos = 4
    columna_de_Datos = 5
    cant_base = Hoja1.Range("E4")
    cant_consumo = Hoja2.Range("E5")
    If (cant_consumo > cant_base) Then
        MsgBox ("No se puede consumir más de las existencias actuales")
    Else
        Hoja3.Activate
        Hoja3.Range("E4").Activate
        For i = 0 To max_lotes - 1
            cant_lote = Hoja3.Cells(fila_de_datos, columna_de_Datos + i * 2)
            fecha_lote = Hoja3.Cells(fila_de_datos, columna_de_Datos + 1 + i * 2)
            If (cant_consumo >= cant_lote) Then
                Hoja3.Cells(fila_de_datos, columna_de_Datos + i * 2) = CStr(cant_lote - cant_consumo)
                If (Hoja3.Cells(fila_de_datos, columna_de_Datos + i * 2) < 0) Then
                    Hoja3.Cells(fila_de_datos, columna_de_Datos + i * 2) = ""
                End If
                Hoja3.Cells(fila_de_datos, columna_de_Datos + 1 + i * 2) = ""
                cant_consumo = cant_consumo - cant_lote
            Else
                Hoja3.Cells(fila_de_datos, columna_de_Datos + i * 2) = cant_lote - cant_consumo
                j = i * 2
                If (j > 0) Then 'Esta parte es para que mueva los datos a la izquierda
                    For j = 0 To 2 * (max_lotes - i) + 6 'Este 6 es para que los datos de la derecha se queden en blanco
                        Hoja3.Cells(fila_de_datos, columna_de_Datos + j) = Cells(fila_de_datos, columna_de_Datos + j + 2 * i)
                    Next j
                End If
                Exit For
            End If
        Next i
    End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas