VBA rapidité select case/if else
Résolu
ed555
Messages postés
63
Statut
Membre
-
ed555 Messages postés 63 Statut Membre -
ed555 Messages postés 63 Statut Membre -
Bonjour le forum,
J'ai une petite question concernant la rapidité des tests conditionnels en VBA. Dans un programme assez conséquent, je fais appel un grand nombre de fois à une fonction, qui prend telle ou telle valeur selon la valeur d'un autre paramètre.
J'aimerais accélérer autant que possible l'exécution du code. Y a-t-il une des deux méthodes (select-case ou if-else qui soit plus rapide que l'autre ? En faisant quelques recherches sur le net je n'ai pas trouvé de réponse à ma question (les deux sons de cloches sont là...).
Merci d'avance!
ed
J'ai une petite question concernant la rapidité des tests conditionnels en VBA. Dans un programme assez conséquent, je fais appel un grand nombre de fois à une fonction, qui prend telle ou telle valeur selon la valeur d'un autre paramètre.
J'aimerais accélérer autant que possible l'exécution du code. Y a-t-il une des deux méthodes (select-case ou if-else qui soit plus rapide que l'autre ? En faisant quelques recherches sur le net je n'ai pas trouvé de réponse à ma question (les deux sons de cloches sont là...).
Merci d'avance!
ed
A voir également:
- Select case vba
- Case à cocher word ✓ - Forum Word
- Incompatibilité de type vba ✓ - Forum Programmation
- Excel case choix multiple - Guide
- Aller à la ligne dans une case excel - Guide
- Case à cocher open office - Forum LibreOffice / OpenOffice
2 réponses
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.
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.
eriiic
Messages postés
25847
Statut
Contributeur
7 279
de rien !!!
ed555
Messages postés
63
Statut
Membre
oups, toutes mes excuses! il me semblait avoir répondu... merci !
ed555
Messages postés
63
Statut
Membre
effectivement il y a du y avoir un bug car je me rappelle bien t'avoir remercié et salué l'astuciosité de ta technique (qui dans mon cas malheureusement ne s'applique pas). bonne journée !