Calculer la SOMME en VBA: différentes méthodes

Une question très fréquente que se posent les utilisateurs de VBA est "quel est l'équivalent de la fonction Excel SOMME en VBA?". La réponse est qu'il n'y a pas de fonction native en VBA qui ferait la même chose que la fonction SOMME dans Excel. Mais comme VBA est un langage très flexible, il n'est pas bien compliqué d'obtenir le résultat souhaité grâce aux quelques lignes de code…

En gros, vous avez plusieurs possibilités. J'en ai choisi deux que je vais vous décrire dans ce tutoriel. Elles ont chacune ses avantages et ses inconvénients. À vous de choisir celle qui convient le mieux à votre situation.

Méthode 1: SOMME en VBA avec des boucles (loop)

La première méthode utilise les boucles, une fonctionnalité des plus classiques en VBA. Vous définissez les cellules que vous voulez inclure dans votre calcul de somme et ensuite vous parcourez toutes ces cellules en additionnant leur valeurs.

Deux avantages principaux: 1) une grande flexibilité concernant les plages et 2) la possibilité de faire une autre opération en même temps: par exemple utiliser des conditions (If...Then...Else End If) pour choisir si la cellule doit être incluse dans la somme.

Le principe de la somme consiste à déterminer une variable qui va contenir les sommes intermédiaires. Dans le code ci-dessous, on l'appelle MaSomme. Au départ, on lui assigne la valeur 0 (MaSomme = 0) et ensuite, à chaque cellule parcourue dans la boucle, on ajoute la nouvelle valeur à la somme existante (ici: MaSomme = MaSomme + UneCellule.Valeur )

Les procédures qui suivent sont des exemples de "comment cela fonctionne". Vous pouvez évidemment les transformer en fonctions et les utiliser comme fonctions pour directement obtenir les résultats.

Voici deux exemples du code de SOMME en VBA avec des boucles

Tout d'abord le code qui additionne les valeurs des cellules sélectionnées:

Attention: Notez la condition If IsNumeric(UneCellule.Value) = True Then utilisée dans le code. Elle sert à prévenir que le code crashe au cas où une ou plusieurs des cellules dans la sélection contient une valeur non numérique.

Le code suivant additionne les cellules au choix dans une colonne déterminée:

 

Cette méthode vous permet de changer dynamiquement les plages à additionner: vous pouvez faire une boucle sur les lignes (comme dans l'exemple plus haut) que vous imbriquez dans une boucle sur les colonnes. Vous pourrez donc faire la somme, par exemple, de la 5ème à la 25ème ligne dans la 3ème à 15ème colonne… Et voici le code VBA pour illustrer cette solution.

Méthode 2: SOMME en VBA avec WorksheetFunction

La deuxième méthode pour faire la SOMME en VBA que je vous propose repose sur la fonction SOMME d'Excel que VBA "emprunte" grâce à la méthode WorksheetFunction. (Tout sur les WorksheetFunction en général dans ce tutoriel…)

Ici, comme on utilise la fonction empruntée d'Excel, elle se comporte exactement de la même manière. Les avantages: la vitesse, la facilité (1 ou 2 lignes de code) et la possibilité de combiner différentes plages sur la même Feuille ou même sur les Feuilles différentes en un seul calcul.

Tout ce que vous avez à faire c'est définir la plage à additionner (par ex.: Set MaPlage = Range("A1:A5") ) et ensuite introduire cette plage dans la fonction SOMME d'Excel (MaSomme = Application.WorksheetFunction.Sum(MaPlage) ).

Attention, VBA est exclusivement anglophone donc vous n'utilisez pas "somme" mais bien "sum"!  Le code MaSomme = Application.WorksheetFunction.Somme(MaPlage) ne fonctionnera donc pas! (Astuce: les équivalents anglais de toutes les fonctions Excel sont disponibles dans la Liste de toutes les fonctions Excel).

Et voici 3 exemples de la SOMME en VBA avec l'utilisation de WorksheetFunction

Pour commencer, la plus simple: somme des cellules A2:A600 :

 

L'exemple suivant montre qu'il est possible de faire la somme des plages non contiguës se trouvant sur la même Feuille. Tout dépend de la définition de la plage à additionner (ici Range("A2:A600, B6:B7")):

Et voici le 3ème exemple qui montre que l'on peut additionner même les plages se trouvant sur des Feuilles différentes. Vous devez ajouter le nom de la Feuille à la définition de la plage (ex.: Set Plage_3 = Sheets("Feuil2").Range("F2:F600")).

Attention, si vous ne définissez pas la Feuille explicitement, ce sont les plages de la feuille ACTIVE qui seront additionnées.

 

Conclusion de ce tutoriel

Voici donc une (ou plutôt des) manière(s) simple(s) pour calculer une somme en VBA. Ceci est un bon exemple de la flexibilité de VBA où, contrairement à d'autres langages (comme Python), vous pouvez obtenir le même résultat de différentes manières. Cela vous donne la possibilité d'utiliser la manière qui convient le mieux à votre style mais également qui convient le mieux au cas précis sur lequel vous travaillez…

Vous pouvez donc être assez créatifs en VBA – et je vous assure, avec le temps et l'expérience, la créativité vient toute seule!

Pour aller plus loin en VBA

Et pour finir, voici quelques autres tutoriels et articles qui pourraient vous être utiles pour vos macros en VBA…

 

Laissez un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

9 commentaires sur “Calculer la SOMME en VBA: différentes méthodes”