EXCEL: Estimados necesito que se pasen los datos de una tabla en hoja 1 a hoja 2, siempre que cumplan los siguientes criterios

Voy a describir la pregunta que necesito con imágenes.

Aquí hay una base de datos con ordenes de trabajo, que tienen 4 estados, anulado, en espera, en proceso y finalizado. Además hay fecha de alta del desde 2012 hasta el 2016.

Lo que necesito es pasar todos los datos que tengan estado " en proceso" y sean de 2016 a la siguiente hoja OTProceso.

Además de esto necesito que cada vez que al agregar en la primer tabla una nueva OT en ListadoOT se agregue automáticamente en Ots en proceso.

Ya con esto me solucionarian el 75% del problema.

Lo otro es que cuando cambie de la hoja OTProceso el ESTADO de una celda de "En proceso" a "finalizado" se elimine de la tabla automáticamente, pero que en "Listado de OT" aparezca como finalizado. No se si pude dar a entender esto último.

Ya intenté varias veces, pero no puedo jaja

1

1 respuesta

Respuesta
1

H o l a: Te anexo las 2 macros, sigue las instrucciones.

Macro para actualizar la hoja "OTProceso". Lo que hace es leer todos los registros de la hoja "ListadoOT", busca la OT en la hoja "OTProceso", si no la encuentra entonces agrega el registro. De esa forma puedes agregar varias OT en la hoja y después ejecutar la macro para que te actualice la hoja "OTProceso".

Sub PasarOTProceso()
'Por.Dante Amor
    Set h1 = Sheets("ListadoOT")
    Set h2 = Sheets("OTProceso")
    '
    u1 = h1.Range("B" & Rows.Count).End(xlUp).Row
    Application.EnableEvents = False
    For i = 3 To u1
        If h1.Cells(i, "B") = "EN PROCESO" Then
            ot = h1.Cells(i, "D")
            Set b = h2.Columns("D").Find(ot, lookat:=xlWhole)
            If b Is Nothing Then
                u2 = h2.Range("B" & Rows.Count).End(xlUp).Row + 1
                h1.Rows(i).Copy h2.Rows(u2)
            End If
        End If
    Next
    Application.EnableEvents = True
    MsgBox "Hoja OT en Proceso actualizada", vbInformation
End Sub

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar click derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: PasarOTProceso
  10. Aceptar.
  11. Para ejecutarla dale click a la imagen.

Ahora, para actualizar la hoja "ListadoOT", pon la siguiente macro en los eventos de la hoja "OTProceso". Funciona de la siguiente manera, cada vez que modifiques el Estado, la macro revisa si escribiste el estado "FINALIZADO", si es así, cambia el Estado en la hoja "ListadoOT" y borra el registro de "OTProceso".

Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        If Target.Value = "FINALIZADO" Then
            Application.EnableEvents = False
            Set h = Sheets("ListadoOT")
            ot = h.Cells(Target.Row, "D")
            Set b = h.Columns("D").Find(ot, lookat:=xlWhole)
            If Not b Is Nothing Then
                h.Cells(b.Row, "B") = "FINALIZADO"
                Rows(Target.Row).Delete
                MsgBox "Estatus actualizado", vbInformation
            End If
        Application.EnableEvents = True
        End If
    End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(OTProceso)
  4. En el panel del lado derecho copia la macro

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Te agradezco mucho por tu tiempo. Ahora la voy a probar!! Gracias Dante

Te quiero agradecer, la verdad me funcionó muy bien. Lo único que quería preguntarte es como hacer en el caso de que ya haya ejecutado la macro, volver para atrás? No se puede?. Por ejemplo, una ot la cambie a finalizado, aparece el cartel ( estatus actualizado), si yo quiero volver atrás ¿Como hago? 

Saludos

Te molesto con otra preguntita.. En la segunda macro, en OTProceso se eliminan correctamente  para eliminar los registros que tienen "FINALIZADO" . Pero lo que no hace es modificar el registro  en LIstado de OT, de " en proceso" a "finalizado" 

Desde ya muchisimas gracias! 

Te contesto una a una tus dudas.

1. Si y cambiaste el estatus a "FINALIZADO", lo que puedes hacer es regresar a la hoja "ListadoOT", cambiar el estatus a "EN PROCESO"; y ejecutar la macro "PasarOTProceso".

2. Si no actualiza el estatus a "FINALIZADO", revisa que el número de OT en ambas hojas sea el mismo, también revisa que en ambas hojas sea numérico o en ambas hojas sea texto. El número de OT en la hoja "OTProceso" debe existir en la hoja "ListadoOT".

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas