Option Explicit
Option Base 0
Public Function SousTotalPC(CodeFonction As Byte, Plage As Range) As Variant
Dim vTab() As Variant
Dim vMatrice() As Byte
Dim vCell As Range
Dim I As Long
Dim J As Long
ReDim Preserve vMatrice(Plage.Rows.Count - 1)
For Each vCell In Plage
If vCell.EntireRow.Hidden = False Then
vMatrice(J) = 1
I = I + 1
ReDim Preserve vTab(I)
vTab(I) = vCell
Else
vMatrice(J) = 0
End If
J = J + 1
Next
'CodeFonction reprend le code utilisé dans la fonction SOUS.TOTAL
Select Case CodeFonction
Case 1
SousTotalPC = Application.WorksheetFunction.Median(vTab)
Case 2
SousTotalPC = Application.WorksheetFunction.Count(vTab)
Case 3
SousTotalPC = Application.WorksheetFunction.CountA(vTab)
Case 4
SousTotalPC = Application.WorksheetFunction.Max(vTab)
Case 5
SousTotalPC = Application.WorksheetFunction.Min(vTab)
Case 6
SousTotalPC = Application.WorksheetFunction.Product(vTab)
Case 7
SousTotalPC = Application.WorksheetFunction.StDev(vTab)
Case 8
SousTotalPC = Application.WorksheetFunction.StDevP(vTab)
Case 9
SousTotalPC = Application.WorksheetFunction.Sum(vTab)
Case 10
SousTotalPC = Application.WorksheetFunction.Var(vTab)
Case 11
SousTotalPC = Application.WorksheetFunction.VarP(vTab)
Case 12
'Ce code additionnel retourne une matrice qui contient
'0 pour une cellule invisible
'1 pour une cellule visible
SousTotalPC = Application.WorksheetFunction.Transpose(vMatrice)
End Select