Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Autres excel 2021 VBA : Comment modifier un choix dans un segment d'un TCD (annuler & sélectionner) ?

Scoub

XLDnaute Nouveau
Bonjour,

J'ai tenté de récupérer des éléments de réponses dans le forum mais je n'arrive pas à l'adapter pour l'instant à ma problématique.

Dans le même fichier, j'ai de multiple onglet (plusieurs onglets de paramétrage ou de liste, plusieurs bases de données, plusieurs TCD avec segment...).

Dans l'onglet "Selections", l'utilisateur saisi ou sélectionne un choix (case E4)

J'ai réussi avec cette valeur, d'ajuster les filtres de 2 onglets avec des bases de données pour n'afficher que le choix.
Code:
Sheets("Allocation Vision Canal").Activate
    Selection.AutoFilter _
    Field:=8, Criteria1:=Worksheets("Selections").Range("E4").Value, _
    Operator:=xlAnd

J'ai aussi réussi à ajuster le filtre d'un TCD mais cela ne modifie pas l'information sélectionnée dans le segment du TCD "Segment_CHANNEL1" avec le code ci-dessous
Code:
.PivotTables("Tableau croisé dynamique1").PivotFields("CHANNEL").PivotFilters.Add _
    Type:=xlCaptionEquals, Value1:=Worksheets("Selections").Range("E4").Value

Par contre, j'aurais préféré modifier le choix dans le segment du TCD correspondant afin que cette sélection soit visible dans le segment et affectée au TCD.


J'ai tenté différents codes pour modifier le choix du segment comme celui ci-dessous
VB:
Sheets("TCD Vision Canal").Activate

VB:
.SlicerCaches("Segment_CHANNEL1").VisibleSlicerItemsList(1) = Worksheets("Selections").Range("E4").Value

et d'autres tests tentés sans succés

Code:
    ActiveWorkbook.SlicerCaches("Segment_CHANNEL1").VisibleSlicerItemsList = Array([Segment_CHANNEL1].[CHANNEL].[choixchannel])
    
    
    ActiveWorkbook.SlicerCaches("Segment_CHANNEL1").VisibleSlicerItemsList = Array("[Tableau croisé dynamique1].[CHANNEL].&[choixchannel]")
    ActiveWorkbook.SlicerCaches("Segment_CHANNEL1").VisibleSlicerItemsList = "[Tableau croisé dynamique1].[CHANNEL].&[choixchannel]"
    ActiveWorkbook.Sheet("TCD Vision Canal").Caches("Segment_CHANNEL1").VisibleSlicerItemsList ("choixchannel")


Malgré des tests, je n'arrive pas à résoudre ce point. (je ne suis pas expérimenté sur la programmation VBA)

pour information les propriétés du segment du TCD "Segment_CHANNEL1" (nom à utiliser dans les formules) (nom de la source : CHANNEL) (nom : "CHANNEL 1")

A priori avec l'enregistreur de macro, il faudrait lister chaque choix du segment et indiquer "True" ou "False"... mais cela me semble lourd (certaines sélections ont 300 éléments....

Merci d'avance pour vos lumières
Scoub

----------
PS :

En fait, j'ai tenté d'abord avec un critère pour tenter de comprendre comme le programmer.

Mais j'aurais d'autres sélections à paramétrer (plusieurs champs de sélection sur différents onglets).

Par la suite je voudrais faire un export juste de la partie sélectionnée de la base de donnée et du TCD sans garder les autres information afin de pouvoir diffuser suivant les interlocuteurs les données correspondant sans qu'ils puissent consulter les autres infos.

En espérant que vous pourrez m'aider et que cela me facilitera la suite du travail pour préparer des Tableaux de bord d'indicateurs.

Merci d'avance,
Prenez soin de vous,
Scoub
 
Dernière édition:
Solution
Après n ième tentative

cette partie du code semble permettre d'annuler les sélections dans un segment

VB:
Sheets("TCD Vision Canal").Activate
    With ActiveSheet
    
        ActiveWorkbook.SlicerCaches("Segment_CHANNEL1").ClearManualFilter
    End With


La partie suivante semble permettre de ne valider qu'un choix dans un segment

Code:
Dim i as long
choixchannel = Worksheets("Selections").Range("E4").Value

Sheets("TCD Vision Canal").Activate
    With ActiveSheet
    
        With ActiveWorkbook.SlicerCaches("Segment_CHANNEL1")
            
                For i = 1 To .SlicerItems.Count
                    If .SlicerItems(i).Caption = choixchannel Then
                        .SlicerItems(i).Selected = True...

Scoub

XLDnaute Nouveau
Après n ième tentative

cette partie du code semble permettre d'annuler les sélections dans un segment

VB:
Sheets("TCD Vision Canal").Activate
    With ActiveSheet
    
        ActiveWorkbook.SlicerCaches("Segment_CHANNEL1").ClearManualFilter
    End With


La partie suivante semble permettre de ne valider qu'un choix dans un segment

Code:
Dim i as long
choixchannel = Worksheets("Selections").Range("E4").Value

Sheets("TCD Vision Canal").Activate
    With ActiveSheet
    
        With ActiveWorkbook.SlicerCaches("Segment_CHANNEL1")
            
                For i = 1 To .SlicerItems.Count
                    If .SlicerItems(i).Caption = choixchannel Then
                        .SlicerItems(i).Selected = True
                    Else
                    .SlicerItems(i).Selected = False
                    End If
                Next i
          
            
        End With


Qu'en pensez-vous ?
Est-ce la méthode la plus propre ?
Est-ce que cette méthode permettrait de traiter des choix multiples ?

J'ai un gros doute pour que cela fonctionne pour sélection toutes les dates dans une période choisie. (par exemple de 01/06/2021 au 30/09/2021 dans un segment "date de commande" mais je vais tester.

Je serais heureux de lire vos conseils

Merci d'avance pour vos commentaires
Cordialement,
Scoub
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…