
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
.