Excel - Proceso muy lento al cargar registros en Hoja Excel

 
Vista:
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 05/09/2024 03:03:38
Estimados, tengo este caso, al activar la Hoja("Inventario") esta se carga con registros desde la Hoja("Report Saldo"). Para que la Hoja ("Inventario") se carge esta debe tener un indice ubicado en la celda C3 que va a buscar en la Hoja("Report Saldo") y si lo encuentra rescata los registros en forma vertical y horizontal
Los indices en este caso son cualquiera de estas dos: "ROUSE" "INDEX". Sin embargo el problema que tengo es muy lento al cargar los datos en la Hoja("Inventario"). me gustaria implementar una matriz o cualquier otra solucion para solucionar el proceso de carga lento.

Adjunto el Archivo para observar el funcionamiento.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Antoni Masana (2540 intervenciones) el 05/09/2024 16:55:29
He realizado algunos cambios pero solo he conseguido que sea 0,5 segundos más rápido.
Antes tardaba en mi equipo 17,8 segundos y ahora 17,3 segundos.
He creado una hoja oculta que en la que hay la lista de opciones de la celda C3 de la hoja inventario. Así evito preguntar si esta vacía.
He realizado cambios en la macros de ordenar para que solo ordene la filas con datos.
He realizado algún cambio en la macro principal.

Adjunto dos libros, que es el mismo libro guardado en dos formatos: .xlsm y .xlsb este último es más pequeño y se carga y guarda en menos tiempo. Aunque el problema de tiempos no tiempos no tiene nada que ver con esto.

No se que hace la macro y no puedo probar otra estructura de lectura de datos para ver si se puede ganar algo más de tiempo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 06/09/2024 03:31:31
Hola Antoni, se esta armando una Hoja (“Inventario”) como reporte de inventario, en el se muestran todos los artículos en columnas (Sub-familia, SKU, Descripción) y cada uno de estos artículos deben mostrar la cantidad de articulos Dispn(Disponible), Asign(Asignada), Pick(Pickeada) y Block(Bloqueada), y estos registros deben estar validado de que bodega virtual y UDM son.
Por ahora solo tengo la primera parte que es la carga de los artículos en columnas (Sub-familia, SKU, Descripción) y las bodegas virtual y UDM. Ahora me falta el código para cargar las cantidades Dispn(Disponible), Asign(Asignada), Pick(Pickeada) y Block(Bloqueada)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Antoni Masana (2540 intervenciones) el 06/09/2024 13:35:25
Voy a probar algo nuevo que quizás acelere el proceso.
Primero tengo que entender que haces y después veré como hacerlo, se me han ocurrido unos cuantos trucos.
Déjame probar y te cuento.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Antoni Masana (2540 intervenciones) el 07/09/2024 15:55:24
Estoy buscando soluciones.

He creado una versión que completa la carga de la hoja Inventario y tarda para el propietario INDEX, el que tiene más datos, 34 segundos.

Voy a intentar reducir el tiempo aunque hay algo insalvable.

Estas instrucciones son para poner las cantidades en la hoja Inventario:

1
2
3
4
WS2.Cells(Posi, Colu + 0) = WS2.Cells(Posi, Colu + 0) + WS1.Cells(Fila, 14) ' 'N'
WS2.Cells(Posi, Colu + 1) = WS2.Cells(Posi, Colu + 1) + WS1.Cells(Fila, 15) ' 'O'
WS2.Cells(Posi, Colu + 2) = WS2.Cells(Posi, Colu + 2) + WS1.Cells(Fila, 16) ' 'P'
WS2.Cells(Posi, Colu + 3) = WS2.Cells(Posi, Colu + 3) + WS1.Cells(Fila, 17) ' 'Q'

Tarda en realizar estas 4 asignaciones 1,62 milisegundos o lo que es lo mismo 0,00162 segundos. Lo realiza 10.176 veces lo que da un tiempo total de 16,48 segundos.

Escribir la cabecera de las filas 3, 4 y 5 tarda 15,5 segundos.

1
2
3
4
5
6
7
8
Fila = 2
    While WS3.Cells(Fila, "D") <> Empty
        Colu = ((Fila - 2) * 4) + 5
        WS2.Cells(3, Colu) = WS3.Cells(Fila, "F")
        WS2.Cells(4, Colu) = WS3.Cells(Fila, "D")
        WS2.Cells(5, Colu) = WS3.Cells(Fila, "E")
        Fila = Fila + 1
    Wend

Lo que hace que no se pueda reducir más el tiempo.
Voy a pulirlo y te lo envío.
Hay otra opción y es usando formulas. Lo investigo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 07/09/2024 17:59:00
Hola Antoni, de todas maneras los archivos que enviaste sus procesos estan un poco mas rapido, lo cual ya no lo considero que sea lento porque el tiempo que demora lo considero razonable.
Ahora te quiero explicar al detalle la segunda parte de lo que quiero hacer asumiendo que al cargar la Hoja("Inventario") es la estructura y datos que tendra para a partir de ahi buscar en la Hoja("Report Saldo") total de cantidaes de Dispn, Asign, Pick y Block. El evento deberia producirse en un Command Button ubicado en la Hoja("Inventario")

Resumen de la Estructura y la Tarea:
1. Estructura de la Hoja 'Inventario':
o Fila 3, 4, y 5:
Fila 3: Sub Familia (Encabezado de columna)
Fila 4: SKU (Encabezado de columna)
Fila 5: Descripción (Encabezado de columna)
o Fila 2: Encabezados de datos, que incluyen:
Dispn: Cantidad Disponible
Asign: Cantidad Asignada
Pick: Cantidad Pickeada
Block: Cantidad Bloqueada
 Estos encabezados se encuentran en columnas separadas y no usan celdas combinadas.
o Columnas B, C, y D desde la fila 6:
Columna B: Numeración de ítems
Columna C: Bodega Virtual
Columna D: UDM
o Datos en la Hoja 'Inventario':
Los datos están organizados en una matriz donde los encabezados de columna están en las filas 2 a 5.
Cada fila desde la fila 6 en adelante corresponde a una combinación de Bodega Virtual y UDM, y los valores de Cantidad (Dispn,
Asign, Pick, Block) deben colocarse en la columna correspondiente bajo estos encabezados.

2. Tarea:
o Buscar en la Hoja 'Report Saldo':
 Buscar cada SKU, Bodega Virtual, y UDM.
o Suma de Cantidades:
Cantidad Disponible (Dispn)
Cantidad Asignada (Asign)
Cantidad Pickeada (Pick)
Cantidad Bloqueada (Block)
o Actualizar en la Hoja 'Inventario':
Ubicar la posición correcta en la matriz de la Hoja 'Inventario' que corresponda a la combinación de Bodega Virtual y UDM en las filas.
Colocar las cantidades sumadas en la columna correcta según el encabezado (Dispn, Asign, Pick, Block) en esa fila de la matriz.
Proceso Detallado:

1. Encontrar las coincidencias en 'Report Saldo':
o Para cada fila en 'Report Saldo', extraer el SKU, Bodega Virtual, y UDM.
o Extraer las cantidades correspondientes (Cantidad Disponible, Cantidad Asignada, Cantidad Pickeada, Cantidad Bloqueada).
2. Ubicar la celda correcta en 'Inventario':
o Buscar la fila correspondiente en 'Inventario' basada en el Bodega Virtual y UDM.
o Buscar la columna correcta en 'Inventario' basada en el encabezado correspondiente (Dispn, Asign, Pick, Block).
3. Actualizar las cantidades:
o Sumar las cantidades encontradas
a las celdas correspondientes en 'Inventario'.



Espero que se haya entendido la idea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 08/09/2024 19:52:36
Segun lo que explique como segundo requerimiento en el anterior comentario he estado avanzando en la implementacion de un codigo que esta funcionando, me muestra el total de Dispn, lo que no consigo es que me muestre el total de Asign, Pick y Block. Ademas lo observo aun poco lento el proceso.
Adjunto Archivo.


Inventario
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 11/09/2024 11:35:08
Me falto agregarle step 4. Pero creo que le falta mas rapides al proceso.

' ---&--- Escribe los datos en la hoja Inventario

With WS2
For Col = 5 To UBound(Tabla_Col) Step 4 ' Recorre las columnas de la tabla de datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja <a href="#" class="google-anno" style="border:

Publicado por Antoni Masana (2540 intervenciones) el 11/09/2024 16:36:23
Buenas,
Te voy a enviar 3 soluciones del mismo problema:

Inventario_3.xlsb – Resuelto con Tablas Dinámicas.
Inventario_4.xlsb – Resuelto con Macro. Tarda unos 34 seg. Lo hace todo.
Inventario_5.xlsb – Resuelto con Macro con mejores tiempos. Tarda unos 4 seg. Lo hace todo.


Analizando los datos he deducido que quieres hacer en la hoja de inventario y he realizado la versión 4.

Ahora empecemos por el principio.

Cronometro los tiempos y veo que una macro que tarda en ejecutarse 16,84 segundos tarda 16,18 en el FOR que rellena las filas 3, 4 y 5, es decir 96% en este proceso.

Creo mi macro en varias fases:

Fase – 0: Limpieza e inicializar entorno.
Fase – 1: Crea la tabla de la cabecera3-5
Fase – 2: Escribe la cabecera
Fase – 3: Ordena la hora Report Saldo por las columnas: C – I – J
Fase – 4: Escribe la cabecera de la columna B y las cantidades.

Tiempos:



El tiempo total en la macro es de 32,32 Seg.
-La fase 2 tarda 14,72 seg.
-La fase 4 tarda 15,13 seg. escribiendo las cantidades

Localizado el problema.



La fase 2 es este código:

1
2
3
4
5
6
7
8
Fila = 2
While WS3.Cells(Fila, "D") <> Empty
    Colu = ((Fila - 2) * 4) + 5
    WS2.Cells(3, Colu) = WS3.Cells(Fila, "F")
    WS2.Cells(4, Colu) = WS3.Cells(Fila, "D")
    WS2.Cells(5, Colu) = WS3.Cells(Fila, "E")
    Fila = Fila + 1
Wend

Y el tiempo en la fase 4 está en este código:

1
2
3
4
5
6
7
Refe = Application.Match(WS1.Cells(Fila, "D"), WS3.Range("D:D"), 0)
Colu = (Refe * 4) + 1
 
WS2.Cells(Posi, Colu + 0) = WS2.Cells(Posi, Colu + 0) + WS1.Cells(Fila, 14) ' 'N'
WS2.Cells(Posi, Colu + 1) = WS2.Cells(Posi, Colu + 1) + WS1.Cells(Fila, 15) ' 'O'
WS2.Cells(Posi, Colu + 2) = WS2.Cells(Posi, Colu + 2) + WS1.Cells(Fila, 16) ' 'P'
WS2.Cells(Posi, Colu + 3) = WS2.Cells(Posi, Colu + 3) + WS1.Cells(Fila, 17) ' 'Q'


¿Qué hace la FASE 1?

La creación de la lista se realiza de la siguiente forma:
En la hoja REPORT SALDO
- Se filtra por la columna B
- Se copian las columnas D - E - AI en la hoja FILTRO columnas D - E - F
En la hoja FILTRO
- Se ordena por la columna D.
- Se eliminan los duplicados Se la columna D
Se elimina el FILTRO de la hoja REPORT SALDO.

¿Qué hace la FASE 3?

En la hoja REPORT SALDO se ordena por las columnas C - I - J
Se busca el primer registro de la columna C (Descripción Propietario) que se está tratado. Celda C3 de la hoja Inventario
El WHILE se ejecuta mientras sea igual a C3

Las cantidades se suman en una tabla.
Para la posición en la tabla tomamos la fila del valor al escribir la columna B y la columna la calcula buscando con la formula Coincidir en la tabla de la cabecera en la hoja formato.
Con el cálculo (Refe * 4) + 1

Y con un par de FOR escriben los datos.

1
2
3
4
5
FOR fil = 6 TO posi
    FOR col 5 TO 7672
        If Tabla(fil, col) <> 9 THEN cells(fil col) = Tabla(fil, col)
    NEXT
NEXT

Soluciones



FASE - 2

Aquí pongo un formula muy simple para tomar los datos de la tabla de la Fase-1. Se ha puesto formula a 1917 columnas de códigos SKU.
El refresco es en décimas de segundo.

FASE - 3 y FASE - 4

Para los números podría usar esta fórmula pero tiene un problema, hay que poner 483084 formulas, las cuales van leer cada una de ellas las 14848 filas de datos con un tiempo por formula de 0,002 segundos.

1
2
3
4
5
=SI(Y($C$19<>"" ; $D$19<>"") ; SUMAR.SI.CONJUNTO('Report Saldo'!$N:$N ;
                                                 'Report Saldo'!$C:$C ; "=" & $C$3 ;
                                                 'Report Saldo'!$I:$I ; "=" & $C$6 ;
                                                 'Report Saldo'!$J:$J ; "=" & $D$6 ;
                                                 'Report Saldo'!$D:$D ; "=" & $E$4) ; 0)

FASE - 4

Se resuelve con una tabla para realizar las sumas y en la hoja solo se pone lo que tenga valor diferente de CERO.


Ya me contaras que tal va.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 12/09/2024 02:24:14
Hola Antoni, estuve revisando tu implementación con respecto a Inventario_3 con Tabla Dinámica no se ve muy amigable que digamos ya que se repite el SKU y la Descripción del SKU por cada columna de cantidades, eso hace demasiado extenso horizontalmente el reporte.

La explicación de Inventario_4 esta muy clara.

Falta la explicación del Inventario_5 que es la mas interesante obviamente por la mayor rapidez del proceso.

Hay un detalle que es común en Inventario_4 e Inventario_5, la Hoja(“FILTRO”) oculta los nombres de la descripción de Propietario “INDEX”,”ROUSE” esto restringe la adaptabilidad a otros nombres de Propietario, porque el reporte de la Hoja(“Report Saldo”) puede tener muchos mas o diferentes Propietarios. Lo ideal seria que en C3 de la Hoja(“Inventario”) exista un ComboBox o ListBox que se cargue con los Propietarios al activar Hoja(“Inventario”) y este control inicialmente debe estar predeterminado espacio en blanco, y obligue a seleccionar el propietario y es ahí donde debe ocurrir todo el proceso de ejecución.

En Hoja(“Inventario”) dos filas mas abajo de Bodega Virtual y UDM debe colocarse el total de Dispn, Asign, Pick y Block en cada columna que corresponda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 12/09/2024 11:53:07
El SKU en ambas Hojas algunas veces puede ser numerico y otras Texto.
La Descripción Propietario, Bodega Virtual y UDM en Hoja ("Report Saldo") puede estar en Mayuscula o Minuscula.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja <a href="#" class="google-anno" style="border:

Publicado por Antoni Masana (2540 intervenciones) el 12/09/2024 12:32:55
Voy a mirar de cambiar lo de la celda C3.
También pondré los totales.


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja <a href="#" class="google-anno" style="border:

Publicado por Antoni Masana (2540 intervenciones) el 12/09/2024 15:52:43
Prueba esto y te comento.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 13/09/2024 03:34:58
Hola Antoni.
El ComboBox esta cargado por campos definidos(“INDEX” y ”ROUSE”) por tanto es estático y no es viable para lo que quiero, porque en el reporte de la Hoja(“Report Saldo”) el contenido del campo Descripción Propietario puede variar por tanto es dinámico (incluso su contenido puede ser en mayúscula y Minuscula)
Private Sub Worksheet_Activate()
With ComboBox1
.Clear
.AddItem ""
.AddItem "INDEX"
.AddItem "ROUSE"
End With
End Sub

El campo SKU de la Hoja(“Report Saldo”) también algunas veces puede ser numérico o texto, eso también se tiene que arreglar.
Te envío nuevamente el Archivo donde la Hoja(“Report Saldo”) tiene un contenido mas variado en el campo Descripción Propietario para detectar esos errores.

Tambien en Hoja(“Inventario”) dos filas mas abajo de Bodega Virtual y UDM debe colocarse el total de Dispn, Asign, Pick y Block en cada columna que corresponda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Antoni Masana (2540 intervenciones) el 13/09/2024 17:19:55
El filtro del ComboBox se carga a partir de los datos de la hoja Report Saldo del contenido del campo Descripción Propietario de forma dinámica.

He probado y el SKU lo encuentra sea número o texto.

En la fila 70 Están los totales de todas las columnas.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 14/09/2024 06:12:47
El codigo no esta trabajando bien, especialmente en el comboBox.
- A veces al seleccionar distintas opciones de Descripcion de Propietario en el ComboBox no se modifican los encabezados.
- Al seleccionar en ComboBox IMPROVAR solo muestra un encabezado cuando debiera ser dos, porque son dos registros.
-Al seleccionar MASCO CHILE LIMITADA no muestra ningun encabezado

Adjunto imagen con resultados de errores.


ComboBox
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 14/09/2024 07:27:02
No seria mejor la implementacion de los codigos con matrices para obtener mayor velocidad en los procesos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Juan (200 intervenciones) el 15/09/2024 09:20:55
Antoni, en paralelo estoy adaptando un código en el mismo archivo pero que todavía no lo tengo con ComboBox. Estoy tratando que al cargar la hoja(“Inventario”) se carguen los encabezados pero que el proceso sea rápido en este caso al escribir los resultados de Sub Familia, SKU y Descripción SKU en la hoja 'Inventario' horizontalmente en columnas continuas la carga del proceso es rápido para ello no necesito usar el for.

1
2
3
4
5
6
' Escribir los resultados de SKU en la hoja 'Inventario' horizontalmente
    If OutputRowSKU > 1 Then
        WS2.Cells(3, 5).Resize(1, OutputRowSKU - 1).Value = Application.Transpose(Application.Index(OutputDataSKU, 0, 1))
        WS2.Cells(4, 5).Resize(1, OutputRowSKU - 1).Value = Application.Transpose(Application.Index(OutputDataSKU, 0, 2))
        WS2.Cells(5, 5).Resize(1, OutputRowSKU - 1).Value = Application.Transpose(Application.Index(OutputDataSKU, 0, 3))
    End If

Sin embargo como quiero que la escritura sea cada 4 columnas estoy usando un for pero eso hace que el proceso demore mucho mas. Mi consulta es como hago o como se puede mejorar el código para que el proceso sea rápido que en vez de escribir en columnas continuas lo haga cada 4 columnas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'' Escribir los resultados de SKU, Descripción SKU y Sub Familia en la hoja 'Inventario' horizontalmente
'If OutputRowSKU > 1 Then
'    Dim j As Long
'    Dim colOffset As Long
'
'    colOffset = 5 ' Columna inicial para escribir
'
'    For j = 1 To OutputRowSKU - 1
'        ' Escribir cada grupo de datos en bloques de 4 columnas
'        WS2.Cells(3, colOffset).Resize(1, 4).Value = Array(OutputDataSKU(j, 1), "", "", "")
'        WS2.Cells(4, colOffset).Resize(1, 4).Value = Array(OutputDataSKU(j, 2), "", "", "")
'        WS2.Cells(5, colOffset).Resize(1, 4).Value = Array(OutputDataSKU(j, 3), "", "", "")
'
'        ' Moverse a la siguiente posición de 4 columnas
'        colOffset = colOffset + 4
'    Next j
'End If 

Te adjunto el Archivo para su revisión.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Antoni Masana (2540 intervenciones) el 15/09/2024 19:25:22
He creado un lista desplegable en la celda C3 de la hoja inventario.
Esta lista se actualiza al activar la hoja inventario, se copia la columna C de la hoja Report Salario elimina los repetidos, y actualiza la lista.
Al seleccionar en C3 se refresca la hoja.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Jazo (200 intervenciones) el 18/09/2024 13:42:52
Hola Antoni, lo estuve probando y hasta ahora todo bien, voy a probarlos con nuevos registros para estar completamente seguro que no necesita ninguna corrección.
Ahora falta los totales dos filas más abajo de Dispn, Asign, Pick y Block
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 257
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hojas Excel

Publicado por Juan (200 intervenciones) el 19/09/2024 10:25:44
Cuando cambio de seleccion en la Lista Desplegable algunas veces no cambian los encabezados, se mantienen con la seleccion anterior.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hojas Excel

Publicado por Antoni Masana (2540 intervenciones) el 19/09/2024 12:00:51
Cuando no cambie los cabezales mira en la hoja FILTRO que datos hay en las columnas A, B y C quizás no realizó bien la copia.

A mi me funciona, vale que la calidad de funcionamiento deja que desear, pero es lo mejor que se tiene.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Nolberto
Val: 84
Ha aumentado su posición en 6 puestos en Excel (en relación al último mes)
Gráfica de Excel

Proceso muy lento al cargar registros en Hoja Excel

Publicado por Nolberto (128 intervenciones) el 08/10/2024 04:58:45
Aquí la cuestión principal es la cantidad de datos que se estan procesando, es considerable porque son muchas filas y columnas.

Una forma de hacer un poco mas eficiente el proceso es por un lado meter la información en una matriz, esto en lugar de tener que estar accediendo a las celdas en cada proceso, es mas rápido hacerlo en memoria.
Adicionalmente, se pueden dividir los datos en barios bloques y ejecutar el proceso en varias etapas, es decir, en lugar de tomar todos los datos desde el principio, se pueden dividir por ejemplo en 10 partes e ir iterando cada bloque en secuencia, de ese modo no se ponen tantos datos en memoria y debería ser un poco mas rápido, en cada iteración de bloque se libera la memoria.

Este es un ejemplo que puedes probar.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Sub CargaSKUyFechExp_Ascendente()
    Dim WS1 As Worksheet, WS2 As Worksheet
    Dim Ref As Long, Numeracion As Long
    Dim InventarioData As Variant
    Dim i As Long, LastRowWS1 As Long
    Dim BodegaVirtual As String, DescripcionPropietario As String
    Dim FechExP As Variant, UDM As String
    Dim PrevBodegaVirtual As String, PrevUDM As String
    Dim BatchSize As Long, StartRow As Long, EndRow As Long
    Dim Block As Long, TotalBlocks As Long
 
    ' Desactivar actualizaciones de pantalla, cálculos automáticos y eventos
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With
 
    ' Limpieza inicial de los rangos en la hoja "Inventario"
    With Worksheets("Inventario")
        .Range("E3:XFC76").ClearContents
        .Range("B6:D76").ClearContents
    End With
 
    ' Llamada a la función FechaExpiracionAscendente (suponiendo que optimizada)
    Call FechaExpiracionAscendente
 
    ' Referencias a hojas de trabajo
    Set WS1 = Worksheets("Report Saldo")
    Set WS2 = Worksheets("Inventario")
 
    ' Obtener la última fila con datos en WS1 (columna A)
    LastRowWS1 = WS1.Cells(WS1.Rows.Count, 1).End(xlUp).Row
 
    ' Definir el tamaño del bloque
    BatchSize = Application.WorksheetFunction.RoundUp((LastRowWS1 - 1) / 10, 0) ' Dividido en 10 partes
 
    ' Inicializar variables de control
    Ref = 6
    Numeracion = 0
    PrevBodegaVirtual = ""
    PrevUDM = ""
 
    ' Procesar datos por lotes
    TotalBlocks = 10 ' Número de bloques
 
    For Block = 1 To TotalBlocks
        ' Calcular el rango del lote de datos
        StartRow = (Block - 1) * BatchSize + 2 ' Comienza en la fila 2
        EndRow = WorksheetFunction.Min(Block * BatchSize + 1, LastRowWS1) ' Ajustar al último lote
 
        ' Cargar el lote de datos en un array
        InventarioData = WS1.Range("A" & StartRow & ":AI" & EndRow).Value
 
        ' Primer bucle: items y fechas de expiración
        For i = 1 To UBound(InventarioData, 1)
            BodegaVirtual = UCase(InventarioData(i, 9)) ' Columna "I"
            DescripcionPropietario = UCase(InventarioData(i, 3)) ' Columna "C"
            UDM = UCase(InventarioData(i, 10)) ' Columna "J"
 
            ' Verificar propietario y que la celda (3,3) no esté vacía
            If DescripcionPropietario = UCase(WS2.Cells(3, 3).Value) And WS2.Cells(3, 3).Value <> "" Then
                ' Comparar solo si la combinación de BodegaVirtual y UDM cambió
                If BodegaVirtual & UDM <> PrevBodegaVirtual & PrevUDM Then
                    ' Escribir datos en WS2
                    WS2.Cells(Ref, 3).Value = BodegaVirtual
                    WS2.Cells(Ref, 4).Value = UDM
                    Numeracion = Numeracion + 1
                    WS2.Cells(Ref, 2).Value = Numeracion
                    Ref = Ref + 1
                    ' Actualizar valores anteriores
                    PrevBodegaVirtual = BodegaVirtual
                    PrevUDM = UDM
                End If
            End If
        Next i
 
        ' Segundo bucle: Sku por su descripción, origen y familia
        Ref = 5
        For i = 1 To UBound(InventarioData, 1)
            DescripcionPropietario = UCase(InventarioData(i, 3)) ' Columna "C"
 
            ' Verificar propietario
            If DescripcionPropietario = UCase(WS2.Cells(3, 3).Value) And WS2.Cells(3, 3).Value <> "" Then
                ' Comparar valores y escribir si es necesario
                If UCase(WS2.Cells(4, Ref - 4).Value) <> UCase(InventarioData(i, 4)) Then ' Columna "D"
                    WS2.Cells(3, Ref).Value = InventarioData(i, 35) ' Columna "AI"
                    WS2.Cells(4, Ref).Value = InventarioData(i, 4)  ' Columna "D"
                    WS2.Cells(5, Ref).Value = InventarioData(i, 5)  ' Columna "E"
                    Ref = Ref + 4
                End If
            End If
        Next i
 
        ' Liberar memoria entre bloques
        Erase InventarioData
    Next Block
 
    ' Restaurar configuraciones de Excel
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar