Saltar al contenido

Actualizar datos de un libro en otro


Recommended Posts

publicado

Gente,

Buenas noches,

Primera vez que escribo, hace un tiempito que estoy registrado.

Les comento a ver si pueden brindarme una ayuda, en mi trabajo somos 3personas que trabajamos con el mismo tipo de planilla de excel, mismascolumnas, etc, son tres libros excel. Vamos cargando los datos de cadaexportación que realizamos, cada persona en su planilla.

La idea sería hacer una macro que busque cada fila del libro(por número de orden, factura, el que fuese mejor) y la compare con un libro general,si existen diferencias entre ellas que actualice y sino existe que agreguela fila al último.

Lo que queremos lograr es que al terminar el día ejecutaresta macro y estos datos pasen a un libro general donde se van a incluir en una misma hoja todas las exportaciones de los países que manejamos.

De esta forma tendríamos un libro general para que pueda consultar nuestrojefe sin tener que pasarle nuestros archivos cada vez que lo necesite.

Me podrán dar una mano?

Adjunto ejemplo de la planilla que usamos.-

Les agradezco mucho desde ya.

Plan.xls

publicado

No he recibido una respuesta así que me puse a ver como hacerlo y tengo un problema a ver si me pueden guiar.

este es mi código:


Sub EnviarHistorico()
Dim ultimafila As Double
Dim lastrow As Double

lastrow = Workbooks("Operaciones.xls").Worksheets("PLAN").Cells(65536, 2).End(xlUp).Row
lastrowcerrados = Workbooks("Operaciones.xls").Worksheets("CERRADOS").Cells(65536, 2).End(xlUp).Row

If lastrow > 0 Then
Workbooks.Open Filename:="OpTerr\Historico.xls"
Windows("Operaciones.xls").Activate
For x = 2 To lastrow

If Workbooks("Operaciones.xls").Worksheets("PLAN").Cells(x, 2).Value <> "" Then
If Workbooks("Historico.xls").Worksheets("Historico").Cells(65536, 2).Value = "" Then
ultimafila = Workbooks("Historico.xls").Worksheets("Historico").Cells(65536, 2).End(xlUp).Row + 1
Else
ultimafila = x
End If

If Workbooks("Operaciones.xls").Worksheets("PLAN").Cells(x, 2).Value = Workbooks("Historico.xls").Worksheets("Historico").Cells(x, 2).Value Then

For w = 2 To lastrow

For u = 1 To 20
If Workbooks("Operaciones.xls").Worksheets("PLAN").Cells(w, u).Value = Workbooks("Historico.xls").Worksheets("Historico").Cells(w, u).Value Then

Else
Workbooks("Historico.xls").Worksheets("Historico").Cells(w, u).Value = Workbooks("Operaciones.xls").Worksheets("PLAN").Cells(w, u).Value
End If

Next u

Next w

Else

l = ultimafila
For y = 1 To 20
Workbooks("Historico.xls").Worksheets("Historico").Cells(l, y) = Workbooks("Operaciones.xls").Worksheets("PLAN").Cells(x, y).Value
Next y

End If
End If
Next x


MsgBox ("Maestro Actualizado")

Else
MsgBox ("Libro en blanco")
Exit Sub

End If

Workbooks("Historico.xls").Save
Workbooks("Operaciones.xls").Save
Application.DisplayAlerts = False
Workbooks("Operaciones.xls").SaveCopyAs Filename:="OpTerr\OpParaguay-Resp.xls"
Workbooks("Historico.xls").Close

End Sub

[/PHP]

Funciona bien porque compara las filas con el libro historico y si es igual la primera columna empieza a revisar cada una de las siguientes columnas de esa fila, y si encuentra algo distinto lo actualiza.

El tema es cuándo se agrega una nueva fila en el archivo "operaciones" (como ser al principio de todo, o al último), ya que si no la encuentra en el archivo "historico" no sigue la búsqueda, actualiza la fila que le correspondería y se pierden los datos actuales de esa fila en "historico".

Como comentaba son tres archivos los cuales van alimentar el archivo historico, si el primer archivo "operaciones" agrega por ejemplo 4 filas, y luego el archivo "operaciones2" agrega 4 filas mas, y se intenta agregar nuevas filas del archivo "operaciones" este compara la fila con la del archivo historico y al no ser igual (porque hay una fila del archivo "operaciones2") la actualiza y pierdo esa fila o se agrega al final y se duplica la fila.

¿Como se podrá hacer para que cuándo la fila no coincida siga la búsqueda por todo el archivo "historico" y si al final no la encuentra si agregue una nueva fila?

Se que el código no debe estar muy limpio pero es lo que he logrado hacer viendo otros ejemplos.

Muchas gracias!!

Archivado

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

×
×
  • 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.