IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

MarcelG

Filtre sur tableau structuré, recherche du champ où affecter le critère

Noter ce billet
par , 05/11/2020 à 11h48 (635 Affichages)
Bonjour,

En consultant mon dossier utilitaire à la rubrique Tableaux Structurés, j'ai observé ce développement
(Je n'en suis pas l'auteur, et, contrairement à mes habitudes, je n'ai pas reporté la source. Nul, Marcel!)

A partir d'un tableau structuré nommé monbotablo

Nom : Billet_tblostruc_filtre_20201105.JPG
Affichages : 867
Taille : 18,6 Ko

Si l'on souhaite appliquer un filtre sur le pays

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit

Sub FiltreTableau()

   Dim cellRésult As Range
    
    With ThisWorkbook.Worksheets("Feuil1")
    
    If .FilterMode = True Then
            .ListObjects("monbotablo").Range.AutoFilter
    End If
    
    .ListObjects("monbotablo").Range.AutoFilter _
        Field:=1, Criteria1:="=be*"
 
    'Renvoie la plage de cellules visibles après l'application du filtre.
    Set cellRésult = .ListObjects("monbotablo").Range.Cells.SpecialCells(xlCellTypeVisible).Cells
    
    End With

End Sub
Or, je suis adepte d'une bonne visibilité dans tout code, et
me gêne quelque peu.

Je proposerais de paramétrer le numéro de champ (Column) par sa proprété Index

Soit, avec une procédure argumentée

Appel

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
Option Explicit

Public Sub filter_tablostruc()
        Call FiltreTableau(lechamp:="pays", lecritère:="It*")
End Sub
Procédure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Public Sub FiltreTableau(lechamp As String, lecritère As String)
   
Dim numchamp As Integer
Dim cellRésult As Range

'Filtre la colonne du tableau correspondant au paramètre "lechamp",
'avec pour crtitère le paramètre "lecritère"
'sensible à la casse.

With Worksheets("Feuil1")

        'Efface le filtre éventuel
        If .FilterMode = True Then _
                .ListObjects("monbotablo").Range.AutoFilter
        'Recherche la colonne où se trouve le champ souhaité
        numchamp = .ListObjects("monbotablo").ListColumns(lechamp).Index
        'Filtre
        .ListObjects("monbotablo").Range.AutoFilter _
                Field:=numchamp, Criteria1:=lecritère
        
        'Renvoie la plage de cellules visibles après l'application du filtre
        
        '1 -avec la ligne de titre
        Set cellRésult = .ListObjects("monbotablo").Range.Cells.SpecialCells(xlCellTypeVisible).Cells
        Debug.Print "1ère cellule des titres: " & cellRésult.Cells(1, 1).Value
        
        '2 -sans la ligne de titre
        Set cellRésult = .ListObjects("monbotablo").DataBodyRange.Cells.SpecialCells(xlCellTypeVisible).Cells
        Debug.Print "1ère cellule des enregistrements: " & cellRésult.Cells(1, 1).Value

End With

End Sub
Dans un premier temps, j'avais opté pour la recherche du nom de champ dans la plage des titres du tableau structuré

Code : Sélectionner tout - Visualiser dans une fenêtre à part
numchamp = Application.WorksheetFunction.Match(lechamp, .ListObjects("monbotablo").HeaderRowRange, 0)
Bien entendu, la propriété Index est plus appropriée (Inutile d'inventer la roue )

J'ai cru utile d'ajouter une définition de la plage cellRésult.
En effet, les objets Range et DataBodyRange n'ont pas la même portée.

Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Viadeo Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Twitter Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Google Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Facebook Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Digg Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Delicious Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog MySpace Envoyer le billet « Filtre sur tableau structuré, recherche du champ où affecter le critère » dans le blog Yahoo

Mis à jour 11/11/2020 à 00h23 par MarcelG

Catégories
Sans catégorie

Commentaires