Accueil | Ce site | CV | Excel | Livre dor | Macros XL4 | Modèles | VBA
Le premier paramètre est une bonne connaissance des fonctionnalités dExcel et de VBA : Si quelque chose préexiste, mieux vaut lutiliser que le réécrire en VBA. On gagne à la fois du temps de développement et de la vitesse dexécution.
Dautres éléments ont une incidence significative : par exemple
Le gain de temps est particulièrement important lorsquon parvient ainsi à remplacer une boucle par définition, un traitement répétitif - par un traitement unique.
Voici quelques exemples :
Imaginons que nous ayons besoin de connaître le nombre de cellules dans un Objet Range, comme Selection.
On peut écrire une boucle qui utilise une variable pour compter les cellules :
Sub CpteCellules() Dim c As Range, i As Integer For Each c In Selection i = i + 1 Next c MsgBox i End Sub
Cela marche parfaitement, mais cest une mauvaise approche. Lobjet Range possède la propriété Count, qui fournit précisément linformation recherchée. Il faut donc écrire :
Sub CpteCellules() Msgbox Selection.Count End Sub
Cest plus simple, plus rapide et donc plus efficace.
Pour déterminer la plus grande valeur dans une plage de cellules, on peut encore écrire une boucle qui explore les cellules concernées, et pour chaque cellule effectue un test pour comparer la valeur de la cellule, et la valeur maximale rencontrée.
Avant le test, il faut initialiser la variable destinée à stocker la valeur recherchée. Utiliser 0 (zéro) comme valeur initiale est une mauvaise idée, car si toutes les cellules contiennent une valeur négative, la valeur maximale ne sera pas trouvée. Il faut donc initialiser la variable en prenant la valeur de lune des cellules de lobjet Range, en pratique la première cellule de la sélection :
Sub MaxCellules() Dim c As Range, Max As Double Max = Selection(1, 1) For Each c In Selection If c > Max Then Max = c End If Next c MsgBox Max End Sub
Cette procédure renvoie la valeur maximale, mais nest valable que si toutes les cellules de la sélection contiennent un nombre. Voir lanalyse détaillée de ce code.
Cette analyse na quune valeur pédagogique, car la fonction MAX() dExcel donne directement le résultat recherché :
Sub MaxCellules3() MsgBox Application.WorksheetFunction.Max(Selection) End Sub
La propriété WorksheetFunction de lobjet Application permet daccéder directement à de nombreuses fonctions dExcel qui nexistent pas dans VBA. Attention, il faut utiliser le nom anglais de la fonction.