Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
tutoriel:programmation:vba:optimisationvba [2021/02/17 15:44] – ↷ Page déplacée de fr:tutoriel:programmation:vba:optimisationvba à tutoriel:programmation:vba:optimisationvba admin | tutoriel:programmation:vba:optimisationvba [2022/08/13 21:58] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 11: | Ligne 11: | ||
* http:// | * http:// | ||
- | ====== Avant propos | + | ===== Avant propos ===== |
Voici un petit recueil d' | Voici un petit recueil d' | ||
Ligne 18: | Ligne 18: | ||
Dans une certaine mesure, ces optimisations sont applicables pour un programme VB compilé. | Dans une certaine mesure, ces optimisations sont applicables pour un programme VB compilé. | ||
- | ====== Généralités | + | ===== Généralités ===== |
Par optimisation, | Par optimisation, | ||
Ligne 25: | Ligne 25: | ||
Mais, la meilleure optimisation reste d’un autre ordre non évoqué ici, consistant à trouver le meilleur algorithme, qui dépend que de votre réflexion ! | Mais, la meilleure optimisation reste d’un autre ordre non évoqué ici, consistant à trouver le meilleur algorithme, qui dépend que de votre réflexion ! | ||
- | ====== Optimisation des variables | + | ===== Optimisation des variables ===== |
- | ===== Déclarations des variables | + | ==== Déclarations des variables ==== |
La déclaration du type de variable est une première optimisation extrêmement classique et indispensable. | La déclaration du type de variable est une première optimisation extrêmement classique et indispensable. | ||
Ligne 54: | Ligne 54: | ||
</ | </ | ||
- | ===== Utilisation des tableaux (Dim) ===== | + | ==== Utilisation des tableaux (Dim) ==== |
Quelques évidences. | Quelques évidences. | ||
Ligne 64: | Ligne 64: | ||
Par exemple, éviter de réutiliser Redim (Preserve). | Par exemple, éviter de réutiliser Redim (Preserve). | ||
- | ====== Optimisation sur les nombres | + | ===== Optimisation sur les nombres ===== |
- | ===== Longueur d'un nombre entier positif ou nul ===== | + | ==== Longueur d'un nombre entier positif ou nul ==== |
Pour connaître le nombre de chiffres | Pour connaître le nombre de chiffres | ||
Ligne 80: | Ligne 80: | ||
Fix(Log(Abs(nb) + 0.11) / Log(10)) + 2 | Fix(Log(Abs(nb) + 0.11) / Log(10)) + 2 | ||
- | ===== Parité d’un nombre | + | ==== Parité d’un nombre ==== |
* Pour tester si un nombre est pair : | * Pour tester si un nombre est pair : | ||
Ligne 92: | Ligne 92: | ||
<note tip> | <note tip> | ||
- | ===== Calculs des puissances entières | + | ==== Calculs des puissances entières ==== |
Curieuse fonction que " ^ " qui s’effectue en un temps quasi-constant quelle que soit la puissance, mais reste moins rapide que la multiplication successive jusqu’à puissance 9 environ. | Curieuse fonction que " ^ " qui s’effectue en un temps quasi-constant quelle que soit la puissance, mais reste moins rapide que la multiplication successive jusqu’à puissance 9 environ. | ||
Ligne 98: | Ligne 98: | ||
nb = lg * lg * ... * lg | nb = lg * lg * ... * lg | ||
- | ===== Calcul de la racine carrée | + | ==== Calcul de la racine carrée ==== |
lg = Sqr(nb) | lg = Sqr(nb) | ||
Ligne 104: | Ligne 104: | ||
<note tip> | <note tip> | ||
- | ===== Division entière | + | ==== Division entière ==== |
Si les nombres peuvent être déclarés en type Long sans dépassement de capacité, | Si les nombres peuvent être déclarés en type Long sans dépassement de capacité, | ||
Ligne 110: | Ligne 110: | ||
nb = nb1 \ nb2 | nb = nb1 \ nb2 | ||
- | ===== Pré-calcul | + | ==== Pré-calcul ==== |
Il faut sortir d'une boucle tous les calculs d’expression constante. | Il faut sortir d'une boucle tous les calculs d’expression constante. | ||
Ligne 118: | Ligne 118: | ||
lg = nb * z | lg = nb * z | ||
- | ===== Maximum et Minimum de 2 nombres | + | ==== Maximum et Minimum de 2 nombres ==== |
if a<b then max=b else max=b | if a<b then max=b else max=b | ||
if a<b then min=a else min=b | if a<b then min=a else min=b | ||
- | ====== Optimisation des tests ====== | + | ===== Optimisation des tests ===== |
- | ===== Vérification d’une condition avec renvoi Booléan | + | ==== Vérification d’une condition avec renvoi Booléan ==== |
a=(condition) | a=(condition) | ||
Ligne 132: | Ligne 132: | ||
L’interprétation est facile, si b=c alors VB remplace en interne cette condition par la valeur vraie (True), puis l’affecte à " | L’interprétation est facile, si b=c alors VB remplace en interne cette condition par la valeur vraie (True), puis l’affecte à " | ||
- | ===== Fonctions conditionnelles | + | ==== Fonctions conditionnelles ==== |
(non exhaustif vu les très nombreuses formes imaginables) | (non exhaustif vu les très nombreuses formes imaginables) | ||
Ligne 162: | Ligne 162: | ||
On pourrait se poser la question si on a une série de conditions rassemblées avec un opérateur logique, par exemple OR. Mais la structure " If... Then... ElseIf... End If " pourrait être toujours utilisée et resterait le plus rapide, malgré une très grosse lourdeur dans le codage, puisqu' | On pourrait se poser la question si on a une série de conditions rassemblées avec un opérateur logique, par exemple OR. Mais la structure " If... Then... ElseIf... End If " pourrait être toujours utilisée et resterait le plus rapide, malgré une très grosse lourdeur dans le codage, puisqu' | ||
- | ===== Les différentes écritures de If ===== | + | ==== Les différentes écritures de If ==== |
En VBA, les différentes formes d' | En VBA, les différentes formes d' | ||
Ligne 169: | Ligne 169: | ||
If (condition) Then (instructions1) Else (instructions2) | If (condition) Then (instructions1) Else (instructions2) | ||
- | ====== Optimisation des références | + | ===== Optimisation des références ===== |
Lorsque des objets sont appelés plusieurs fois, il est avantageux d’utiliser " | Lorsque des objets sont appelés plusieurs fois, il est avantageux d’utiliser " | ||
Ligne 189: | Ligne 189: | ||
End Sub | End Sub | ||
| | ||
- | ====== Optimisation des chaînes | + | ===== Optimisation des chaînes ===== |
Certaines fonctions sur les chaînes existent en deux versions, correspondant soit à un type de données en Variant, soit en String déclaré par le signe dollar ($). Cette dernière version est la plus rapide. | Certaines fonctions sur les chaînes existent en deux versions, correspondant soit à un type de données en Variant, soit en String déclaré par le signe dollar ($). Cette dernière version est la plus rapide. | ||
Ligne 232: | Ligne 232: | ||
lg = String$(1000, | lg = String$(1000, | ||
- | ====== Optimisation des boucles | + | ===== Optimisation des boucles ===== |
La variable d’une boucle doit être déclarée pour être optimale. Option Explicit est donc très pratique ici... | La variable d’une boucle doit être déclarée pour être optimale. Option Explicit est donc très pratique ici... | ||
Ligne 242: | Ligne 242: | ||
* DO.. LOOP (UNTIL/ | * DO.. LOOP (UNTIL/ | ||
- | ===== Boucle for ===== | + | ==== Boucle for ==== |
Forme optimisée : | Forme optimisée : | ||
Ligne 259: | Ligne 259: | ||
NEXT | NEXT | ||
- | ===== Boucle do ===== | + | ==== Boucle do ==== |
* Do.. Loop (While/ | * Do.. Loop (While/ | ||
Ligne 274: | Ligne 274: | ||
Loop Until A = 10000000 | Loop Until A = 10000000 | ||
- | ===== Exécuter une instruction une fois sur x passages | + | ==== Exécuter une instruction une fois sur x passages ==== |
Forme optimisée : | Forme optimisée : | ||
Ligne 284: | Ligne 284: | ||
Next nb | Next nb | ||
- | ====== Optimisation pour Excel ====== | + | ===== Optimisation pour Excel ===== |
Pour un gain global, il peut être intéressant de désactiver certains processus intrinsèques à Excel. | Pour un gain global, il peut être intéressant de désactiver certains processus intrinsèques à Excel. |