Insertar filas de una tabla1 a tabla2 en Excel mediante botón VB

Solicito de su apoyo para poder solucionar este problema, que no encuentro como resolver.
Tengo tabla1 donde se encuentran valores introducidos por mi y en la cual indico el numero de fila de mi tabla2 en la cual deseo pegar estos valores, pero solo de ciertas columnas.

Deseo que, mediante un botón al dar click me pase los datos establecidos de mi tabla1 a tabla2.
De mi tabla1 debe buscar el numero ingresado (addition order) e ir a mi tabla2 donde se encuentra ese número y pegar los valores de las columnas A.B.C.F.G.I, establecidos en mi tabla1, como se muestra en el ejemplo. Y así los otros 2 (6 &10).
Cabe mencionar que el numero de la fila la debe buscar de la tabla2 (ID) y no basarse del número de las filas de la hoja de Excel.

Tendrán alguna idea, porque solo he logrado pasar la fila completa pero no los datos en las columnas específicas, establecidas en tabla1 de acuerdo al ID que ingreso.

2 Respuestas

Respuesta
1

Excelente Dante!
Me ha ayudado demasiado a lo que necesitaba, solo que estado adecuando el código, pero no logro encontrar la forma de unificar los datos.
Me sirve bien cuando mi tabla2 inicia en la columna "A", los datos se acomodan correctamente.
Pero si mi tabla2 inicia en la columna "C" como es el caso de la imagen de abajo, los datos me los desplaza 2 lugares hacia la derecha, incrustando datos en la columna "N" que ya están fuera del rango de mi tabla2.
Perdona mi ignorancia, pero no he logrado recorrer los datos.
Saludos

Respuesta
1

Prueba el siguiente código. Utiliza tablas. Es más complicado que los rangos en la hoja, pero también es posible.

Ajusta en la macro el nombre de la hoja "A" y los nombres de las tablas.

Sub actualizar_tabla2()
  Dim listobj1 As ListObject, listobj2 As ListObject
  Dim f As Range, ao As Range
  Dim fila As Long, i As Long, j As Long, col As Long
  Dim headercol As String
  Dim valor
  Set listobj1 = Sheets("A").ListObjects("Tabla1")
  Set listobj2 = Sheets("A").ListObjects("Tabla2")
  For Each ao In listobj1.ListColumns("addition order").DataBodyRange
    i = listobj2.HeaderRowRange.Row
    Set f = listobj2.ListColumns("ID").DataBodyRange.Find(ao.Value, , xlValues, xlWhole, , , False)
    If Not f Is Nothing Then
      fila = f.Row - i
      For j = 2 To 7
        headercol = listobj1.HeaderRowRange.Cells(1, j)
        valor = ao.Offset(, j - 1)
        col = listobj2.ListColumns(headercol).Range.Cells(1).Column
        listobj2.DataBodyRange(fila, col).Value = valor
      Next
    End If
  Next
End Sub

Recomendaciones:

https://m.youtube.com/watch?v=HfFCtMl189U 

https://m.youtube.com/watch?v=f_x8pstpNqc&t=262s 

https://m.youtube.com/watch?v=PupmVvM16-8 

Sal u dos

Dante Amor

¡Gracia Dante!

Saludos

Una última duda con tu código Dante!

Me he estado liando y aun no doy con la solución:
Me sirve bien cuando mi tabla2 inicia en la columna "A", los datos se acomodan correctamente.
Pero si mi tabla2 inicia en la columna "C" como es el caso de la imagen de abajo, los datos me los desplaza 2 lugares hacia la derecha, incrustando datos hasta la columna "N" que ya están fuera del rango de mi tabla2.
Perdona mi ignorancia, pero no he logrado recorrer los datos.

Saludos 

Prueba lo siguiente:

Sub actualizar_tabla2()
  Dim listobj1 As ListObject, listobj2 As ListObject
  Dim f As Range, ao As Range
  Dim fila As Long, i As Long, j As Long, col As Long, k As Long
  Dim headercol As String
  Dim valor
  Set listobj1 = Sheets("A").ListObjects("Tabla1")
  Set listobj2 = Sheets("A").ListObjects("Tabla2")
  For Each ao In listobj1.ListColumns("addition order").DataBodyRange
    i = listobj2.HeaderRowRange.Row
    k = listobj2.HeaderRowRange.Column
    Set f = listobj2.ListColumns("ID").DataBodyRange.Find(ao.Value, , xlValues, xlWhole, , , False)
    If Not f Is Nothing Then
      fila = f.Row - i
      For j = 2 To 7
        headercol = listobj1.HeaderRowRange.Cells(1, j)
        valor = ao.Offset(, j - 1)
        col = listobj2.ListColumns(headercol).Range.Cells(1).Column - k + 1
        listobj2.DataBodyRange(fila, col).Value = valor
      Next
    End If
  Next
End Sub

Visita:

https://m.youtube.com/channel/UCs644-v3ti4SF7zE_bt_YXA 

Sal u dos

Dante Amor

Excelente Dante!
Eres un Master, ahora hace lo que necesito, de verdad mil gracias, me funciono a la perfección, pensé que no se podría hacer esto!
¡Gracias! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas