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

#6 JC
01/07/2009 - 09:38 | Informe spam
Hola Héctor Miguel:

Tiempo hacía tiempo que no cruzabamos palabras por aquí, un placer
encontrarte de nuevo y con tantas ganas como siempre.
Yo, por desgracia, entre mi labores profesionales, mis hobbyes y mi escaso
dominio del inglés, estoy sinceramente agradecido a tu más que generoso
conocimiento del medio y tu desinteresado interés en ayudarnos a todos, con
nuestros "pequeños" y los más "grandes" problemas que nos surjen con nuestro
"amigo Excel", pero busco una respuesta o indicación rápida, ya que mi
dedicación no es la programación y no le puedo (debo... quiero...), dedicar
más tiempo que el estrictamente necesario.

Mil gracias y un sincero abrazo Héctor Miguel.

"Héctor Miguel" wrote:

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
#7 Héctor Miguel
01/07/2009 - 10:10 | Informe spam
hola, Juan Carlos !

... busco una respuesta o indicacion rapida, ya que mi dedicacion no es la programacion
y no le puedo (debo... quiero...), dedicar mas tiempo que el estrictamente necesario...



pregunta "chusca" (hablando del tiempo "estrictamente necesario"):

a que "dedicas" cada dia el tiempo "perdido" (5 horas "y pico") que se tarda en actualizar esa "herramientita" ???
crees que valdria la pena si "subes" un ejemplo (FIEL) en algun sitio de hospedaje (publico/gratuito) como rapidshare ?
(tendrias la oportunidad de participacion de varios en este foro, no crees ?)

saludos,
hector.
Respuesta Responder a este mensaje
#8 pepe
01/07/2009 - 15:17 | Informe spam
Application.Calculation=xlCalculationManual


"JC" escribió en el mensaje de noticias
news:
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
#9 JC
01/07/2009 - 16:58 | Informe spam
OK Pepe:

Mil gracias, ahora ya recuerdo este comando, con el que puedes alternar
entre que no se efectue el cálculo de las fórmulas y que se haga normalmente
de forma automática:
Application.Calculation = xlManual

Application.Calculation = xlAutomatic

Aunque a esto no le veo aplicación en mi problemática.

Gracias de nuevo Pepe y un fuerte abrazo.

"pepe" wrote:

Application.Calculation=xlCalculationManual


"JC" escribió en el mensaje de noticias
news:
> 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
#10 JC
01/07/2009 - 17:15 | Informe spam
Hola de nuevo Héctor Miguel:

Sinceramente agradecido por tus constantes y enormes ganas de ayudarnos
siempre y en todo momento.

El tiempo de "espera", lo paso habitualmente en mi casa. Ya que dejo la
tarea trabajando, una vez que voy a salir del "laboro" e intento hacer el
seguimiento en remoto.

Me remuerde la conciencia el molestaros durante mucho tiempo con "mis"
problemas y robaros tiempo para otras cosas, aunque es una verdadera
tentación, intentar buscar una manera de que esta rutina funcionara en un
tiempo +/- asequible.

Miro a ver de poder subir el archivo Excel, un .txt con la rutina y breve
explicación de lo que hace y mi idea de por qué hace lo que hace.
Ya que el problema es que en el trabajo, tenemos casi toda la web "capada" y
no tengo acceso a páginas de subida de archivos, para poderlos colgar.

Un millón de gracias Héctor Miguel y un fuerte abrazo, te comento en breve.
(Espero...)

"Héctor Miguel" wrote:

hola, Juan Carlos !

> ... busco una respuesta o indicacion rapida, ya que mi dedicacion no es la programacion
> y no le puedo (debo... quiero...), dedicar mas tiempo que el estrictamente necesario...

pregunta "chusca" (hablando del tiempo "estrictamente necesario"):

a que "dedicas" cada dia el tiempo "perdido" (5 horas "y pico") que se tarda en actualizar esa "herramientita" ???
crees que valdria la pena si "subes" un ejemplo (FIEL) en algun sitio de hospedaje (publico/gratuito) como rapidshare ?
(tendrias la oportunidad de participacion de varios en este foro, no crees ?)

saludos,
hector.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida