Solution:
Cela fera ce que vous voulez. Définissez visibleTotal sur le type de données approprié pour le total et modifiez les objets ws et rng pour qu’ils correspondent à ce que vous avez dans votre classeur.
Sub SumVisible()
Dim ws As Worksheet
Dim rng As Range
Dim visibleTotal As Long
Set ws = ThisWorkbook.Sheets("Sheet1")
Set rng = ws.Range("B1:B7")
ws.AutoFilterMode = False
rng.AutoFilter field:=1, Criteria1:=5
visibleTotal = Application.WorksheetFunction.Sum(rng.SpecialCells(xlCellTypeVisible))
' print to the immediate window
Debug.Print visibleTotal
End Sub
Si vous ne souhaitez additionner qu’une partie de la plage filtrée (par exemple, vous filtrez sur la colonne A mais souhaitez la somme de la colonne B), consultez cette question et réponse : Copier/Coller/Calculer les cellules visibles à partir d’une colonne d’un tableau filtré.
Si l’on doit COMPTER le nombre d’éléments visibles dans une liste filtrée, utilisez la fonction SOUS-TOTAL, qui ignore automatiquement les lignes masquées par un filtre.
La fonction SOUS-TOTAL peut effectuer des calculs tels que COUNT, SUM, MAX, MIN, AVERAGE, PRODUCT et bien d’autres (voir le tableau ci-dessous). Il ignore automatiquement les éléments qui ne sont pas visibles dans une liste ou un tableau filtré. Cela le rend idéal pour afficher le nombre d’éléments visibles dans une liste, le sous-total des lignes visibles, etc. Il fournit également des lignes de contrôle masquées manuellement.
La solution à votre question serait de compter le nombre de lignes non vides visibles dans la colonne A et la colonne B lorsqu’un filtre est actif, utilisez :
AtmCurrentSum = Application.WorksheetFunction.Subtotal(109, Range("$X$3:$X$4533"))
Points à retenir lorsque vous appliquez la formule SOUS-TOTAL :
- Lorsque num_fonction (premier argument) est compris entre 1 et 11, SOUS-TOTAL inclut des valeurs masquées manuellement mais ignorées par filtre.
- Lorsque num_fonction est compris entre 101 et 111, SOUS-TOTAL exclut toutes sortes de valeurs cachées.
- Dans les listes filtrées, SUBTOTAL ignore toujours les valeurs des lignes masquées, quel que soit le nombre_fonction.
- SOUS-TOTAL ignore les autres sous-totaux qui existent dans les références sont ignorés pour éviter le double comptage
- SOUS-TOTAL ne fonctionne qu’avec des valeurs de données verticales disposées verticalement.
- Dans les colonnes horizontales cachées, les valeurs sont toujours incluses et jamais ignorées.