¿Te atreves a demostrar lo que sabes resolviendo alguno de estos
temas abiertos/no resueltos?

Macro para pasar da...
 
Compartir:
Avisos
Vaciar todo

Macro para pasar datos de una fila a otra hoja dependiendo del contenido de la celda  

Página 1 / 2
  RSS
JavierPuche
(@javierpuche)
Miembro activo Registered

Hola buenos días,

Me gustaría saber como realizar una macro para que, dependiendo del contenido de una celda, me copie toda la fila a una nueva hoja automáticamente.

Por ejemplo, si en la celda J7 del Excel que comparto, pongo "HANGAR" al presionar enter me copie toda la fila en la hoja "Arrastre_Hangar"

Un saludo y agracias de antemano 🙂

Citar
Respondido : 22/11/2020 1:05 pm
MacroMaster
(@macromaster)
Miembro activo Registered

Lo primero que tienes que hacer es determinar que la celda cambiada es la J7 usando el evento change de la hoja en cuestión. Si además, cumple que el valor de dicha celda es el que quieres, llamar a la rutina de copiado.

Determina la fila en la que debes insertar los datos de la hoja de destino.

Realiza el copiado de los datos.

ResponderCitar
Respondido : 23/11/2020 8:06 am
JavierPuche
(@javierpuche)
Miembro activo Registered

@macromaster,

Muchas gracias por tu respuesta, entiendo bien todo lo que me comentas pero soy bastante inexperto en este mundillo 🙁 

Me podrías poner un ejemplo de la formula que debería de aplicar?¿

 

Un saludo y gracias

ResponderCitar
Respondido : 23/11/2020 6:01 pm
JavierPuche
(@javierpuche)
Miembro activo Registered

@macromaster,

He pensado que podría ser algo asi:

 

If Range("J7").value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy

Sheets("Arrastre_Hangar").Select

Range("A29").Select

ActiveSheet.Paste

 

Seria lago así?

 

Un saludo, 

 

 

 

ResponderCitar
Respondido : 24/11/2020 8:25 pm
JavierPuche
(@javierpuche)
Miembro activo Registered
Respondido por: @javierpuche

@macromaster,

He pensado que podría ser algo asi:

 

If Range("J7").value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy

Sheets("Arrastre_Hangar").Select

Range("A29").Select

ActiveSheet.Paste

 

Seria lago así?

 

Un saludo, 

 

 

 

O en su defecto, he creado una macro aparte en la que al introducir los datos, me copia la fila en la otra hoja. Seguidamente en la hoja principal le digo:

If Range("J6").Value = "Hangar" Then

Call Macro1 (es la que me copia los datos en otra hoja)

End If

 

ResponderCitar
Respondido : 24/11/2020 9:27 pm
RET
 RET
(@ret)
Miembro Admin

@javierpuche,

Cualquiera de los dos métodos es bueno. La cuestión es como quieres que se ejecute: vas a lanzarla tu cuando quieras, o quieres que se ejecute automáticamente al escribir "Hangar" en J6 (en un post pones J7 y en el otro J6: es por algún motivo?)

IMF_RET

https://InformaticaMuyFacil.com

ResponderCitar
Respondido : 25/11/2020 7:19 am
MacroMaster
(@macromaster)
Miembro activo Registered

Como dice RET, cualquier forma te sirve. Todo depende de lo que quieras hacer. Si quieres rellenar los datos y manualmente pedir que los copie ene le destino, con eso te vale, aunque te los va a copiar siempre en el mismo sitio, sobre los anteriores. Si lo que quieres es que sea de forma automática tendrias que usar el evento Worksheet_Change de la hoja en que escribes los datos y comporbar que has escrito Hanar en la celda J7 para llamar a la rutina de copia.

Espero te sirva

ResponderCitar
Respondido : 25/11/2020 4:07 pm
JavierPuche
(@javierpuche)
Miembro activo Registered

@ret

@ret,

Hola RET, como veras, yo tengo una macro ya realizada para la entrada de paquetes, esta se ejecuta cuando presiono ENTER en la celda "J7" automáticamente. La idea es que al introducir "Hangar" en la celda "H7" y finalice la entrada del paquete presionando enter en la celda "J7", esta entrada me la copie en la hoja actual y en la hoja llamada "Arrastre_Hangar".

 

Intento aplicar el código de antes y me marca en amarillo el siguiente error (marcado en negrita):

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("H7").Value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy

Sheets("Arrastre_Hangar").Select

Range("A8").Select

Selection.Paste

End If

 

Adjunto el excel para que puedas comprobar

 

Un saludo y gracias,

ResponderCitar
Respondido : 25/11/2020 6:49 pm
JavierPuche
(@javierpuche)
Miembro activo Registered
Respondido por: @javierpuche

@ret

@ret,

Hola RET, como veras, yo tengo una macro ya realizada para la entrada de paquetes, esta se ejecuta cuando presiono ENTER en la celda "J7" automáticamente. La idea es que al introducir "Hangar" en la celda "H7" y finalice la entrada del paquete presionando enter en la celda "J7", esta entrada me la copie en la hoja actual y en la hoja llamada "Arrastre_Hangar".

 

Intento aplicar el código de antes y me marca en amarillo el siguiente error (marcado en negrita):

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("H7").Value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy

Sheets("Arrastre_Hangar").Select

Range("A8").Select

Selection.Paste

End If

 

Adjunto el excel para que puedas comprobar

 

Un saludo y gracias,

A esto me faltaría como bien dice @MacroMaster, decirle que me inserte una fila en la hoja "arrastre_hangar" para que no se solapen las entradas.

ResponderCitar
Respondido : 25/11/2020 6:51 pm
RET
 RET
(@ret)
Miembro Admin

@javierpuche,

Te falta de identificar completamente el rango A8. Cámbialo por

Sheets("Arrastre_Hangar").Range("A8").Select

En general es buena costumbre identifcar siempre hoja y rango para evitar este tipo de errores.

Mírate esto: Buenas prácticas en VBA

 

IMF_RET

https://InformaticaMuyFacil.com

ResponderCitar
Respondido : 25/11/2020 7:24 pm
JavierPuche
(@javierpuche)
Miembro activo Registered

@ret

Perdona pero sigue sin funcionarme..:(

Te adjunto el excel a ver si detectas el error que cometo.

Me da error 1004 (error en el método Select de la clase Range.

 

Saludos,

 

 

ResponderCitar
Respondido : 25/11/2020 9:18 pm
RET
 RET
(@ret)
Miembro Admin
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("H7").Value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy Destination:=Hoja3.Range("A8")

End If

IMF_RET

https://InformaticaMuyFacil.com

ResponderCitar
Respondido : 25/11/2020 9:44 pm
JavierPuche
(@javierpuche)
Miembro activo Registered

@ret

Me sabe fatal insistir pero esa formula me plantea un nuevo problema.

Al insertar "Hangar" en la celda, presiono enter para introducir "día de entrega y observaciones" pero me salta a la selección de la fila ("A7:J7").

Por otro lado no se como hacer para que me inserte linea en la "hoja3" para que no se solapen las entradas .

Te aseguro que lo he intentado de todas las maneras que se me ocurren y he investigado bastante pero no condigo dar con ello...si me pudieras dejar esos 2 pasos hechos te lo agradecería muchísimo! ya que con eso daría por finalizado el excel.

Espero que no sea mucho pedir 🙂

 

Un saludo,

ResponderCitar
Respondido : 26/11/2020 8:59 pm
RET
 RET
(@ret)
Miembro Admin

@javierpuche,

 

Cuando insertas Hangar en la celda H7 de la hoja Entrada_Palau te selecciona la fila A7:H7 porque es lo que le dices que haga en el evento Worksheet_Change:

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("H7").Value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy Destination:=Hoja3.Range("A8")

End If

End Sub

Con respecto a como hacer que te inserte línea, te recomiendo que uses el grabador de macros. Ponlo en marcha, inserta una fila, páralo y analiza el código que te genera. Yo lo he hecho y genera esto:

Sub Macro1()
'
' Macro1 Macro
'

'
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Con este punto de partida, modifícalo según tus necesidades.

Tienes un artículo en el blog sobre como usar el grabador de macros. Echale un vistazo.

Usar el grabador de macros

Usar el grabador de macros (Parte II)

 

Saludos,

IMF_RET

https://InformaticaMuyFacil.com

 

 

ResponderCitar
Respondido : 28/11/2020 12:50 pm
JavierPuche
(@javierpuche)
Miembro activo Registered

@ret,

Entiendo lo que me quieres decir.

Entonces como debería ser para que me deje rellenar los campos que faltan antes de ejecutar la macro?

En cuanto a lo de insertar linea, ya conocía el código para ello ya que lo tengo en otra macro ya realizada pero no se como aplicarla en este caso. Al estar escribiendo el código en la hoja principal, me insertaría la fila en esa misma hoja. Se me ocurre lo siguiente:

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("H7").Value = "Hangar" Then

Range("A7:J7").Select

Selection.Copy Destination:=Hoja3.Range("A8")

Sheets("Arrastre_Hangar")

Rows("8:8").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If

End Sub

Saludos,

 

ResponderCitar
Respondido : 28/11/2020 1:45 pm
Página 1 / 2

Dejar una respuesta

Nombre del autor

Correo electrónico del autor

Título *

 
Vista previa 0 revisiones Guardado