Utilizar macro para dos hojas distintas Excel vba
Estoy necesitando que una macro la pueda utilizar tanto en una hoja de "ENTRADAS" y otra de "SALIDAS" ambas tiene una columna oculta con el tipo de movimiento.
1 Respuesta
Revisa lo siguiente y comentas
Sub Actualizar()
Dim ultLinea As Long, u As Long, 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)
If movimiento = "Entradas" Then
Set h2 = Sheets("Entradas")
Else
Set h2 = Sheets("Salidas")
End If
'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) = h2.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. No olvides valorar la respuesta. G raci as
.
Gracias por la info Dante! Hay algo que hay que modificar en el código, las hojas activas que tengo en el libro son Control de Stock, ENTRADAS y la otra es SALIDAS. La de PICKING la reemplace por entradas y salidas, hay algo en el codigo que no me esta andando
Te envía un mensaje de error, ¿qué dice?
¿En qué línea se detiene la macro?
La estructura de la hojas "control de stock", ¿entradas y salidas son iguales?
Se detiene en esta línea:
¿Querés qué te la envíe por mail? Las hojas entradas y salidas son iguales, Control de Stock no
Set h1 = Sheets("PICKING")
¿Y ahora cómo se llama tu hoja donde capturas?
Antes se llamaba "picking"
Solamente cambia "picking" por el nombre que tienes ahora.
Si las estructuras de las hojas son diferentes, entonces tienes que explicar, en dónde vas a capturar y en dónde vas poner el resultado
Antes sumas la cantidad para las entradas y restabas para las salidas, pero ahora qué quieres hacer.
Donde capturo datos se llama ENTRADAS y otra de las hojas se llama SALIDAS, las 2 tienen la misma estructura. Hay posibilidad de ejecutar la macro en una hoja cambiandole en el código donde dice PICKING por entradas, y en la otra hoja lo mismo pero por SALIDAS??

Me lo imaginé al revés, mejor envíame tu archivo para revisar si se puede con una macro o con dos.
Mi correo [email protected]
Te anexo la macro actualizada
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 = ActiveSheet
Set h2 = Sheets("Control de Stock")
u = h1.Range("A" & Rows.Count).End(xlUp).Row
For i = 5 To u
codigo = h1.Cells(i, "A")
cantidad = h1.Cells(i, "B")
'movimiento = h1.Cells(i, 3)
posicion = h1.Cells(i, "C")
ordenpicking = h1.Cells(i, "E")
'
'Actualizar 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 "La posición ingresada no existe", vbCritical, "Resultado"
Exit Sub
Else
filaRegistro = busquedaFilaDatos.Row
If ActiveSheet.Name = "PICKING IN" Then
h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) + cantidad
Else
h2.Cells(filaRegistro, 3) = h2.Cells(filaRegistro, 3) - cantidad
End If
End If
Next
'Limpiar datos
h1.Range("A5:B" & u).Value = ""
MsgBox "Actualización Exitosa", vbInformation, "Resultado"
Range("A5").Select
End Subsal u dos
- Compartir respuesta