'-----------------------------------------------------------------------
'Return = True si il y a des colonnes filtrées dans un tableau structuré
'-----------------------------------------------------------------------
Public Function ExisteColonnesFiltréesTS(Tbl As ListObject) As Boolean
With Tbl
'Il n'y a pas de filtres (cas particulier où les filtres ont été retirés via Données/Filtrer)
If .AutoFilter Is Nothing Then Exit Function
'Aucune colonne n'est filtrée
If .AutoFilter.FilterMode = False Then Exit Function
End With
'Return value
ExisteColonnesFiltréesTS = True
End Function
'-------------------------------------------------------
'Critères de filtre d'une colonne d'un Tableau Structuré
'Return: Tableau des valeurs des critères de filtre
' Le Tableau sera vide si il n'y a pas de filtre
' If (Not (Not Tableau)) = 0 then <Tableau vide>
'-------------------------------------------------------
Public Function TabCriteria1FiltresColonneTS(Tbl As ListObject, TblNoColonne As Integer) As Variant()
Dim TabCritères() As Variant
Dim Criteria1 As Variant
Dim Criteria2 As Variant
Dim Operator As Variant
Dim ErrNumber As Long
Dim i As Integer
'Contrôle sur numéro de colonne
If Not (TblNoColonne >= 1 And TblNoColonne <= Tbl.ListColumns.Count) Then GoTo SetReturnValue
'La colonne n'est pas filtrée
If Not ExisteColonnesFiltréesTS(Tbl) Then GoTo SetReturnValue
With Tbl
With .AutoFilter
On Error Resume Next
Criteria1 = .Filters(TblNoColonne).Criteria1
ErrNumber = Err.Number
On Error GoTo 0
'Pas de Critéria1
If Not ErrNumber = 0 Then GoTo SetReturnValue
'Seuls opérateurs traités
Operator = .Filters(TblNoColonne).Operator
If Not (Operator = 0 Or Operator = xlFilterValues Or Operator = xlOr) Then
MsgBox "Function TabCriteria1FiltresColonneTS: Operator = " & Operator & "non supporté !"
GoTo SetReturnValue
End If
'Criteria1 = tableau de valeurs
If IsArray(Criteria1) Then
ReDim TabCritères(1 To UBound(Criteria1))
For i = LBound(Criteria1) To UBound(Criteria1)
TabCritères(i) = IIf(Left(Criteria1(i), 1) = "=", Mid(CStr(Criteria1(i)), 2), CStr(Criteria1(i)))
Next i
'Critéria1 = une seule valeur
Else
On Error Resume Next
'Critéria2 = une valeur
Criteria2 = .Filters(TblNoColonne).Criteria2
Operator = .Filters(TblNoColonne).Operator
ErrNumber = Err.Number
On Error Resume Next
If Err.Number = 0 And Operator = xlOr Then
ReDim TabCritères(1 To 2)
TabCritères(1) = IIf(Left(Criteria1, 1) = "=", Mid(CStr(Criteria1), 2), CStr(Criteria1))
TabCritères(2) = IIf(Left(Criteria2, 1) = "=", Mid(CStr(Criteria2), 2), CStr(Criteria2))
Else
ReDim TabCritères(1 To 1)
TabCritères(1) = IIf(Left(Criteria1, 1) = "=", Mid(CStr(Criteria1), 2), CStr(Criteria1))
End If
End If
End With
End With
SetReturnValue:
'Return Value
TabCriteria1FiltresColonneTS = TabCritères
End Function