Llenar una tabla a partir de dos

Hola. Necesito que automáticamente una tabla se vaya nutriendo a partir de otras dos. En ambas los campos de las columnas son iguales, sin embargo la fuente de los datos son distintas, por eso necesito una tabla madre que junte todo.

Gracias

1 Respuesta

Respuesta
1

Podrías mandarme el fichero con ejemplos para saber que es lo que hay que hacer exactamente. A primera vista eso no se puede hacer con funciones normales, será necesaria una macro. Pero antes tengo que entender exactamente lo quien quieres hacer.

Mi correo es [email protected]

Pon com asunto el título de la pregunta y como nombre del fichero algo alusiva a la pregunta, por ejemplo

LlenarTablaDeDos.XLSX

(O XLSM o la terminación que tenga)

Algunas preguntas y algunas impresiones antes de ponerme.

¿Cómo apilamos los registros en la tabla madre, tal como se vayan creando o los ponemos con algún tipo de orden?

¿Se admiten dos registros con el mismo ID o no?

De la respuesta que me des depende mucho como se tiene que hacer. Si no se admiten 2 ID iguales cabe la posibilidad de modificar, en caso contrario una modificación se consideraría un registro nuevo. Se puede armar un buen lio entonces. La modificación automática puede parecer lo mejor pero es difícil de implementar cuando el registro tiene más de una columna. ¿Cuando se pasa el registro a la tabla madre, nada más que se modifica una columna o cuando se modifica una en concreto, pero si esa columna no se modifica en ese registro entonces nunca va a la tabla madre.

Es por eso que te digo que es mucho mejor que no sea automática. Se pone un botón y cuando se pincha se fabrica la table madre entera, eso es lo mejor, ahí quedan perfectamente sincronizadas las dos tablas y la madre, de otra forma pueden ser contradictorias.

¿También veo que hay mes y año, serían esos los campos por los que ordenar la tabla madre?

Espero contestación a las preguntas, ya que el problema se puede enfocar desde tantos puntos de vista que no voy a comenzar hasta saber mejor qué hay que hacer.

Hola!.

Respondiendo una a una tus preguntas:

1. ¿Como apilamos los registros en la tabla madre, tal como se vayan creando o los ponemos con algún tipo de orden?

Los registros se irán apilando en la Tabla Madre a medida que se vayan agregando ID's a las tablas 1 y 2. El orden no es importante.

2. <em style="line-height: 1.5em;">¿Se admiten dos registros con el mismo ID o no?

No, ya que cada ID tiene asignado un modelo, fecha, precio, etc.

3. ¿También veo que hay mes y año, serían esos los campos por los que ordenar la tabla madre?

No, no es relevante que haya un orden por año o mes, ya que simplemente después se pueden ordenar o filtrar. A partir de la Tabla Madre la idea es generar informes.

Nuevamente te agradezco tu ayuda, cualquier cosa me avisas.

Espera, tengo un problema increíble con mi Excel que impide usar el evento Worksheet_Change, el cual es necesario para hacer la tarea que queremos de forma automática. Manda si quieres la pregunta de nuevo al tablón, porque yo no sé si voy a poder soluciones eso en breve tiempo, aunque nada más que lo solucionara te contestaría.

Bien es cierto que a mí me desaparece el historial de Deshacer tras ejecutar la macro. Pero sin duda es un problema de mi ordenador que tal vez se solucione reinstalando Office o Windows. Es un problema tan absurdo que seguro no pasa en otros ordenadores. Entonces no te paso el fichero pero te digo la macro que hace lo de rellenar la Tabla Madre.

Debes meterla en la hoja ThisWorkbook de Visual basic ya que controla los cambios en cualquier hoja del libro.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Lugar As Integer
If (UCase(Sh.Name) = "TABLA 1" Or UCase(Sh.Name) = "TABLA 2") And Target.Column = 7 And Target.Row > 1 Then
   Lugar = Worksheets("TABLA MADRE").Range("G65536").End(xlUp).Row + 1
   Application.ScreenUpdating = False
   Application.EnableEvents = False
   Sh.Range("A" & Target.Row, "G" & Target.Row).Copy
   Sh.Range("H" & Target.Row) = "X"
   Worksheets("TABLA MADRE").Paste Destination:=Worksheets("TABLA MADRE").Range("A" & Lugar)
   Sh.Select
   Application.ScreenUpdating = True
   Application.EnableEvents = True
   Application.CutCopyMode = False
End If
End Sub

Veras que lo que hace la macro es colocar una X en la columna siguiente para que sepas que ese registro se ha pasado. Si quisieras podríamos poner algúún color como señal en lugar de la X. El registro se pasa a la Tabla Madre cuando se pone o modifica el precio, luego pon siempre el precio lo último de un regístro. Registros que no estén pasados se pueden pasar simplemente sobrescribiendo el precio.

Y eso es todo, si tienes alguna duda pregúntame. Siento no poder pasarte el fichero por ese problema, espero que a ti no se te dé. Y si ya está bien resuelto el problema no olvides puntuar.

Hola!,

Gracias por tomarte el tiempo de ayudarme.

Copié la macro en el Visual Basic, pero me dá error, ¿que nombre le debo poner a la macro?, lo siento, pero estoy recién empezando a usar Visual Basic y me cuesta mucho entender el lenguaje.

Saludos

Espera, si puedo te mando el fichero. Que ya descubrí que ese fallo es culpa de Excel y no es mío.

Muchas gracias, me ayudó mucho para comenzar mi trabajo. Fue un excelente punto de partida.

Se agradece enormemente la ayuda desinteresada que realizan.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas