Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédenteProchaine révisionLes deux révisions suivantes | ||
tutoriel:programmation:vba:optimisationvba [2020/09/04 22:27] – admin | tutoriel:programmation:vba:optimisationvba [2021/02/17 15:44] – ↷ Page déplacée de fr:tutoriel:programmation:vba:optimisationvba à tutoriel:programmation:vba:optimisationvba admin | ||
---|---|---|---|
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 233: | 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 243: | Ligne 242: | ||
* DO.. LOOP (UNTIL/ | * DO.. LOOP (UNTIL/ | ||
- | ==== Boucle for ==== | + | ===== Boucle for ===== |
Forme optimisée : | Forme optimisée : | ||
Ligne 260: | Ligne 259: | ||
NEXT | NEXT | ||
- | ==== Boucle do ==== | + | ===== Boucle do ===== |
* Do.. Loop (While/ | * Do.. Loop (While/ | ||
Ligne 275: | 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 285: | 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. |