Une solution consiste à utiliser une fonction VBA que vous pouvez appeler dans une formule. La fonction ci-dessous renvoie le contenu d'une adresse de cellule (cela ne fonctionnera pas pour les plages dans sa forme actuelle) dans toutes les feuilles de calcul autres que la feuille active.
Public Function AcrossSheets(rngAddress As String, Optional includeThisSheet As Boolean = False, Optional wText As String) As Variant
Application.Volatile
Dim tmpResults As String, ws As Worksheet
If includeThisSheet Then
For Each ws In Worksheets
If wText <> "" Then
If InStr(ws.Name, wText) <> 0 Then
tmpResults = tmpResults & ws.Range(rngAddress).Value & ", "
End If
Else
tmpResults = tmpResults & ws.Range(rngAddress).Value & ", "
End If
Next ws
Else
For Each ws In Worksheets
If ws.Name <> ActiveSheet.Name Then
If wText <> "" Then
If InStr(ws.Name, wText) <> 0 Then
tmpResults = tmpResults & ws.Range(rngAddress).Value & ", "
End If
Else
tmpResults = tmpResults & ws.Range(rngAddress).Value & ", "
End If
End If
Next ws
End If
tmpResults = Left(tmpResults, Len(tmpResults) - 2)
AcrossSheets = Split(tmpResults, ", ")
End Function
Pour utiliser ce code, appuyez sur Alt + F11 Dans Excel, insérez un nouveau module et collez le code.
Donc, si, par exemple, vous voulez additionner les valeurs de B2
de chaque feuille autre que la feuille active, vous utiliseriez la formule matricielle suivante (entrée en appuyant sur Ctrl + Décalage + Entrer ):
=SUM(VALUE(AcrossSheets("B2")))
Pour inclure la valeur de B2
sur la feuille active, utilisez la formule suivante:
=SUM(VALUE(AcrossSheets("B2",TRUE)))
Pour ne résumer que les valeurs de B2
sur les feuilles qui incluent "Mensuel" dans le nom de la feuille (sans inclure la feuille active), utilisez la formule suivante:
=SUM(VALUE(AcrossSheets("B2",FALSE,"Monthly")))
Notez deux choses:
AcrossSheets
retourne un tableau de valeurs. Pour cette raison, il ne devrait être utilisé que dans les formules matricielles.
- Le tableau retourné par
AcrossSheets
contient des valeurs sous forme de chaînes (texte). Si vous vous attendez à ce que la fonction retourne des données numériques (comme dans les exemples ci-dessus), vous devez envelopper l'appel de fonction VALUE()
. Cela convertira les données de chaîne en données numériques.