Necesito ayuda para calcular el stock real de un producto. Tengo un libro con 4 hojas. Altas - ingresos - salidas - stock Necesito una macro que me calcule para iguales Materiales, el Stock final luego de dar ALTA al mismo, y posteriores Ingresos y Salidas. Seria de mucha ayuda si te envío un archivo ejemplo. Desde ya muchas gracias!1
1 Respuesta
Respuesta de Isaac Reyes
2
2
Isaac Reyes, Es mejor enseñar a pescar que dar el pescado
Vemos que se puede hacer, mi mail es isenrey(a)yahoo. Es
Como sugerencia, lo ideal sería actualizar el stock cada ve que entra o sale un producto, pero conservando tu esquema aquí te dejo el código. Lo único que debes hacer es pegarlo en un módulo. El proceso de actualización se denmora, y se demorará más, mientras más entradas y salidas tengas. Para que no desesperes sin saber cuanto lleva, le he puesto un contador. Si tomas la alternativa de actualizar cada vez que entra o sale un producto (es más eficiente) me avisas y ahí vemos como lo implementamos. EL CÓDIGO (Está acondicionado para tu documento)
Sub Rectángulo_AlHacerClic() Dim i As Double Dim dblFil As Double Dim dblNFilas As Double dblNFilas = Hoja2.Range("C65535").End(xlUp).Row For i = 3 To dblNFilas 'Extraer el stock inicial dblFil = fcnBuscar(Hoja2, "C", Hoja5.Cells(i, 2), 3) Hoja5.Cells(i, 4) = Hoja2.Cells(dblFil, 2) 'Sumar las entradas dblFil = 2 Do Until (dblFil = 0) dblFil = fcnBuscar(Hoja3, "D", Hoja5.Cells(i, 2), dblFil + 1) If (dblFil <> 0) Then Hoja5.Cells(i, 4) = Hoja5.Cells(i, 4) + Hoja3.Cells(dblFil, 6) End If Loop 'Restar las salidas dblFil = 2 Do Until (dblFil = 0) dblFil = fcnBuscar(Hoja4, "D", Hoja5.Cells(i, 2), dblFil + 1) If (dblFil <> 0) Then Hoja5.Cells(i, 4) = Hoja5.Cells(i, 4) - Hoja4.Cells(dblFil, 6) End If Loop Hoja5.Range("E3") = Round(100 * ((i - 3) / (dblNFilas - 3))) & " %" Next Hoja5.Range("E3") = "" End Sub Function fcnBuscar(hojaBusq As Worksheet, _ strColumna As String, _ valor, _ Optional dblFilaIni As Double = 1) As Double Dim strRango As String Dim resulta As Range fcnBuscar = 0 'Buscar en la primera fila Set resulta = hojaBusq.Range(strColumna & dblFilaIni).Find(What:=valor, LookIn:=xlValues, LookAt:=xlWhole) 'Si no hay asierto If resulta Is Nothing Then 'Buscar en las siguientes filas strRango = strColumna & dblFilaIni & ":" & _ strColumna & hojaBusq.Range(strColumna & "65535").End(xlUp).Row + 1 'MsgBox strRango Set resulta = hojaBusq.Range(strRango).Find(What:=valor, LookIn:=xlValues, LookAt:=xlWhole) If Not resulta Is Nothing Then fcnBuscar = resulta.Row End If Else 'si hay asierto, retornar la fila fcnBuscar = resulta.Row End If End Function
Estimado Experto1! Entendiste a la perfección el problema que estaba teniendo! Desde ya muchísimas gracias por tu pronta solución. Van mis 5 estrellas super merecidas.