Saltar al contenido

Copiar celdas no adyacentes en otra hoja


Recommended Posts

publicado

Buenos días amigos foristas, un cordial saludo!!

Acudo a ustedes con a pedirles ayuda con una macro. He tratado de hacerlo grabando macro pero no funciona, no  logro el objetivo deseado. Hay que hacerle alguna modificación al código. Les explico.

Tengo 2 hojas “INGREDIENTE” Y “EQUIPO”

En EQUIPO voy agregando datos por fila, se hacen varios cálculos y en la columna K obtengo un valor. La macro debe activarse automáticamente cuando el valor  de la columna K sea mayor a cero (0).

La macro debe copiar de EQUIPO el dato ingresado en la columna A y la columna K (éste solo valor, sin formato original) y pegarlos en la primera fila disponible de INGREDIENTE, el dato de la columna A en la columna A y el dato de la columna K en la columna J, luego lanzar un mensaje indicando que debe terminar de llenar la información del ingrediente, y la celda activa debe quedar en la columna B de ese dato que se acaba de copiar.

 Agradezco mucho su valiosa colaboración.

EJEMPLO PARA AYUDA EXCEL-1.xlsm

publicado

Hola, prueba asi.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Or Target.Column = 11 Then
Dim ult, ult1 As Long
ult = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1
ult1 = Hoja1.Range("J" & Rows.Count).End(xlUp).Row + 1
If Target.Column = 1 Then
Hoja1.Range("A" & ult) = Target.Value
MsgBox "debe de terminar de llenar la informacion"
Hoja1.Select
Hoja1.Range("B" & ult).Select
End If
If Target.Column = 11 Then
Hoja1.Range("J" & ult1) = Target.Value
MsgBox "debe de terminar de llenar la informacion"
Hoja1.Select
Hoja1.Range("B" & ult1).Select
End If
End If
End Sub

 

Un saludo.

publicado
Hace 4 horas, Toldeman dijo:

Hola, prueba asi.

Hola Juan, gracias por la respuesta.

Esta bastante cercano a lo que necesito, Le hice unos cambios:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Or Target.Column = 11 Then
Dim ult, ult1 As Long
ult = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1
ult1 = Hoja1.Range("j" & Rows.Count).End(xlUp).Row + 1
If Target.Column = 1 Then
Hoja1.Range("A" & ult) = Target.Value
End If
If Target.Column = 11 Then
Hoja1.Range("j" & ult1) = Target.Value
Hoja1.Select
MsgBox "debe de terminar de llenar la informacion"
Hoja1.Range("B" & ult1).Select
End If
End If
End Sub

Pero el detalle es que la macro se activa al introducir manualmente valor en la columna K de EQUIPO.

 Como K es una fórmula, la macro debe activarse cuando K sea mayor a cero (0).

Eso seria lo que hay que modifcar. como lo haria?

publicado

Hola.

Prueba este codigo.

	Private Sub Worksheet_Change(ByVal Target As Range)
Dim ult, ult1 As Long
On Error Resume Next
ult = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1
ult1 = Hoja1.Range("j" & Rows.Count).End(xlUp).Row + 1
If Target.Column = 1 Then
Hoja1.Range("A" & ult) = Target.Value
End If
If Application.Intersect(Target, Range("J2:J15")) Then
Hoja1.Range("j" & ult1) = Hoja3.Range("K" & Target.Row).Value
Hoja1.Select
MsgBox "debe de terminar de llenar la informacion"
Hoja1.Range("B" & ult1).Select
End If

Basicamente se ejecuta cuando escribes valores en la columna A y la columna J.

Cuando lo hace en la columna j te arroja el valor que tienes en la formula K.

 

Un saludo.

publicado
Hace 6 horas, Toldeman dijo:

Hola.

Prueba este codigo

Hola Juan, gracias por responder.

Probé la nueva macro que me envías, pero no funciona. Te comento lo que hace.

Cada vez que ingreso dato en la fila, desde B hasta J me lanza el mensaje del MSGBOX y la celda activa en INGREDIENTE avanza una fila. Cuando ingreso dato en la columna A de EQUIPO si lo coloca en la primera fila disponible, y como va la celda activa va avanzando como dije antes, finalmente el valor de K lo coloca 8 fila abajo.

publicado

Buenas tardes, perdona no revise la macro.

 

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ult, ult1 As Long
Dim rng As Range
Set rng = Application.Intersect(Target, Range("J2:J15"))
On Error Resume Next
ult = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1
ult1 = Hoja1.Range("j" & Rows.Count).End(xlUp).Row + 1
If Target.Column = 1 Then
Hoja1.Range("A" & ult) = Target.Value
End If
If Not rng Is Nothing Then
Hoja1.Range("j" & ult1) = Hoja3.Range("K" & Target.Row).Value
Hoja1.Select
MsgBox "debe de terminar de llenar la informacion"
Hoja1.Range("B" & ult1).Select
End If
End Sub

 

Prueba ahora.

 

Saludos.

publicado

Hola Juan, como estás.

Cuando ejecuto la macro en el archivo real no corre bien. Las hojas tienen otras macros. parece que chocan. Te parece si te envio el archivo real con las macros existentes??

publicado
En 18/2/2020 at 1:49 , Toldeman dijo:

Mandamelo, lo unico que hasta mañana no puedo mirarlo

Hola Juan buenos días.

Como te comenté la última vez, anexo te envío el archivo real en donde copié el código que me enviaste el cual está muy cercano a la solución esperada pero cuando lo copio en el archivo real hace unos pasos no esperados. Cada hoja tiene unas macros y parece que hay conflicto al ejecutarlos Te los comento detalladamente:

La hoja CONSUMO ENERGÍA tiene 3 macros que se activan por medio de botones. 1) para insertar una fila nueva, la cual es una copia de la fila 5 oculta. 2) para ordenar alfabéticamente la información tomando como referencia la columna A y 3) para eliminar una o varias filas. Adicionalmente tiene una macro en la hoja para impedir el cambio de nombre de la hoja.

La hoja PRECIOS INGREDIENTES tiene 2 macros que se activan por medio de botones. 1) para ordenar alfabéticamente la información tomando como referencia la columna A y 2) para ir a la primera fila disponible. Adicionalmente tiene una macro en la hoja para impedir el cambio de nombre de la hoja y un combo para que la lista desplegable que hay en la hoja pueda buscar de manera predictiva el dato requerido.

Una vez copiado tu código, sucede lo siguiente:

1 Al insertar una nueva fila en CONSUMO ENERGIA, me sale el MSGBOX “debe terminar de llenar la información” 3 veces (que debería aparecer esto en este código), el cuarto MSGBOX es el que tiene estipulado el código “Ingrese detalles del equipo” luego me envía a la hoja PRECIOS INGREDIENTES en A7 (no lo estipula es código de insertar fila). Adicionalmente en la 3 primeras filas disponibles al final de PRECIOS INGREDIENTES, coloca en la columna J el valor cero (0). Luego me voy a CONSUMO ENERGIA a terminar de llenar los detalles, lleno columna A, B, H y cuando lleno J se va a PRECIOS INGREDIENTES. Aquí si colocó el dato de CONSUMO ENERGIA en la primera fila disponible pero el dato de la columna K lo coloca 3 filas mas abajo y la celda activa no queda donde debería. El mensaje que debe terminar de llenar la información si aparece.

2 con el botón de ordenar alfabéticamente aparentemente no hay conflicto.

3 con el botón de eliminar fila me sale el mensaje de “debe terminar de llenar la información” elimina la fila, me da mensaje de que se hizo la eliminación satisfactoriamente pero luego se va a PRECIOS INGREDIENTES y la celda activa queda ubicada en la Columba B mas un poco mas abajo.

Agradecido de antemano por tu ayuda

RECETA AYUDA EXCEL EQUIPO.xlsm

publicado
En 11/2/2020 at 11:04 , Antoni dijo:

Si no te lo solucionan antes, mañana le echo un vistazo y te digo algo.

Hola @Antoni, buenas tardes, aludiendo a tu comentario del pasado 11/2, podrías por favor verlo, en mi penúltimo post está el archivo real, pero la solución brindada Juan tiene unos inconvenientes. Agradecido de antemano por tu valiosa ayuda!!!!

publicado

Buenos dias leonardo, he estado de viaje unos dias y ahora estoy poniendome al dia del trabajo acumulado en la oficina.

Vi tu archivo por encima, cuando tenga un rato lo reviso.

Si quieres para que no tengas el problema de que se dispare la macro al cambiar el valor de la celda se puede hacer con otro boton o con alguno de los que ya tienes.

Ya me dices algo.

Un saludo.

publicado
Hace 41 minutos , Toldeman dijo:

Si quieres para que no tengas el problema de que se dispare la macro al cambiar el valor de la celda se puede hacer con otro boton o con alguno de los que ya tienes.

Hola Juan que tal. También sirve. En este caso que sería manual, sería conveniente un mensaje que indique al usuario que debe seleccionar (que se supone siempre va a ser último el equipo para trasladar la información  a precios ingredientes y que quede la celda activa en B de ingredientes y otro mensaje indicando terminar de llenar los datos. Cuando lo envies lo reviso. Gracias

publicado
Hace 4 horas, Leonardo Briceño dijo:

sería conveniente un mensaje que indique al usuario que debe seleccionar (que se supone siempre va a ser último el equipo para trasladar la información  a precios ingredientes

Este mensaje pudiera aparecer al introducir la información en la última columna RENDIMIENTO.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Hola nuevamente. Por eso la importancia de lo que mencionas tú como "ruta relativa". Tal cual comentas, y aún sin llegar a algunos detalles importantes para ayudarte, en realidad tal cual te comenté le día miércoles, pues sí podías hacer como comentabas, era cosa de obtener los Id de Windows (como tú los llamas) y la ruta de OneDrive en casa usuario y eso sí se puede obtener con VBA y luego pasarlo a PQ, pero medio que te cerraste en que "PQ no puede trabajar con rutas relativas", cosa cierta pero siempre hay formas. Si SAP puede o no guardar en OneDrive o SharePoint, pues si está mapeado en la PC ¡claro que se puede! Pero bueno, creo que si te es útil tu propia propuesta ¡avanza con eso!
    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.