Como acortar tiempos de proceso ???

29/06/2009 - 13:35 por JC | Informe spam
Hola Amigos:

Vuelvo a recurrir a Vosotros, para ver si mis complicaciones tienen alguna
solución.
Como siempre os pido que acepteis mis disculpas, si no se expresarme con
toda la claridad que sería mi deseo.

Estoy confeccionando una herramientita, para diariamente poder actualizar
una base de datos de 30.000 productos.

Tengo 2 posibles fuentes de consulta, para los datos que necesito en la hoja
1, si no lo encuentro en la 1ª base de datos (hoja 2), tiene que ir a la 2ª
(hoja 3) a realizar la operación.

La gran pega es que son 32 columnas por los 30.000 registros en filas y se
"eterniza", ya que el cálculo se va a las 5 horas y pico.
Ya que estoy empleando, (después de averiguar la cantidad de filas que son,
ya que, diariamente se crean productos nuevos:
x = 2
While Cells(x, 1) <> ""
x = x + 1
Wend

Formulas de este tipo:
=SI((INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1))=0;(INDICE('BASE_DATOS_2'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_2'!$Q:$Q;1);1));(INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1)))

Con un paste & copy:
Worksheets("DL").Range("AP2:BU2").Copy _
Destination:=Range(Cells(3, 2), Cells((x - 1), 33))

Sabríais, por favor, decirme o aconsejarme algún otro sistema o si conocéis
un método diferente, para conseguir realizar esta labor recortando
sensiblemente los tiempos de cálculo ???

Mil gracias por adelantado y si (como es seguro) me he dejado algún dato sin
aportar, no dudeis, por favor, en comentarmelo.

Un reconocido abrazo.

Juan Carlos.

Preguntas similare

Leer las respuestas

#1 pepe
29/06/2009 - 17:05 | Informe spam
Sería mucho más rápido su utilizases buscarv en las fórmulas (previamente
tendrías que ordenar la base de datos por la columna de búsqueda).


"JC" escribió en el mensaje de noticias
news:
Hola Amigos:

Vuelvo a recurrir a Vosotros, para ver si mis complicaciones tienen alguna
solución.
Como siempre os pido que acepteis mis disculpas, si no se expresarme con
toda la claridad que sería mi deseo.

Estoy confeccionando una herramientita, para diariamente poder actualizar
una base de datos de 30.000 productos.

Tengo 2 posibles fuentes de consulta, para los datos que necesito en la
hoja
1, si no lo encuentro en la 1ª base de datos (hoja 2), tiene que ir a la

(hoja 3) a realizar la operación.

La gran pega es que son 32 columnas por los 30.000 registros en filas y se
"eterniza", ya que el cálculo se va a las 5 horas y pico.
Ya que estoy empleando, (después de averiguar la cantidad de filas que
son,
ya que, diariamente se crean productos nuevos:
x = 2
While Cells(x, 1) <> ""
x = x + 1
Wend

Formulas de este tipo:
=SI((INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1))=0;(INDICE('BASE_DATOS_2'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_2'!$Q:$Q;1);1));(INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1)))

Con un paste & copy:
Worksheets("DL").Range("AP2:BU2").Copy _
Destination:=Range(Cells(3, 2), Cells((x - 1), 33))

Sabríais, por favor, decirme o aconsejarme algún otro sistema o si
conocéis
un método diferente, para conseguir realizar esta labor recortando
sensiblemente los tiempos de cálculo ???

Mil gracias por adelantado y si (como es seguro) me he dejado algún dato
sin
aportar, no dudeis, por favor, en comentarmelo.

Un reconocido abrazo.

Juan Carlos.
Respuesta Responder a este mensaje
#2 JC
29/06/2009 - 17:20 | Informe spam
Hola Pepe:

Y antes de nada, agradecer tu rápidez en responder y tu interés.
Es precisamente por ello (tener que ordenar las tablas), por lo que empleo
el indice-coincidir, que no el buscarV.
Y teniendo la misma raiz de busqueda (al menos es lo que me bulle por la
cabeza), no pensaba que me fuera a ahorrar una gran cantidad de tiempo.
Lo probaré, por supuesto. Hay que aprender y poder descartar por hecho y no
por que me parezca a mí otra cosa.
No obstante, si os ocurriera alguna otra idea de como poder acortar los
tiempos de respuesta en la consulta, os lo agradecería infinito.

Mil gracias de nuevo Pepe, espero poderte decir algo en un par de días (lo
que tarde en realizar los cambios adecuados, ya que el funcionamiento
completo de la macro en un poco más completo y complejo de lo que he resumido
por aquí.

Un abrazo.

Juan Carlos

"pepe" wrote:

Sería mucho más rápido su utilizases buscarv en las fórmulas (previamente
tendrías que ordenar la base de datos por la columna de búsqueda).


"JC" escribió en el mensaje de noticias
news:
> Hola Amigos:
>
> Vuelvo a recurrir a Vosotros, para ver si mis complicaciones tienen alguna
> solución.
> Como siempre os pido que acepteis mis disculpas, si no se expresarme con
> toda la claridad que sería mi deseo.
>
> Estoy confeccionando una herramientita, para diariamente poder actualizar
> una base de datos de 30.000 productos.
>
> Tengo 2 posibles fuentes de consulta, para los datos que necesito en la
> hoja
> 1, si no lo encuentro en la 1ª base de datos (hoja 2), tiene que ir a la
> 2ª
> (hoja 3) a realizar la operación.
>
> La gran pega es que son 32 columnas por los 30.000 registros en filas y se
> "eterniza", ya que el cálculo se va a las 5 horas y pico.
> Ya que estoy empleando, (después de averiguar la cantidad de filas que
> son,
> ya que, diariamente se crean productos nuevos:
> x = 2
> While Cells(x, 1) <> ""
> x = x + 1
> Wend
>
> Formulas de este tipo:
> =SI((INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1))=0;(INDICE('BASE_DATOS_2'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_2'!$Q:$Q;1);1));(INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1)))
>
> Con un paste & copy:
> Worksheets("DL").Range("AP2:BU2").Copy _
> Destination:=Range(Cells(3, 2), Cells((x - 1), 33))
>
> Sabríais, por favor, decirme o aconsejarme algún otro sistema o si
> conocéis
> un método diferente, para conseguir realizar esta labor recortando
> sensiblemente los tiempos de cálculo ???
>
> Mil gracias por adelantado y si (como es seguro) me he dejado algún dato
> sin
> aportar, no dudeis, por favor, en comentarmelo.
>
> Un reconocido abrazo.
>
> Juan Carlos.


Respuesta Responder a este mensaje
#3 pepe
29/06/2009 - 17:59 | Informe spam
supongo que en tu código ya habrás inhibido el cálculo automático de las
fórmulas y la actualización de la pantalla.



"JC" escribió en el mensaje de noticias
news:
Hola Pepe:

Y antes de nada, agradecer tu rápidez en responder y tu interés.
Es precisamente por ello (tener que ordenar las tablas), por lo que empleo
el indice-coincidir, que no el buscarV.
Y teniendo la misma raiz de busqueda (al menos es lo que me bulle por la
cabeza), no pensaba que me fuera a ahorrar una gran cantidad de tiempo.
Lo probaré, por supuesto. Hay que aprender y poder descartar por hecho y
no
por que me parezca a mí otra cosa.
No obstante, si os ocurriera alguna otra idea de como poder acortar los
tiempos de respuesta en la consulta, os lo agradecería infinito.

Mil gracias de nuevo Pepe, espero poderte decir algo en un par de días (lo
que tarde en realizar los cambios adecuados, ya que el funcionamiento
completo de la macro en un poco más completo y complejo de lo que he
resumido
por aquí.

Un abrazo.

Juan Carlos

"pepe" wrote:

Sería mucho más rápido su utilizases buscarv en las fórmulas (previamente
tendrías que ordenar la base de datos por la columna de búsqueda).


"JC" escribió en el mensaje de noticias
news:
> Hola Amigos:
>
> Vuelvo a recurrir a Vosotros, para ver si mis complicaciones tienen
> alguna
> solución.
> Como siempre os pido que acepteis mis disculpas, si no se expresarme
> con
> toda la claridad que sería mi deseo.
>
> Estoy confeccionando una herramientita, para diariamente poder
> actualizar
> una base de datos de 30.000 productos.
>
> Tengo 2 posibles fuentes de consulta, para los datos que necesito en la
> hoja
> 1, si no lo encuentro en la 1ª base de datos (hoja 2), tiene que ir a
> la
> 2ª
> (hoja 3) a realizar la operación.
>
> La gran pega es que son 32 columnas por los 30.000 registros en filas y
> se
> "eterniza", ya que el cálculo se va a las 5 horas y pico.
> Ya que estoy empleando, (después de averiguar la cantidad de filas que
> son,
> ya que, diariamente se crean productos nuevos:
> x = 2
> While Cells(x, 1) <> ""
> x = x + 1
> Wend
>
> Formulas de este tipo:
> =SI((INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1))=0;(INDICE('BASE_DATOS_2'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_2'!$Q:$Q;1);1));(INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1)))
>
> Con un paste & copy:
> Worksheets("DL").Range("AP2:BU2").Copy _
> Destination:=Range(Cells(3, 2), Cells((x - 1), 33))
>
> Sabríais, por favor, decirme o aconsejarme algún otro sistema o si
> conocéis
> un método diferente, para conseguir realizar esta labor recortando
> sensiblemente los tiempos de cálculo ???
>
> Mil gracias por adelantado y si (como es seguro) me he dejado algún
> dato
> sin
> aportar, no dudeis, por favor, en comentarmelo.
>
> Un reconocido abrazo.
>
> Juan Carlos.


Respuesta Responder a este mensaje
#4 Héctor Miguel
29/06/2009 - 20:50 | Informe spam
hola, Juan Carlos !

(como que) no sera facil reproducir el ambiente que describes para intentar tambien reproducir el comportamiento...
sin "ahondar" en mas averiguaciones, pareciera que ese archivo necesita (con urgencia) una "cirugia mayor"

para temas generales (consejos/trucos/etc.) acerca de mejorar el rendimiento en modelos particulares...
-> http://www.decisionmodels.com/optspeed.htm
-> http://www.ozgrid.com/News/GoodVsBa...Events.htm
-> http://www.mvps.org/dmcritchie/excel/slowresp.htm

para el caso de excel 2007 puedes revisar el siguiente articulo:
-> Improving Performance in Excel 2007
http://msdn2.microsoft.com/en-us/li...30921.aspx
(escrito por Charles Williams del primer link en el parrafo anterior)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ OP __
Vuelvo a recurrir a Vosotros, para ver si mis complicaciones tienen alguna
solución.
Como siempre os pido que acepteis mis disculpas, si no se expresarme con
toda la claridad que serà­a mi deseo.

Estoy confeccionando una herramientita, para diariamente poder actualizar
una base de datos de 30.000 productos.

Tengo 2 posibles fuentes de consulta, para los datos que necesito en la hoja
1, si no lo encuentro en la 1ª base de datos (hoja 2), tiene que ir a la 2ª
(hoja 3) a realizar la operación.

La gran pega es que son 32 columnas por los 30.000 registros en filas y se
"eterniza", ya que el cà¡lculo se va a las 5 horas y pico.
Ya que estoy empleando, (después de averiguar la cantidad de filas que son,
ya que, diariamente se crean productos nuevos:
x = 2
While Cells(x, 1) <> ""
x = x + 1
Wend

Formulas de este tipo:
=SI((INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1))=0;(INDICE('BASE_DATOS_2'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_2'!$Q:$Q;1);1));(INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1)))

Con un paste & copy:
Worksheets("DL").Range("AP2:BU2").Copy _
Destination:=Range(Cells(3, 2), Cells((x - 1), 33))

Sabrà­ais, por favor, decirme o aconsejarme algàºn otro sistema o si conocéis
un método diferente, para conseguir realizar esta labor recortando
sensiblemente los tiempos de cà¡lculo ???

Mil gracias por adelantado y si (como es seguro) me he dejado algàºn dato sin
aportar, no dudeis, por favor, en comentarmelo.

Un reconocido abrazo.

Juan Carlos.
Respuesta Responder a este mensaje
#5 JC
01/07/2009 - 09:30 | Informe spam
Hola Pepe:

La actualización de pantalla creo que si, ya que al principio y final de las
sub´s, inserto los comandos:
Sub VERIFICACION_INDICE()
Application.ScreenUpdating = False
xxx...
Application.ScreenUpdating = True
End Sub
Lo que ignoro es lo de inhibir el cálculo automático de fórmulas y te
estaría muy agradecido si me pudieras ampliar este punto.

Mil gracias Pepe y un abrazo.

"pepe" wrote:

supongo que en tu código ya habrás inhibido el cálculo automático de las
fórmulas y la actualización de la pantalla.



"JC" escribió en el mensaje de noticias
news:
> Hola Pepe:
>
> Y antes de nada, agradecer tu rápidez en responder y tu interés.
> Es precisamente por ello (tener que ordenar las tablas), por lo que empleo
> el indice-coincidir, que no el buscarV.
> Y teniendo la misma raiz de busqueda (al menos es lo que me bulle por la
> cabeza), no pensaba que me fuera a ahorrar una gran cantidad de tiempo.
> Lo probaré, por supuesto. Hay que aprender y poder descartar por hecho y
> no
> por que me parezca a mí otra cosa.
> No obstante, si os ocurriera alguna otra idea de como poder acortar los
> tiempos de respuesta en la consulta, os lo agradecería infinito.
>
> Mil gracias de nuevo Pepe, espero poderte decir algo en un par de días (lo
> que tarde en realizar los cambios adecuados, ya que el funcionamiento
> completo de la macro en un poco más completo y complejo de lo que he
> resumido
> por aquí.
>
> Un abrazo.
>
> Juan Carlos
>
> "pepe" wrote:
>
>> Sería mucho más rápido su utilizases buscarv en las fórmulas (previamente
>> tendrías que ordenar la base de datos por la columna de búsqueda).
>>
>>
>> "JC" escribió en el mensaje de noticias
>> news:
>> > Hola Amigos:
>> >
>> > Vuelvo a recurrir a Vosotros, para ver si mis complicaciones tienen
>> > alguna
>> > solución.
>> > Como siempre os pido que acepteis mis disculpas, si no se expresarme
>> > con
>> > toda la claridad que sería mi deseo.
>> >
>> > Estoy confeccionando una herramientita, para diariamente poder
>> > actualizar
>> > una base de datos de 30.000 productos.
>> >
>> > Tengo 2 posibles fuentes de consulta, para los datos que necesito en la
>> > hoja
>> > 1, si no lo encuentro en la 1ª base de datos (hoja 2), tiene que ir a
>> > la
>> > 2ª
>> > (hoja 3) a realizar la operación.
>> >
>> > La gran pega es que son 32 columnas por los 30.000 registros en filas y
>> > se
>> > "eterniza", ya que el cálculo se va a las 5 horas y pico.
>> > Ya que estoy empleando, (después de averiguar la cantidad de filas que
>> > son,
>> > ya que, diariamente se crean productos nuevos:
>> > x = 2
>> > While Cells(x, 1) <> ""
>> > x = x + 1
>> > Wend
>> >
>> > Formulas de este tipo:
>> > =SI((INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1))=0;(INDICE('BASE_DATOS_2'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_2'!$Q:$Q;1);1));(INDICE('BASE_DATOS_1'!$I:$I;COINCIDIR($AM2;'BASE_DATOS_1'!$Q:$Q;0);1)))
>> >
>> > Con un paste & copy:
>> > Worksheets("DL").Range("AP2:BU2").Copy _
>> > Destination:=Range(Cells(3, 2), Cells((x - 1), 33))
>> >
>> > Sabríais, por favor, decirme o aconsejarme algún otro sistema o si
>> > conocéis
>> > un método diferente, para conseguir realizar esta labor recortando
>> > sensiblemente los tiempos de cálculo ???
>> >
>> > Mil gracias por adelantado y si (como es seguro) me he dejado algún
>> > dato
>> > sin
>> > aportar, no dudeis, por favor, en comentarmelo.
>> >
>> > Un reconocido abrazo.
>> >
>> > Juan Carlos.
>>
>>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida