Calculer SOMME en VBA: différentes méthodes



Je reçois souvent la question de savoir 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 compliqué d'obtenir le même résultat avec quelques lignes de code…

En gros, vous avez deux possibilités qui seront décrites dans le texte qui suit. 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: une grande flexibilité concernant les plages et 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 )

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

Le code qui additionne les valeurs des cellules sélectionnées:

Sub SommeEnVBA_1a()
'par Excel-Malin.com (https://excel-malin.com)

'calcul de somme en VBA: utilisation de boucles
'>> la somme des cellules sélectionnées
'---------------------------------------------------------------------
MaSomme = 0

For Each UneCelulle In Selection.Cells
    MaSomme = MaSomme + UneCellule.Value
Next UneCellule

MsgBox MaSomme

End Sub

 

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

Sub SommeEnVBA_1b()
'par Excel-Malin.com (https://excel-malin.com)

'calcul de somme en VBA: utilisation de boucles
'>> la somme de x  cellules d'une colonne donnée
'---------------------------------------------------------------------

MaColonne = 3 '(= colonne "C")
MaPremiereLigne = 2
MaDerniereLigne = 1000

MaSomme = 0

For UneLigne = MaPremiereLigne To MaDerniereLigne
    MaSomme = MaSomme + Cells(UneLigne, MaColonne).Value
Next UneCellule

MsgBox MaSomme

End Sub

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

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 :

Sub SommeEnVBA_2a()
'par Excel-Malin.com (https://excel-malin.com)

'calcul de somme en VBA: utilisation de WorksheetFunction
'---------------------------------------------------------------------
Set MaPlage = Range("A2:A600")

MaSomme = Application.WorksheetFunction.Sum(MaPlage)
MsgBox MaSomme

End Sub

 

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")):

Sub SommeEnVBA_2b()
'par Excel-Malin.com (https://excel-malin.com)

'calcul de somme en VBA: utilisation de WorksheetFunction
'>> pour une plage non contiguë
'---------------------------------------------------------------------
Set MaPlage = Range("A2:A600, B6:B7")

MaSomme = Application.WorksheetFunction.Sum(MaPlage)
MsgBox MaSomme

End Sub

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.

 

Sub SommeEnVBA_2c()
'par Excel-Malin.com (https://excel-malin.com)

'calcul de somme en VBA: utilisation de WorksheetFunction
'>> pour plusieurs plages (se situant sur les Feuilles différentes)
'---------------------------------------------------------------------
Set Plage_1 = Range("A2:A600")
Set Plage_2 = Range("D2:D600")
Set Plage_3 = Sheets("Feuil2").Range("F2:F600")
Set Plage_4 = Range("H2:H5")


MaSomme = Application.WorksheetFunction.Sum(Plage_1, Plage_2, Plage_3, Plage_4)
MsgBox MaSomme

End Sub

Conclusion

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!

 

3 0

 



Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée.