Saltar al contenido

IMPORTAR INFORMACIÓN NUEVA DE UN LIBRO A OTRO EN DIFERENTES RUTAS


Recommended Posts

Hola a todos!!

 

Soy bastante principiante en las macros y no se cómo resolver esta.

Tengo un libro origen que actualizo diariamente  las filas ( a veces tengo que quitar registros pero la mayoría añado)

y quiero trasladar esa misma información a otro fichero histórico con las mismas columnas a otra ruta.

Me gustaría que en el libro destino tuviera un botón para importar los nuevos datos del origen si tener.

Por favor a ver si me pueden ayudar.Millones de gracias de antemano.

Conseguí esta macro por internet y la modifique para mi pero no me funciona. Me pone error sobre todo en el procedimiento que marco en verde.

 

Sub Importarcobros()

'Defino las variables a usar

Dim wborigen As Workbook
Dim wsorigen As Worksheet
Dim wbdestino As Workbook
Dim wsdestino As Worksheet

Dim ruta As String

ruta = "W:L\COBROS_2019 _PRUEBA_MACRO.xlsx"


'Llamamos a los datos de destino,solo tiene que estar abierto este libro


Set wblibrodestino = Workbooks(ThisWorkbook.Name)

Set wsHojaDestino = wblibrodestino.Worksheets("Cartera_actual")

'Llamamos a los datos de origen, no tiene que estar abierto este libro

Set wblibroOrigen = Workbooks.Open(ruta)

Set wshojaorigen = wblibroOrigen.Worksheet("Cartera actual")

uFila = wshojaorigen.Range("A" & Rows.Count).End(xlUp).Row

wshojaorigen.Range("A3:Z" & uFila).Copy Destination:=wsHojaDestino.Range("A" & Rows.Count).End(xlUp).Row

Workbooks(wblibroOrigen.Name).Close Savechanges:=False

End Sub

Enlace a comentario
Compartir con otras webs

En la próxima consulta, recuerda subir los archivos necesarios para probar tu consulta.

Sub CopiarCarteraAlHistórico()
Dim FilaO As Long, FilaD As Long

'--
Workbooks.Open "F:\Mi archivo.xlsx" '<--- Modificar según necesidades
'--

With ActiveWorkbook.Sheets("Cartera_actual")
   FilaO = .Range("A" & Rows.Count).End(xlUp).Row
   FilaD = ThisWorkbook.Sheets("Cartera_actual").Range("A" & Rows.Count).End(xlUp).Row + 1
   .Range("A3:Z" & FilaO).Copy ThisWorkbook.Sheets("Cartera_actual").Range("A" & FilaD)
End With
ActiveWorkbook.Close
End Sub

 

Enlace a comentario
Compartir con otras webs

Hola Antoni!

 

En primer lugar, mil gracias  por tu ayuda.  La estoy probando y funciona genial!! Una duda, si por lo que sea del origen quito un registro antiguo, también se actualiza?

De nuevo millones de gracias por la aportación!!!!

Enlace a comentario
Compartir con otras webs

Hace 20 horas, Lydia dijo:

Hola Antoni! El problema que me surge con esto que es que duplica resgitros. La columna "CR RACMO" es como un id identificativo si es nuevo, podría copiar solo las filas en las que esa columna sea diferente? Disculpar por no haberlo dicho antes y lo siento, no puedo subir el archivo por Ley de porteccion de datos! mil gracias de nuevo

 

 

Enlace a comentario
Compartir con otras webs

Suponiendo que el ID está en la columna A:

Sub CopiarCartera()
Dim FilaO As Long, FilaD As Long, Id As Range, Destino As Worksheet
Application.ScreenUpdating = False
Set Destino = ThisWorkbook.Sheets("Cartera_actual")
Workbooks.Open "F:\Mi archivo.xlsx" '<--- Modificar según necesidades
With Sheets("Cartera_actual")
   FilaO = .Range("A" & Rows.Count).End(xlUp).Row
   For x = 3 To FilaO
      Set Id = Destino.Columns("A").Find(.Range("A" & x), , , xlWhole) 'Busca ID
      If Id Is Nothing Then
         FilaD = Destino.Range("A" & Rows.Count).End(xlUp).Row + 1
         .Range("A" & x & ":Z" & x).Copy Destino.Range("A" & FilaD)
      End If
   Next
End With
ActiveWorkbook.Close
End Sub

 

Enlace a comentario
Compartir con otras webs

Muchas gracias Antoni! ahora no me coge duplicados así que fenomenal, pero si borro un registro del libro origen  que ya estaba contenido en el de destino, no se me actualiza...Cómo puedo arreglar eso? De nuevo muchas gracias por todo.

Enlace a comentario
Compartir con otras webs

Vamos a ver si nos aclaramos de una vez, porqué a trocitos no hay manera de hacer nada:

Situaciones:

  1. Está en Origen y no está en Destino --> Se añade a Destino
  2. Está en Origen y está en Destino       --> ¿No se hace nada o se sustituye Destino por Origen?
  3. Está en Destino y no está en Origen --> Se elimina de Destino

Define con exactitud lo que quieres.

 

Enlace a comentario
Compartir con otras webs

Mil disculpas porque seguro que no me explico adecuadamente y encima no puedo adjuntar los archivos por ley de protección de datos .

Trato de explicarme desde el principio. Tengo un libro excel con cobros desde septiembre 2018 hasta actual que voy aumentando cada día registros (origen). Este libro contienes desde este mes, porque contiene más hojas con tablas dinámicas para análisis de datos para el jefe. Este tiene las mismas columnas o o por lo menos las principales comunes del archivo destino de cobros 2018 hasta actual. 

 

Para otro jefe , quiere un archivo "histórico"  es decier completo desde l 2018 hasta ahora,con las mismas columnas y registros pero desde el 2018 entero hasta la fecha. El problema es que el cliente a veces me quita registros del fichero origen... es decir, lo que ya he grabado.

 

En definitiva, lo que desearía, si se puede hacer, es que los registros del fichero origen se añadieran al de destino sin duplicar por el id de la columna  "cr racmo" que es única y si se borra del fichero origen algún registro que ya esté en el de destino. también se actualice. En conclusión tengo un histórico del fichero destino que contiene registros hasta agosto 2018. El fichero origen contiene datos desde setiembre 2018 hasta actual que cada día se añaden o se borran registros según ciertas  circunstancias. Su macro última funciona a la perfección a excepción de si se si borra un nuevo registro, no lo considera.  Quiero que sea una foto de lo que actualmente  vaya registrando en el fichero origen,  por lo que faltaría es alguna sentencia (la cual no se´) que si por ese id ya no está en el fichero origen, no la incluya.

Lo siento por la dificultad de explicar  y mil gracias por todo! por adelantado!

Enlace a comentario
Compartir con otras webs

Hola @Lydia

Hace 46 minutos , Lydia dijo:

Mil disculpas porque seguro que no me explico adecuadamente y encima no puedo adjuntar los archivos por ley de protección de datos .

No tienes que mandar datos confidenciales, suficiente con archivos como muestras con datos ficticios pero con la estructura real de tus archivos, en los mismos debes poner un antes y un después, según los eventos que suceden, tu lo tienes claro, pero nosotros, no

Por favor de paso lee las normas del foro

 

Saludos

Enlace a comentario
Compartir con otras webs

Hace 10 horas, Antoni dijo:

Vamos a ver si nos aclaramos de una vez, porqué a trocitos no hay manera de hacer nada:

Situaciones:

  1. Está en Origen y no está en Destino --> Se añade a Destino
  2. Está en Origen y está en Destino       --> ¿No se hace nada o se sustituye Destino por Origen?
  3. Está en Destino y no está en Origen --> Se elimina de Destino

Define con exactitud lo que quieres.

 

¿Que parte no entiendes de lo que tienes que aclarar? Es fácil ¿No?

 

Enlace a comentario
Compartir con otras webs

Archivado

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

  • 97 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.