IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Choisir filtres d'un TCD via ComboBox (Macro) [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut Choisir filtres d'un TCD via ComboBox (Macro)
    Bonsoir tout le monde,

    Voilà quelques temps que je bloque sur quelque chose certainement simple mais je ne vois pas la solution.

    En effet, dans ma feuille Excel, j'ai plusieurs listes qui permettent d'alimenter un tableau croisé dynamique.

    Les étiquettes de colonnes de mon TCD correspondent à la colonne où l'on trouve des chapitres et tous ces chapitres sont également générés dans une combobox.

    J'ai placé cette combobox dans un userform car après toutes mes recherches sur internet il m'a semblé que c'était la plus simple des solutions.

    Ce que je souhaiterai c'est qu'à partir de cette combobox, je puisse sélectionner un chapitre voulu à générer dans mon TCD, sans que les autres ne s'affichent.

    (J'ai fortement simplifié mon problème mais c'est la partie pour laquelle j'ai le plus besoin d'aide )

    Mon fichier est en PJ.
    Voici mon code actuel (que j'ai écrit à partir d'informations provenant de différents sites d'aide Excel):

    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
    34
    35
    36
    37
    Private Sub UserForm_Initialize()
        Dim j As Integer
     
        'Récupère les données de la colonne C...
        For j = 1 To Range("C65536").End(xlUp).Row
            ComboBox1 = Range("C" & j)
            '...et filtre les doublons
            If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("C" & j)
        Next j
    End Sub
     
    Private Sub CommandButton1_Click()
        MsgBox ComboBox1.Value
     
        UserForm1.Hide
    End Sub
    Sub TCD()
     
    End Sub
    Dim sl()
    For i = 0 To ComboBox1.Count - 1
    If ComboBox1.Selected(i) = True Then
    ReDim Preserve sl(i)
    sl(i) = ComboBox1.List(i)
    End If
    Next i
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Chapitre 1")
    For Each Pi In .PivotItems
    Pi.Visible = True
    Next
    For Each Pi In .PivotItems
    If Pi <> sl(x) Then
    x = x + 1
    Pi.Visible = False
    Next
    End With
    End Sub
    Je vous suis très reconnaissant par avance .
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut
    Je retente encore une fois

    Ce que je souhaiterais obtenir au final, c'est d'avoir en quelque sorte le champ "Etiquettes de colonnes" permettant de sélectionner les chapitres que je veux, mais sur une autre feuille que celles du TCD.

    J'ai pensé que le plus simple était de relier une combobox à ce dernier mais vu le peu de résultats que j'ai trouvé en ligne, il y a peut être une autre solution ..Que je ne trouve malheureusement pas

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    bon c'est un peu beaucoup bricolé!

    ds ton exemple j'ai modifié ton remplissage de combo : "j=2" car la ligne 1 est le titre!

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Private Sub UserForm_Initialize()
        Dim j As Integer
     
        'Récupère les données de la colonne C...
        For j = 2 To Range("C65536").End(xlUp).Row
            ComboBox1 = Sheets("Feuil1").Range("C" & j)
            '...et filtre les doublons
            If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Feuil1").Range("C" & j)
        Next j
    End Sub
     
    Private Sub CommandButton1_Click()
    Dim e As Integer
       With Sheets("Feuil2").PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Chapitre 1")
            .PivotItems("Chapitre 11").Visible = True
            .PivotItems("Chapitre 12").Visible = True
            .PivotItems("Chapitre 2").Visible = True
            .PivotItems("Chapitre 3").Visible = True
            .PivotItems("Chapitre 4").Visible = True
            .PivotItems("Chapitre 5").Visible = True
            .PivotItems("Chapitre 6").Visible = True
            .PivotItems("Chapitre 7").Visible = True
            .PivotItems("Chapitre 8").Visible = True
            .PivotItems("Chapitre 9").Visible = True
        End With
     
     
    e = Replace(ComboBox1, "Chapitre", "")
    e = Replace(e, " ", "")
     
        With Sheets("Feuil2").PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Chapitre 1")
           .PivotItems("Chapitre " & e).Visible = True
     
            If e <> "11" Then .PivotItems("Chapitre 11").Visible = False
            If e <> "12" Then .PivotItems("Chapitre 12").Visible = False
            If e <> "2" Then .PivotItems("Chapitre 2").Visible = False
            If e <> "3" Then .PivotItems("Chapitre 3").Visible = False
            If e <> "4" Then .PivotItems("Chapitre 4").Visible = False
            If e <> "5" Then .PivotItems("Chapitre 5").Visible = False
            If e <> "6" Then .PivotItems("Chapitre 6").Visible = False
            If e <> "7" Then .PivotItems("Chapitre 7").Visible = False
            If e <> "8" Then .PivotItems("Chapitre 8").Visible = False
            If e <> "9" Then .PivotItems("Chapitre 9").Visible = False
            If e <> "10" Then .PivotItems("Chapitre 10").Visible = False
     
     
        End With
        UserForm1.Hide
    End Sub
    Je pense que des chevronnés vont répondre à ça !!

    la c'est mieux !

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub CommandButton1_Click()
    TCD
    UserForm1.Hide
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim j As Integer
     
        'Récupère les données de la colonne C...
        For j = 2 To Sheets("Feuil1").Range("C65536").End(xlUp).Row
            ComboBox1 = Sheets("Feuil1").Range("C" & j)
            '...et filtre les doublons
            If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Feuil1").Range("C" & j)
        Next j
    End Sub
     
     
    Sub TCD()
     Dim i As Integer
     Dim e As Variant
     e = ComboBox1
     
    ' on place tous à true
    With Sheets("Feuil2").PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Chapitre 1")
     
       For i = 0 To ComboBox1.ListCount - 1
     
                  .PivotItems(ComboBox1.List(i)).Visible = True
     
        Next i
    End With
     
     ' on place seulement l'élément choisi à true
     
       With Sheets("Feuil2").PivotTables("Tableau croisé dynamique1").PivotFields( _
            "Chapitre 1")
             .PivotItems(ComboBox1.Text).Visible = True
                For i = 0 To ComboBox1.ListCount - 1
     
                    If ComboBox1.List(i) <> ComboBox1 Then .PivotItems(ComboBox1.List(i, 0)).Visible = False
     
                 Next i
        End With
     
     
    End Sub
    donne moi ta réponse !

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    C'est une utilisation assez peu conforme des TCD d'autant qu'un simple filtre ferait très bien l'affaire mais bon...

    Déjà pour créer un TCD il faut une source avec des titres de colonne sinon cela ne marchera pas correctement.

    Si la source évolue il est plus que conseillé de mettre cette source sous forme de tableau pour que le TCD suive l'évolution.

    Pourquoi une combobox alors qu'un simple segment le fait ?
    Fichiers attachés Fichiers attachés

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    473
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 473
    Par défaut
    Salut Chris

    C'est une utilisation assez peu conforme des TCD
    Je ne suis pas tout à fait d'accord, ça dépend pourquoi on souhaite l'utiliser! dans le cas de Alascard je ne comprend pas pourquoi, mais il a peut-être une bonne raison !

    par contre :

    Déjà pour créer un TCD il faut une source avec des titres de colonne sinon cela ne marchera pas correctement.

    Si la source évolue il est plus que conseillé de mettre cette source sous forme de tableau pour que le TCD suive l'évolution.
    entièrement d'accord !

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 90
    Par défaut
    Merci du temps que vous prenez pour m'aider
    Malheureusement j'ai une erreur sur le ".PivotItems(Combobox1.List (i)).Visible=True"
    Et sur la 2e boucle a l'endroit ou on retrouve le i également. Par contre je ne sais pas par quoi le remplacer :/. L'erreur est : "Run Time Error '1004' .
    Unable to get the PivotItems property of the PivotField class."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] filtre TCD via macro vba sur texte contenu
    Par fomy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/08/2012, 09h35
  2. [WD-2010] Impossible de choisir le type de protection via une macro VBA
    Par santadrix dans le forum VBA Word
    Réponses: 14
    Dernier message: 30/03/2012, 15h39
  3. [XL-2010] Automatiser un filtre d'un TCD en VBA via une liste
    Par Safety147 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 29/03/2012, 00h31
  4. mise en forme TCD via macro vba
    Par Vinzz974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2012, 15h48
  5. [VBA-E]Filtre via une macro sur Excel
    Par jamal.b dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2006, 15h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo