HOWTO · VBA
La fonction sum en VBA
Utilisez la fonction de feuille de calcul SUM d’Excel depuis VBA pour additionner une ou plusieurs plages, écrire un résultat dans une cellule et additionner des tableaux ou des valeurs qui remplissent une condition.
Sur cette page
Pour utiliser la fonction SUM d’Excel en VBA, appelez WorksheetFunction.Sum en lui transmettant une plage ou des valeurs. SUM est une fonction de feuille de calcul Excel accessible depuis VBA via l’objet WorksheetFunction ; ce n’est pas une fonction intégrée autonome de VBA. Les procédures VBA complètes ci-dessous peuvent être copiées, mais elles n’ont pas été exécutées, car l’environnement d’exécution configuré ne prend pas en charge VBA.
Utiliser la fonction SUM d’Excel en VBA
La forme générale est Application.WorksheetFunction.Sum(argument1, argument2, ...). Utilisez une référence de feuille entièrement qualifiée si une macro peut s’exécuter alors qu’une autre feuille est active : le calcul lira ainsi toujours les données de la feuille voulue. Chaque exemple ci-dessous utilise ThisWorkbook.Worksheets("Sales") ; le classeur doit donc contenir une feuille portant ce nom.
Additionner une ou plusieurs plages
Ces procédures insèrent des valeurs d’exemple dans la feuille Sales, calculent un total et l’écrivent dans E2. La première additionne B2:B4 (12 + 8 + 5 = 25). La seconde transmet B2:B3 et D2:D3 comme arguments de plage distincts (12 + 8 + 5 + 10 = 35), ce qui permet d’additionner des plages non contiguës.
Une plage :
Sub SumOneRange()
Dim ws As Worksheet
Dim total As Double
Set ws = ThisWorkbook.Worksheets("Sales")
ws.Range("B2").Value = 12
ws.Range("B3").Value = 8
ws.Range("B4").Value = 5
total = Application.WorksheetFunction.Sum(ws.Range("B2:B4"))
ws.Range("E2").Value = total
End Sub
Deux plages distinctes :
Sub SumTwoRanges()
Dim ws As Worksheet
Dim total As Double
Set ws = ThisWorkbook.Worksheets("Sales")
ws.Range("B2").Value = 12
ws.Range("B3").Value = 8
ws.Range("D2").Value = 5
ws.Range("D3").Value = 10
total = Application.WorksheetFunction.Sum( _
ws.Range("B2:B3"), ws.Range("D2:D3"))
ws.Range("E2").Value = total
End Sub
Pour une seule plage, Sum reçoit un objet Range. Pour deux plages, chaque objet Range est transmis comme argument distinct ; ne réunissez pas les adresses dans une seule chaîne de plage. Dans les deux procédures, l’affectation de total à ws.Range("E2").Value enregistre le résultat calculé dans E2.
L’exemple Python exécutable qui suit illustre le calcul avec les valeurs 12, 8 et 5 ; il n’appelle pas WorksheetFunction.Sum et n’exécute ni Excel ni VBA.
Exécutez cet exemple :
values = [12, 8, 5]
total = sum(values)
print(total)
25
Écrire la somme dans une cellule de la feuille de calcul
Les procédures précédentes stockent le résultat dans une variable, puis l’affectent à la propriété Value de la cellule de destination. Le modèle général est total = Application.WorksheetFunction.Sum(ws.Range("B2:B10")), suivi de ws.Range("E2").Value = total. En VBA, le résultat est transmis à Value par une affectation utilisant =. Qualifier entièrement la plage lue et la cellule de destination évite de dépendre de la feuille active.
Additionner un tableau en VBA
Lorsque les valeurs se trouvent déjà dans un tableau VBA, une boucle permet de contrôler directement leur accumulation. Array(...) renvoie un tableau de type Variant : déclarez donc numbers As Variant, initialisez total avant la boucle, puis ajoutez chaque élément de LBound(numbers) à UBound(numbers). Cette procédure complète calcule un total de 15 et l’affiche dans la fenêtre Exécution de VBA. Elle additionne les valeurs dans VBA et n’appelle pas la fonction SUM d’Excel. L’exemple VBA n’a pas été exécuté dans l’environnement configuré.
Sub SumArray()
Dim numbers As Variant
Dim total As Double
Dim i As Long
numbers = Array(1, 2, 3, 4, 5)
total = 0
For i = LBound(numbers) To UBound(numbers)
total = total + numbers(i)
Next i
Debug.Print total
End Sub
Additionner les valeurs qui répondent à une condition
Cette procédure écrit des valeurs d’exemple dans A2:A6 de Sales, additionne uniquement celles qui sont supérieures à 5 et affiche le total (22) dans la fenêtre Exécution de VBA. L’instruction If détermine quelles valeurs contribuent au total en cours. Il s’agit d’une accumulation conditionnelle en VBA. Pour calculer un total conditionnel à partir d’une feuille, Excel propose aussi SUMIF ; appelez-la via WorksheetFunction.SumIf si elle convient mieux à la tâche. L’exemple VBA n’a pas été exécuté dans l’environnement configuré.
Sub SumValuesGreaterThanFive()
Dim ws As Worksheet
Dim total As Double
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Sales")
ws.Range("A2").Value = 2
ws.Range("A3").Value = 6
ws.Range("A4").Value = 9
ws.Range("A5").Value = 4
ws.Range("A6").Value = 7
total = 0
For i = 2 To 6
If ws.Cells(i, 1).Value > 5 Then
total = total + ws.Cells(i, 1).Value
End If
Next i
Debug.Print total
End Sub
FAQ
À quoi sert WorksheetFunction.Sum ? Cette méthode appelle la fonction SUM d’Excel depuis VBA et renvoie le total des valeurs numériques ou des plages fournies.
Peut-elle additionner des plages non contiguës ? Oui. Transmettez chaque plage comme argument distinct, comme dans les exemples ci-dessus.
Comment les cellules non numériques sont-elles traitées ? SUM ignore le texte et les cellules vides dans les plages référencées ; les valeurs transmises directement comme arguments peuvent être converties différemment. Si le résultat dépend du traitement de données mixtes, vérifiez les entrées et utilisez des plages de manière cohérente.
Les plages peuvent-elles provenir de feuilles différentes ? Oui. Transmettez des références qualifiées séparément, par exemple Worksheets("North").Range("B2:B10") et Worksheets("South").Range("B2:B10"), comme arguments d’un même appel à SUM.