** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Agregar fila y pegar clipboard en Tabla Excel
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAgregar fila y pegar clipboard en Tabla Excel

 Responder Responder
Autor
Mensaje
Delarc Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 03/Marzo/2007
Localización: Argentina
Estado: Sin conexión
Puntos: 261
Enlace directo a este mensaje Tema: Agregar fila y pegar clipboard en Tabla Excel
    Enviado: 04/Enero/2021 a las 17:34
Quisiera aprovechar las ventajas de las Tablas Excel.
Pero no logro solucionar esta tarea:

Copio al clipboard cierto contenido de mi hoja activa:

Range("F3:F19").Select
Selection.Copy

Ahora pretendo pegar esos datos en una nueva fila de una Tabla que está en otra Hoja.
Para acceder a la tabla y agregarle una nueva fila, uso:

Range("NombreTabla").ListObject.ListRows.Add

Hasta aquí funciona bien.
Ahora el problema es como Pegar el contenido del clipboard en esa fila creada.
La idea es usar algo como:

PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True

Pero encontré que para usar PasteEspecial debo resignar las ventajas de la Tabla y tratarla como a un "rango común", usando un código así:

Sheets("NombreHojaTablaDestino").Select
Range("B3").Select 'sería la celda superior izquierda de la Tabla
Selection.End(xlDown).Select 
If ActiveCell.Value <> "" Then ActiveCell.Offset(1, 0).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=True

¿Alguna pista?


Editado por AnSanVal - 08/Enero/2021 a las 00:44
Saludos desde La Plata, Argentina
Arriba
SkaryBlondi Ver desplegable
Habitual
Habitual


Unido: 24/Octubre/2020
Localización: Asturias
Estado: Sin conexión
Puntos: 89
Enlace directo a este mensaje Enviado: 04/Enero/2021 a las 18:12
Buenas tardes

Puedes probar con

Sheets("HojaDestino").Range("RangoDestino") = Sheets("HojaOrigen").Range("RangoOrigen").Value

Saludos,
Arriba
Delarc Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 03/Marzo/2007
Localización: Argentina
Estado: Sin conexión
Puntos: 261
Enlace directo a este mensaje Enviado: 04/Enero/2021 a las 20:35
Hola, 

Gracias por tu sugerencia, pero con ese método debo indicar la HOJA y el RANGO donde pegar los datos. Lo que intento hacer es aprovechar las "ventajas" de la Tabla Excel, que entre otras cosas, permite mover la tabla de lugar, agregarle filas y/o columnas, sin tener que corregir el código.

Saludos
Saludos desde La Plata, Argentina
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 05/Enero/2021 a las 02:51
¿Quieres aprovechar las «ventajas» de la tabla y pierdes recursos seleccionando rangos?

Desde la hoja de la tabla (da igual en que rango esté la tabla):

Sub TransponerEnTabla()
  Worksheets("Hoja1").Range("F3:F19").Copy
  Cells(Rows.Count, [Tabla1].Column).End(xlUp).Offset(1). _
      PasteSpecial Paste:=xlPasteValues, Transpose:=True
End Sub


Saludos desde Tenerife.
Arriba
SkaryBlondi Ver desplegable
Habitual
Habitual


Unido: 24/Octubre/2020
Localización: Asturias
Estado: Sin conexión
Puntos: 89
Enlace directo a este mensaje Enviado: 05/Enero/2021 a las 13:56
Por dar un apunte transversal

Yo personalmente huyo de las tablas en Excel ya que para eso está access y además si hay muchos registros penaliza mucho el rendimiento.

Si hay captura manual de datos existe la opción de validación de datos para evitar duplicados y si es una importación normalmente lo cargo en una hoja temporal para eliminar duplicados, ordenar y copiar a la hoja de destino.

Como indicaba AnSanVal en Excel se puede saber fácilmente la última fila y/o columna de la hoja seleccionada y a partir de ahí definir rangos y tomar decisiones.

Feliz año nuevo y que le den al 2020

Saludos,

Arriba
Delarc Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 03/Marzo/2007
Localización: Argentina
Estado: Sin conexión
Puntos: 261
Enlace directo a este mensaje Enviado: 05/Enero/2021 a las 14:52
Hola AnSanVal!

Sí, mas o menos eso es lo que estoy haciendo ahora y funciona perfecto.

Lo que pretendo es aprender como el IntelliSense (o como se llame) del Excel, que con un simple .Add le agrega una nueva Row a la Tabla sin importar donde ésta se ubique en el Libro, podría después pegarle datos. Me extraña que para esto último, todas las soluciones requieren especificar la hoja donde se halla la Tabla. De la única manera que lo puedo hacer es recorriendo la fila celda por celda y no en un "paquete" como lo hace el PasteEspecial. Quizás no lo han hecho para cuidar que si le agregas columnas a tu Tabla los datos se acomoden correctamente.

A propósito, en tu código el Offset(1) hace que si la tabla está sin datos (es decir, sólo es el encabezado y una primera fila vacía) los datos se peguen en la primera fila abajo de la tabla... y no son parte de la Tabla. 
Saludos desde La Plata, Argentina
Arriba
Delarc Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 03/Marzo/2007
Localización: Argentina
Estado: Sin conexión
Puntos: 261
Enlace directo a este mensaje Enviado: 05/Enero/2021 a las 14:54
Sí, yo adoro las tablas... 
"En el Libro de la Vida la página de los gustos permanece el blanco"... jeje
Buen año !
Saludos desde La Plata, Argentina
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 05/Enero/2021 a las 23:01
Delarc.- «... en tu código el Offset(1) hace que si la tabla está sin datos (es decir, sólo es el encabezado y una primera fila vacía) los datos se peguen en la primera fila abajo de la tabla... y no son parte de la Tabla...»

- ¡Efectivamente!, está pensado para que la tabla esté iniciada y simplificar el proceso, no siendo necesario añadir previamente una fila a la tabla. Si (por la razón que sea) prefieres añadir la fila con ...ListRows.Add, eliminas Offset(1) y «muerto el perro se acabó la rabia». Wink


SkaryBlondi.- «... Yo personalmente huyo de las tablas en Excel ya que para eso está Access y además si hay muchos registros penaliza mucho el rendimiento...»

- Para gustos colores, para mi las tablas Excel son muy valiosas y versátiles.
- También Access si tiene «muchos registros»  da problemas, aunque indudablemente, «muchos» (concepto relativo) tiene diferente valor para Access que para Excel. 


Saludos desde Tenerife.
Arriba
Delarc Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 03/Marzo/2007
Localización: Argentina
Estado: Sin conexión
Puntos: 261
Enlace directo a este mensaje Enviado: 07/Enero/2021 a las 23:56
Hola amigos, encontré esta solución:

Copio al clipboard datos de la HojaActiva

Range("f3:f19").Copy

Luego Pego esos datos en la TablaPrueba que NO ESTÁ en la HojaActiva, con estas líneas:

With Range("TablaPrueba") 
        .Cells(.Rows.Count, 1).PasteSpecial xlPasteValues, Transpose:=True
        .ListObject.ListRows.Add
End With

Parece funcionar, pero me gustaría que lo evalúen personas con mas experiencia...


Editado por Delarc - 07/Enero/2021 a las 23:57
Saludos desde La Plata, Argentina
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5970
Enlace directo a este mensaje Enviado: 08/Enero/2021 a las 00:43
Si funciona... y te gusta, no hay más que hablar.


Saludos desde Tenerife.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable