Se puede usar una macro para que solo cambie los datos de la fila donde se encuentre un dato especifico.

Bueno tengo un documento el cual busca datos con pero para poder cambiar los datos necesito copiar y usar pegado especial, digamos que cambio de fila después de escribir completado entonces lo que quiero es que al momento de escribir completado, me corra la macro de pegado especial en esa fácil y no en todo el documento, esto es posible eh buscado y no eh encontrado respuesta.

1 Respuesta

Respuesta
1

.09.03.17

Buenas tardes, Maicol

Si, eventualemente, te hubiera entendido bien, la siguiente rutina cuando encuentra que se ingresó la palabra Completado en una celda, copia y pega como valor -con Pegado Especial- toda la fila donde se estuviese esa celda. Luego me dirás si necesitas que sea más precisa respecto al rango de copia.

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)

Private Sub Worksheet_Change(ByVal Target As Range)
LaClave = "Completado" ' palabra que, una vez escrita, dispara la rutina que copia y pega como valor toda la fila donde está
If UCase(Trim(Target.Value)) = UCase(LaClave) Then
        Target.EntireRow.Copy
        Application.EnableEvents = False
        Target.EntireRow.PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        Application.EnableEvents = True
        Target.Select
End If
End Sub

Nota que, al principio del código, hay una variable por si quieres cambiar la palabra clave.

Prueba en una copia de tu hoja original para verificar que haga lo que esperas.

.

Excelente esto era lo que necesitaba, mis disculpas por mi pésima redacción, muchas gracias.

.

Todo bien, Maicol

Lo importante es que tengas lo que buscabas.

Un abrazo

Fer

.

Hola Fernando.

Bueno el día de hoy, la macro me genera "error 13 tiempo de ejecución", a que se debe, que puedo hacer para corregir el error?

Muchas Gracias

.

Hola, Maicol

Ese es un mensaje cuando los tipos de datos que ingresaste y el que evalua la macro no coinciden.

Debería saber que ingresas en la celda para que dé ese error.

Eventualmente, podría darse que ocurra cuando borras o insertas líneas también.

Por ello te envío esta variante que controla ambas situaciones:

Private Sub Worksheet_Change(ByVal Target As Range)
LaClave = "Completado" ' palabra que, una vez escrita, dispara la rutina que copia y pega como valor toda la fila donde está
If Target.Count = 1 Then
    If Application.WorksheetFunction.IsText(Target.Value) Then
        If UCase(Trim(Target.Value)) = UCase(LaClave) Then
                Target.EntireRow.Copy
                Application.EnableEvents = False
                Target.EntireRow.PasteSpecial Paste:=xlPasteValues
                Application.CutCopyMode = False
                Application.EnableEvents = True
                Target.Select
        End If
    End If
End If
End Sub

Espero que te resuelva el problema.

Abrazo

Fer

.

Tengo una duda adicional tu macro es perfecta corrige el error, pero si deseo que solo se active al ingresar la palabra sobre una columna especifica, osea que si ingreso la palabra en la columna b me active la macro, pero si lo escribo en la c no se active, que se le puede agregar.

.

Así es, señor.

Aquí va le código donde le agregué lo necesario para que haga ese control también:

Private Sub Worksheet_Change(ByVal Target As Range)
LaClave = "Completado" ' palabra que, una vez escrita, dispara la rutina que copia y pega como valor toda la fila donde está
'  
LaColu = "B" ' columna donde controlar el ingreso se la palabra clave
'  
If Target.Count = 1 And Target.Column = Range(LaColu & "1").Column Then ' aquí agregué ese control  
    If Application.WorksheetFunction.IsText(Target.Value) Then
        If UCase(Trim(Target.Value)) = UCase(LaClave) Then
            Target.EntireRow.Copy
            Application.EnableEvents = False
            Target.EntireRow.PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            Application.EnableEvents = True
            Target.Select
        End If
    End If
End If
End Sub

Como siempre, la columna es un dato que podrás manejar ingresando la letra en la variable que agregué al principio.

Abrazo!

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas