VBA Excel: sélection auto d'items dans un filtre

Résolu/Fermé
Lena - 14 juil. 2020 à 12:26
 Lena - 14 juil. 2020 à 13:16
Bonjour,

Je travaille sur Excel 2013 et grâce à f894009, j'ai pu optimiser mon code VBA pour créer un tableau croisé dynamique (T.C.D.) qui définit automatiquement la taille du tableau source.

A présent, j'aimerais savoir comment faire pour sélectionner grâce à mon code les champs d'un filtre sans les nommer entièrement, mais qui comprennent certains caractères: exemple: sélectionner les codes de villes qui comprennent "ar" ("*ar"?) sans avoir à les énumérer car il pourrait y en avoir beaucoup; quelqu'un aurait-il une idée? Voici la partie du code concernée ainsi que le lien de mon fichier: https://www.cjoint.com/c/JGokwqzXSnj:
Sub Creation_TCD()
Call DeletePivotTable
adr = Sheets("feuil1").UsedRange.Address
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= "Feuil1!" & Sheets("Feuil1").UsedRange.Address, Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="TT!R1C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=5
Sheets("TT").Select
Cells(1, 1).Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Statut pro")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Nom")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ville")
.Orientation = xlPageField
.Position = 1
End With
End Sub


Je vous en remercie par avance, sachant que toutes les pistes pouvant me permettre d'avancer sont les bienvenues!!

Merci!!

1 réponse

yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 Ambassadeur 1 551
14 juil. 2020 à 12:36
bonjour, peux-tu préciser "basic" comme type de code quand tu partages du VBA?
tu n'expliques pas le lien entre la sélection et ton code.
peut-être pourrais-tu nous montrer la partie de ton code qui fait la sélection en les énumérant, nous pourrons ensuite t'assister pour le modifier pour fonctionner sans énumération.
d'où viendrait "ar"?
0
yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 1 551
14 juil. 2020 à 12:45
suggestion:
Dim pi As PivotItem
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ville")
pf.EnableMultiplePageItems = True
For Each pi In pf.PivotItems
    If InStr(pi.Name, "ar") Then
        pi.Visible = True
    Else
        pi.Visible = False
    End If
Next pi
0
Lena > yg_be Messages postés 23335 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024
14 juil. 2020 à 13:16
Bonjour yg_be,


Et merci pour ta réponse!
Il est vrai que je ne maîtrise pas encore toutes les conventions des forums, mais à l'avenir je préciserai 'basic' pour les codes VBA.
J'ai indiqué "ar" car c'était la seule chaine de caractère commune à deux items dans cet exemple mais ça n'a pas plus de sens que cela.
Voici la partie de code demandée, générée par l'enregistreur de macros:
    Activesheet.PivotTables("Tableau croisé dynamique1").PivotFields("Ville").CurrentPage = "(All)"
    With Sheets("TT").PivotTables("Tableau croisé dynamique1").PivotFields("Ville")
    '    .PivotItems("Par").Visible = False
        .PivotItems("Mar").Visible = False
    End With

Merci encore!
0