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

Excel Discussion :

Filtrer un TCD par VBA [XL-2010]


Sujet :

Excel

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut Filtrer un TCD par VBA
    Bonjour tout le monde,

    Je suis en train de tenter de filtrer un TCD par VBA sous excel 2010, pour cela j'ai trouvé deux méthodes

    -Parcourir les champs du TCD et masquer les champs non séléctionner: cette méthode fonctionne mais se révèle être trop longue à l'execution.

    -Utiliser la méthode PivotFilters : Cette méthode me sort l'erreur suivante "Erreur définit par l'application ou par l'objet"

    Voici mon code:

    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
     
     
    Sub filtreTCD(ByVal champ As String, ByVal valeur As String, ByVal ajout As Boolean)
     
        If ajout Then
            ReDim Preserve lesValeurs(UBound(lesValeurs) + 1)
            lesValeurs(UBound(lesValeurs)) = valeur
        Else
            lesValeurs = Array(valeur)
        End If
     
        With Sheets(feuilleDestination).PivotTables("TCD").PivotFields(champ)
            If valeur = "TOUS" Then
                .ClearAllFilters
            Else
            'Méthode 1
             '  For Each i In .PivotItems
             '       For Each v In lesValeurs
             '           affiche = False
             '           If v = i.Value Then
             '               affiche = True
             '           End If
             '           If affiche Then
             '            i.Visible = True
             '            Exit For
             '           Else
             '            i.Visible = False
             '           End If
             '
             '       Next
             '  Next i
     
     
               'Méthode2
               For Each v In lesValeurs
                  .PivotFilters.Add Type:=xlCaptionEquals, Value1:=v 'Ligne qui provoque l'erreur
               Next
            End If
        End With
     
        Sheets(feuilleDestination).PivotTables("TCD").PivotCache.Refresh
    End Sub
    J'ai beau chercher je ne trouve pas en quoi la formulation de mon PivotFilter pose problème.

    Si vous avez des idées pour m'aider je vous remercie d'avance.


    Au passage si des personnes cherche un problème semblable, j'ai trouvé le site suivant qui me semble bien fait mais qui malheureusement ne m'aide pas pour mon problème:

    http://www.globaliconnect.com/excel/...=79&Itemid=475

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Quelle est la valeur de "v" qui provoque l'erreur ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Tout dabord merci de t'essayer à ce problème.

    Il est vrai que mon code n'est pas très commenté désoler pour ça.

    La valeur "v" représente un élément du tableau "valeur" passé en parmètre
    C'est la valeur sur laquelle je veu filtrer et c'est une chaine de caractère.

    L'idée c'est que je veux effectuer un filtre avec plusieur valeur donc je parcour un tableau de caractère et je rajoute le filtre pour chacun d'entre eux

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    C'est la valeur de v au moment du plantage que je souhaite connaître. Utilise "Debug.Print" ou un Msgbox pour l'afficher.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Bonjour Daniel.C

    La valeur de v est belle et bien une chaine de caractère: "DELAYE OLIVIER"
    dailleur lorsque je test ces deux ligne directement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveSheet.PivotTables("TCD").PivotFields("DV").ClearAllFilters
    ActiveSheet.PivotTables("TCD").PivotFields("DV").PivotFilters.Add Type:=xlCaptionEquals, Value1:="DELAYE OLIVIER" ' ligne qui provoque l'erreur
    L'erreur sur la deuxième lignes est la même.("Erreur définit par l'application ou par l'objet")
    En revanche la première ligne fonctionne donc il trouve bien mon TCD.
    La colonne "DV" de mon TCD possède pourtant une valeur "DELAYE OLIVIER"

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    J'ai essayé de reproduire le problème. Je plante sur le second filtre. Je pense que tu ne peux pas ajouter plus d'un filtre, comme quand tu essaies manuellement d'ajouter un filtre textuel ou numérique. Les options du paramètre "type" sont celles-la. Est-ce que tu peux mettre en pièce jointe un classeur exemple - sans données confidentielles ?

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Très bien je t'envoi ça.

    J'ai épuré au maximum pour ne représenter que mon problème et pour éliminer les données possiblement confidencielle.

    Le classeur possède:
    une feuille ou se trouve les controles
    Une feuille ou se trouve la source du TCD

    Le filtre doit se lancer sur un double clique dans la liste
    Fichiers attachés Fichiers attachés

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Le problème vient de ce que le classeur a été créé au format xls. J'ai repris les données et je l'ai créé au format xlsx. Le filtre fonctionne sans problème, compte-tenu de ce que je t'ai dit sur le nombre de filtres.

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 12
    Par défaut
    Bonjour Daniel

    En effet bien vu ça marche bien avec le format qui accepte les macros (xlsm). Par contre contrairement à ce que tu dits je peu ajouter plusieur filtre (ce qui m'arrange), ma fonction semble fonctionner parfaitement.

    En tout cas un grand merci pour ça, mon problème est résolu

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

Discussions similaires

  1. Modifier Filtre TCD par VBA Excel 2010
    Par maxwellou dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/06/2014, 12h20
  2. [XL-2007] Filtre imposé sur TCD par VBA
    Par meolimo dans le forum Excel
    Réponses: 0
    Dernier message: 23/02/2014, 20h05
  3. Organisation des colonnes d'un TCD par VBA
    Par pilou2000 dans le forum Excel
    Réponses: 1
    Dernier message: 16/07/2012, 14h32
  4. [XL-2003] filtrer un TCD avec VBA
    Par David1259 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2011, 19h12
  5. Manipulation TCD par VBA
    Par stan057 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/06/2010, 14h23

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