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

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.
- Compartir respuesta
