Accueil | Ce site | CV | Excel | Livre d’or | Macros XL4 | Modèles | VBA

 Optimiser la vitesse d’exécution

Le premier paramètre est une bonne connaissance des fonctionnalités d’Excel et de VBA : Si quelque chose préexiste, mieux vaut l’utiliser que le réécrire en VBA. On gagne à la fois du temps de développement et de la vitesse d’exécution.

D’autres éléments ont une incidence significative : par exemple

Le gain de temps est particulièrement important lorsqu’on parvient ainsi à remplacer une boucle – par définition, un traitement répétitif - par un traitement unique.

Voici quelques exemples :

Nombre de cellules dans une plage

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 c’est une mauvaise approche. L’objet Range possède la propriété Count, qui fournit précisément l’information recherchée. Il faut donc écrire :

Sub CpteCellules()
     Msgbox Selection.Count
End Sub

C’est plus simple, plus rapide et donc plus efficace.

Valeur maximale dans une plage de cellules

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 l’une des cellules de l’objet 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 n’est valable que si toutes les cellules de la sélection contiennent un nombre. Voir l’analyse détaillée de ce code.

Cette analyse n’a qu’une valeur pédagogique, car la fonction MAX() d’Excel donne directement le résultat recherché :

Sub MaxCellules3()
    MsgBox Application.WorksheetFunction.Max(Selection)
End Sub

La propriété WorksheetFunction de l’objet Application permet d’accéder directement à de nombreuses fonctions d’Excel qui n’existent pas dans VBA. Attention, il faut utiliser le nom anglais de la fonction.