Copiar filas a otra hoja según valor celda

Para Dante Amor,

Buenas noches, tengo un libro de excel que contiene cuatro hojas iguales, con las mismas columnas (General, TTE+MTJ, TTE y Sin Servicios). Consiste en apuntar todas las ventas, tanto si son con transporte, transporte y montaje o sin servicios, en la hoja "General". La idea es que sea "automática" y detecte que si tiene servicios o no, se copie cada venta a la hoja que toca. Existe una columna para transporte y montaje.

Lo que quiero es hacer una macro que detecte si la columna "F.TTE" (Fecha de transporte) tiene un dato, y la columna "F.Montaje (Fecha de montaje) está vacía, que la fila completa se copie a la hoja "TTE".

Si tiene datos en "F.Montaje" se copie la fila a la hoja "TTE+MTJ". Y si ambas celdas están vacías, se copie la fila a la hoja "Sin servicios".

No se si me he explicado bien.

He estado probando con formulas para copiar las fijas a hojas "temporales" y a su vez a la hoja definitiva, pero al contener muchos datos, se acaba colgando excel...

1 respuesta

Respuesta
1

Envíame tu archivo con ejemplos reales, con colores y me comentarios me explicas qué datos se copian y en cuál hoja se pegan.

Trataré de que sea automático, pero lo más seguro es que tengas que presionar un botón para realizar las copias.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Edgar Fernández” y el título de esta pregunta.

Te explico como funcionan las macros en automático.

Para que una macro se ejecute de manera automática, debe ocurrir un evento en la hoja o en el libro. En este caso debe ocurrir un evento en la hoja "General".

Qué eventos existen en una hoja: cuando modificas una celda, cuando seleccionas una celda, cuando activas la hoja, cuando te sales de la hoja, cuando realizas un cálculo, etc.

El evento que podría ayudarnos es cuando modificas una celda, ya que si utilizamos cualquier otro, primero no sabríamos cuál registro se tiene que copiar; y segundo, tal vez se ejecute varias veces; y solamente necesitamos que se ejecute una vez y con determinado registros.

Una vez aclarado lo anterior; y revisando tu hoja, he puesto el evento cuando modificas un registro en la columna "CW" (Observaciones), es decir, capturas tu registro como lo haces normalmente y cuando decidas que quieres copiar ese registro a una de las hojas, simplemente modificas la columna CW de ese registro, y ahora sí, de manera automática la macro copiará el registro a su hoja correspondiente.

Si no estás de acuerdo en utilizar la columna "CW" como disparador para ejecutar la macro, entonces cambia la columna en esta línea de la macro:

If Not Intersect(Target, Columns("CW")) Is Nothing Then

Te recomiendo que no utilices las columnas que se van a revisar, por que si pones la columna AI y ese registro es sin servicios, entonces esa columna debe ir vacía, entonces la macro nunca se ejecutará. Debe ser una columna que siempre la llenes y que sea la última columna en llenar, de esa forma cuando es la última columna en llenar, significa que ya se pueden revisar las columnas AI y BF y determinar a qué hoja corresponde el registro.

Ejemplo, si capturas el registro 21, en la columna observaciones pones información, al presionar enter, el registro se copia, la macro también pone un 1 en la columna "EZ", para identificar que ese registro ya fue copiado. Si modificas nuevamente el registro 21 y cambias la columna de observaciones, el registro no se copia.



Private Sub Worksheet_Change(ByVal Target As Range)
'Por.Dante Amor
    Set h1 = ActiveSheet
    Set h2 = Sheets("TTE+MTJ")
    Set h3 = Sheets("TTE")
    Set h4 = Sheets("Sin Servicios")
    '
    If Not Intersect(Target, Columns("CW")) Is Nothing Then
        fila = Target.Row
        If Target.Count > 1 Then Exit Sub
        If fila < 16 Then Exit Sub
        If Cells(fila, "H") = "" Then Exit Sub
        If Cells(fila, "H") = "TOTALES" Then Exit Sub
        If Target.Value = "" Then Exit Sub
        If h1.Cells(fila, "EY") = 1 Then Exit Sub
        '
        'copia a TTE
        If Cells(fila, "AI") <> "" And Cells(fila, "BF") = "" Then
            u = 16
            Do While h3.Cells(u, "H") <> ""
                u = u + 1
            Loop
            h1.Range("A" & Target.Row & ":DT" & fila).Copy h3.Range("A" & u)
            h1.Cells(fila, "EY") = 1
        End If
        'copia a TTE+MTJ
        If Cells(fila, "AI") <> "" And Cells(fila, "BF") <> "" Then
            u = 16
            Do While h2.Cells(u, "H") <> ""
                u = u + 1
            Loop
            h1.Range("A" & Target.Row & ":EX" & fila).Copy h2.Range("A" & u)
            h1.Cells(fila, "EY") = 1
        End If
        'copia a TTE+MTJ
        If Cells(fila, "AI") = "" And Cells(fila, "BF") = "" Then
            u = 16
            Do While h4.Cells(u, "H") <> ""
                u = u + 1
            Loop
            h1.Range("A" & Target.Row & ":DT" & fila).Copy h4.Range("A" & u)
            h1.Cells(fila, "EY") = 1
        End If
    End If
End Sub

.

'S aludos. Dante Amor. Recuerda cambiar la valoración a la respuesta. G racias

.

Avísame cualquier duda

.

Buenas noches Dante,

He estado probando la macro y la verdad es que va realmente bien. Tan sólo tengo una duda:

Me ocurre el caso que indicas en el ejemplo que dices. Es decir, una vez copiado el registro a la hoja que le toca, no se vuelve a "revisar" o "actualizar". Mi pregunta es, ¿se podría volver a copiar un registro que se ha modificado?

Es decir, si el último registro que he introducido en la hoja "General" es el 50 y ahora añado un comentario más a la celda CW del registro 21, ¿puedo volver a copiarla o parcialmente (imagino que copiarla entera resultaría más fácil)?

Los datos que introduzco en el libro pasan por una serie de estados que duran días y estos son susceptibles de ser modificados en cualquier momento.

Debo agradecerte enormemente tu trabajo, aun así me has ayudado muchísimo!

Un saludo.

Una pregunta más, si en propiedades de algunas celdas las bloqueo y posteriormente protejo la hoja, salta un error.

¿Existe alguna manera para que funcione con las hojas de destino protegidas? Al libro accederán varias personas y es susceptible de que "modifiquen" algo que no debiera en caso de estar desprotegida.

Gracias de nuevo!

Edgar

Con mucho gusto te ayudo con todas tus peticiones.

  • La macro sirve para enviar registros nuevos, para enviar actualizaciones, tienes que explicarme ciertas reglas, una regla sería, cómo identificar qué un registro está cambiando y cómo lo identifico en la hoja destino.
  • Crea otra pregunta para modificar la macro y pueda utilizar hojas protegidas.

Crea una nueva pregunta por cada petición. En el desarrollo de la pregunta escribe: "para Dante Amor". Ahí me describes con detalle lo que necesitas.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas