Saltar al contenido

Buscar y actualizar datos de un archivo a otro archivo


Recommended Posts

publicado

Saldos a todos.

Pido de su amable apoyo para resolver errores en tiempo de ejecución de un macro; básicamente lo que hace el macro es buscar los códigos del archivo A en el archivo B y si lo encuentra debe marcar en el archivo A en celdas especificas una leyenda y un dato contenido en el archivo B en la fila correspondiente al dato encontrado.

Errores en tiempo de ejecución:

"Unable to get the Activate property of the Range class"

"Object variable or With block variable not set"

Les dejo ambos archivos que son: A "Inv (PRUEBAS)" y B "INVENTARIO (PRUEBAS)"

Espero puedan ayudarme con la solución. Gracias.

Archivos.rar

publicado

Podrías adjuntar los archivos con los nombres reales?

Es que tu macro corre directamente bajo esos nombres y así no sería necesario modificar nada de eso y poder comprobarlo...

Un saludo,

Tese

publicado

Tras abrir el archivo y ver correr la macro creo que tienes varios problemas......lo que no sé es si quieres modificar esa hasta que funcione.......o crear otra que lo haga más fácil, que según mi punto de vista........sería lo adecuado.....pero claro, tú eliges.....

Hay algunas líneas del código que no tienen ningún sentido..........todas aquellas que terminan en ".Copy" no deberían existir, pues no hay ni un solo "Paste" después..........y obviamente no es necesario hacer eso para "captar" el valor...

En fin, tú decides...

Un saludo,

Tese

publicado

Tese, gracias por tus comentarios, y sobre los copy, bueno, es solo mal habito.

Por otra parte, que sugieres para simplificarlo, porque la verdad si me gustaría dejarlo mas funcional y que sea mas adaptable.

publicado

Cuidado con los habitos, caguamil.........jejejeje........que tener una celda "copiada" puede complicarte la vida en muchas ocasiones....además, creo que si no necesitas "físicamente" tenerla.......el copy hará más lento todo.........pero bueno, tú sabrás....jejeje

Mi propuesta consistiría en un simple bucle del tipo "For each.............next"......tomando como referencia cada celda de la columna "A" del archivo origen...........buscarla en el destino y si la encuentra pues que haga lo que deba hacer y si no pues que haga otra cosa.......y cuando la celda de origen esté vacía.......pues que pare.......

Es muy simple y cortito el código..........y no necesitas estar activando continuamente ambos archivos......

Tú me dices.....

Tese

publicado

Tese, me parece muy buena tu idea, el único problema es que el uso del "For" siempre se me ha complicado; por lo cual, me puedes ayudar con ello por favor?

publicado

Cuenta con ello.............a ver si después del Madrid-Barça me pongo con ello.......jejejeje

Chao,

Tese

- - - - - Mensaje combinado - - - - -

Buenas de nuevo......

Ahí tienes tus archivos con un nuevo módulo........prueba a ver si te funciona.......

He visto códigos repetidos en el fichero origen.......imagino que sería como ejemplo........si los tuvieras de verdad repetidos, entonces quizás habría que filtrar por otro campo........

Bueno, ya me cuentas.......

Chao,

Tese

Caguamil.rar

publicado

Antes que nada muchas gracias Tese por tu ayuda, y por otra parte, tal como observaste si hay códigos repetidos y el problema es que entre las dos bases de datos es el único dato que se puede relacionar, y ademas una de las bases de datos contiene mas registros que la otra.

Inv (PRUEBAS) 8559 registros

INVENTARIO (PRUEBAS) 5592 registros

Espero que la información que te doy te sea de utilidad para poder solucionar mi dilema, que te comento, el código que use, en algún momento lo hice funcionar, pero de eso ya tiene mas de medio año y ya no me acuerdo que hice, aparte el archivo donde estaba la macro me lo borraron, ya sabes los de sistemas y sus mantenimientos jejeje....

Oh! y se me olvidaba, por los códigos repetidos, el bucle For... no funciono.

publicado

Pero entonces, qué otra información (columna) necesitas para saber si es esa línea la que buscas u otra?

Recuerda que en tu archivo no hay ningún otro dato "legible"....son todo XXXXXXXXXXX.......me da que quizás necesitaras tener en cuenta el concepto........pero tú eres el que sabes.........

De momento, magia no hacemos......jejejeje

Y cuando dices que el bucle For no funcionó imagino que te referirás a que había otra información que debería haber salido y no al propio funcionamiento del bucle........yo lo probé y funcionaba.....

Un saludo,

Tese

Archivado

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

  • 109 ¿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
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Hola, veo que tienes 365, así que esta forma funcionará   Almacen.xlsx
    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
  • 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.