Rapidez de VBA con select case/if else

Resuelto
ed555 Mensajes publicados 61 Fecha de registro   Estado Miembro Última intervención   -  
ed555 Mensajes publicados 61 Fecha de registro   Estado Miembro Última intervención   -
Hola al foro,

Tengo una pequeña pregunta sobre la rapidez de las pruebas condicionales en VBA. En un programa bastante grande, llamo una gran cantidad de veces a una función, que toma tal o cual valor según el valor de otro parámetro.

Me gustaría acelerar al máximo la ejecución del código. ¿Existe alguna de las dos métodos (select-case o if-else) que sea más rápido que el otro? Tras hacer algunas búsquedas en la web no he encontrado una respuesta a mi pregunta (ambos bandos suenan bien...).

Gracias de antemano!
ed

Configuración: Windows 7 / Chrome 19.0.1084.52

2 respuestas

eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
Bonsoir,

J’aurai tendance à dire que c’est du pareil au même bien que seul un test pourrait y répondre.
En moyenne tu feras la moitié des tests avant de trouver le bon.

Le Select Case à l’avantage de la lecture facilitée.

Ce que tu pourrais faire, si c’est possible, c’est de trouver des grands groupes.
Par exemple tu dois tester des nombres de 1 à 100 (50 tests en moyenne)
Tu fais 4 tests <=25, 26 à 50 etc. Et à l’intérieur tu testes individuellement les valeurs concernées. tu passeras à 2+13=15 tests en moyenne, soit plus de 60% de gain.
Ou bien déterminer la probabilité de True à chaque test et les faire dans cet ordre. Si 60% de ta base a "ok", 30% "en cours" et les 10% suivant 50 messages d’anomalie divers autant tester en premier "ok" puis "en cours", dans 90% des cas tu ne feras que 2 tests.
Ca peut se faire aussi bien par if ou select.

Il y a aussi les techniques classiques pour accélérer : déclarer et typer ses variables (pas en variant si possible, en long tant qu’on peut pour les numériques), travailler en mémoire plutôt que sur les feuilles. Utiliser si besoin les dictionary.

Et puis il y a peut-être une autre façon d’aborder le problème. Mais sans éléments...

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c’est fait.
0
eriiic Mensajes publicados 24581 Fecha de registro   Estado Colaborador Última intervención   7 281
 
de nada !!!
0
ed555 Mensajes publicados 61 Fecha de registro   Estado Miembro Última intervención  
 
ups, ¡todas mis disculpas! Me parecía haber respondido... ¡gracias!
0
ed555 Mensajes publicados 61 Fecha de registro   Estado Miembro Última intervención  
 
efectivamente debe haber habido un fallo porque recuerdo bien haberte agradecido y saludado la astucia de tu técnica (que en mi caso desafortunadamente no se aplica). ¡que tengas un buen día!
0
lermite222 Mensajes publicados 9042 Estado Colaborador 1 199
 
Hola,
Lo más fácil es que lo pruebes tú mismo.
Al inicio de la función pones
Dim T T=Timer

Y justo antes de la salida de la función
 MsgBox Timer - T

Pruebas tu función con IF/else y con select case.
Y así... ya solo tendrás una campana. :D
Nos vemos

--
Si te golpeas en una jarra y suena hueca, no significa necesariamente que la jarra esté vacía. ;-)(Confucius)
NOTA : No respondo a los MP para preguntas técnicas.
0
ed555 Mensajes publicados 61 Fecha de registro   Estado Miembro Última intervención  
 
gracias lermite222,
lo que me incomoda un poco del temporizador es que, dependiendo de los procesos que estén ejecutándose en tu ordenador, no siempre obtienes el mismo resultado para dos pruebas idénticas.
finalmente logré sortear el problema!
que tengas un buen día, ed
0