Saltar al contenido

Copiar celdas no adyacentes en otra hoja


Recommended Posts

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

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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?

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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!!!!

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

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

Enlace a comentario
Compartir con otras webs

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.

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 96 ¿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

  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Si  no me he liado con los paréntesis: Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False Application.Calculation = xlManual Application.EnableEvents = False If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then Range("E22") = WorksheetFunction.Sum(Range("E4:E21")) Range("E23") = WorksheetFunction.Sum(Range("E4:E19")) Range("E24") = Range("E23") - WorksheetFunction.Sum(Range("I4:I7")) Range("I22") = WorksheetFunction.Sum(Range("I4:I21")) Range("I4") = Range("E23") * 0.1 Range("I5") = Range("EN10") * Range("EN11") Range("I6") = Range("E23") * 0.0127 Range("I7") = Range("E23") * 0.006 Range("I25") = Range("E22") - Range("I22") Range("I12") = Range("E24") * 0.03 Range("C7") = Range("EQ8") - Range("EQ9") + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16") Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19") Range("E7") = Range("E4") / Range("C4") * 7 / 44 * 1.5 * Range("C7") Range("E8") = Range("E4") / Range("C4") * 7 / 44 * 0.3 * Range("C8") Range("E9") = Range("E4") / Range("C4") * 7 / 44 * 1.3 * 1.5 * Range("C9") End If Application.Calculation = xlAutomatic Application.ScreenUpdating = True Application.EnableEvents = True End Sub  
    • Hola de nuevo a ambos, @daren, tu archivo lleva excesivos datos, que creo no son necesarios para la información final que buscas. Te subo otro archivo, simplificado al máximo, que, si lo he entendido bien, con esta fórmula simplificada: =CONTAR.SI('Casos de Prueba'!I:I;"OK")*('Casos de Prueba'!I1="Resultados Ciclo "&COLUMNA(A5)) se calcularía el primer dato, que se encuentra en la columna I. Copiando la fórmula a la derecha las celdas que necesites, se completaría el rango.  Tu fórmula la coloco en D7, y esta nueva en D9, que como ves (si, repito, he interpretado bien lo que buscas), da los mismos resultados. ---------------------------------------------------------------- En cuanto a: Aquí tienes, en el mismo archivo (Hoja 3) lo que devuelve tu fórmula cuando hay un determinado dato en A1 y en B2. No llego a entender qué es lo que quieres exactamente.  Tal vez con una pequeña explicación de lo que esperas obtener, sea suficiente para poner el hilo a la aguja. ? ----------------------------------------------------------------- En el caso de que falte por añadir o evaluar alguna otra variable o parámetro (en tu primer post hablabas sólo de 'OK' y ahora veo que en el archivo figuran además 'KO' y 'BLOCK'), por favor, intenta emular el ejemplo del archivo que estoy subiendo; añade EXCLUSIVAMENTE esos datos en la hoja allá donde proceda, explicando dónde o cómo deben contarse o sumarse. Mejor trabajar siempre con datos anónimos y reducidos. Desconozco si en tu archivo alguno de esos datos puede considerarse confidencial, pero seguro que no interesan a nadie. Mucho mejor obviarlos. Saludos, Plantilla V3 (B).xlsx
    • buenas noches, quisiera saber si puedo mejorar mi macros que se encuentra en el evento change de la hoja de calculo de Excel, son códigos de cálculos básicos, además si me pudieran ayudar a reducir el código o darme algún tip para reducirlo yo mismo estaría muy agradecido.  de ante mano muchas gracias     Private Sub Worksheet_Change(ByVal Target As Range)     Application.ScreenUpdating = False     Application.Calculation = xlManual     Application.EnableEvents = False              If Not Intersect(Target, Range("$L$5:$Y$9")) Is Nothing Then             Sub todo()          Range("E22") = WorksheetFunction.Sum(Range("E4:E21"))     Range("E23") = WorksheetFunction.Sum(Range("E4:E19"))     Range("E24") = WorksheetFunction.Sum(Range("E23") - WorksheetFunction.Sum(Range("I4:I7")))     Range("i22") = WorksheetFunction.Sum(Range("I4:I21"))     Range("I4") = Range("E23") * 0.1     Range("I6") = Range("E23") * 0.0127     Range("I5") = Range("EN10") * Range("EN11")     Range("I7") = Range("E23") * 0.006     Range("I25") = Range("E22") - Range("I22")     Range("I12") = Range("E24") * 0.03     Range("C7") = WorksheetFunction.Sum(Range("EQ8") - (Range("EQ9"))) + Range("EN13") + Range("EN14") + Range("EN15") + Range("EN16")     'Range("E7") = WorksheetFunction.Sum(Range("C7") * ((Range("E4") * 0.0077777)))     Range("C9") = Range("EQ9") + Range("EN17") + Range("EN18") + Range("EN19")     'Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 1.3) * 1.5) * Range("C9")     'Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 45) * 0.3)) * (Range("C8"))     Range("E9") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 1.3) * 1.5) * Range("C9")     Range("E8") = WorksheetFunction.Sum(((((Range("E4") / Range("C4")) * 7) / 44) * 0.3)) * (Range("C8"))     Range("E7") = WorksheetFunction.Sum((((Range("E4") / Range("C4")) * 7) / 44) * 1.5) * Range("C7")          End Sub              End If                  Application.Calculation = xlAutomatic     Application.ScreenUpdating = True     Application.EnableEvents = True     End Sub
    • Buenas perdonad la espera adjunto el fichero Excel y explico mas detallado lo que me solicitan: Lo que me solicitan es que esos CP de la pestaña Casos de prueba los cuales tienen formulas para que cuando se copien y peguen junto a sus pasos el CP se va autoincrementando a 1,2,3 etc...., pero si copias ese CP bien solo con el primer paso o con todos sus  pasos y lo insertas entre dos CP no continua con la numeración, como se ve en la foto al hacer eso el CP insertado continua con la numeración CP2 y el de abajo pone también CP2 no se incrementa ni ese ni el valor de CU que hay a la derecha que también es incremental. Necesitaría que continuara con esa numeración aun insertándolo entre medio de 2 tanto el CP como el CU de la derecha. También me solicitan que el campo Ciclo 1 de la pestaña Resumen es auto incremental cuando copias y pegas va sumando 1, pero en las formulas referentes a Ok KO Y bloqueo al copiar y pegar se mantiene la misma formula , la idea es que cuando copies y pegues la fila donde están los ciclos se autoincremente Ciclo a 1,2,3,4 etc... y la formula de los campos OK,KO y Bloqueos se incremente también pasando de la columna I a la J  luego a la k etc... y que en Resultados Ciclo el numero de la formula también se incremente Resultados Ciclo 1 , 2 ,3 etc... que cambie la columna a la vez que el numero de Resultados Ciclo. Gracias por adelantado un saludo. Plantilla v3 Pruebas.xlsx  
    • Saludos amigos espero estén bien Estoy intentando hacer un formulario que me convierta unidades de masa sin embargo  en el mejor de los casos solo he podido lograr la conversión de una unidad a la vez en los TextBox 1, 3, 5, 7, 9, 11 y 13 y cuando lo logro el resultado que se copia  en la celda no se corresponde con el obtenido originalmente en el Textbox del Formulario (frmconv)  ejemplo al convertir 1900 Kg a Lb el resultado en el TextBox1 =4188,78298142 sin embargo al guardar el resultado lo que se copia en la Celda  "F11" es  418.878.298.142,00, adicionalmente el resultado de la conversión no se visualiza inmediatamente por lo que debo de hacer click en los TextBox 1, 3, 5, 7, 9, 11 y 13  para ver el resultado. Mucho les sabre agradecer la ayuda que me puedan brindar. PRUEBA.xlsm
  • 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.