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 :

TCD - Savoir si Item "(vide)" est coché non résolu pour moi [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut TCD - Savoir si Item "(vide)" est coché non résolu pour moi
    Ca fonctionne sauf si je veux savoir si "(vide)" est coché ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim s As Variant
    s = .PivotItems.Item(It).Name
    If .PivotItems(s).Visible = True Then
    Lorsque "s" contient "(blank)" alors j'obtiens une erreur
    Impossible de lire la propriété PivotItems de la classe PivotField


    ESVBA

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut Erreur2042 avec le code de 78chris...
    J'ai profité du code de 78chris mais j'ai toujours une erreur 2042..

    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
    Function TCDFiltreActif(TCDFeuil As String, TCDNom As String, Champ As String) As String
        Const Separateur = "/"
     
        Dim It        As Integer
        Dim Chaine As String
     
        Chaine = ""
        With Worksheets(TCDFeuil).PivotTables(TCDNom).PivotFields(Champ)
            For It = 1 To .PivotItems.Count
                If .PivotItems(It) = "(blank)" Then
                    .PivotItems(It).Value = "vide"
                    x = .PivotItems(It).Visible
                    Debug.Print x
                    If x = True Then
                        Chaine = Chaine & "(vide)" & Separateur
                    End If
                    .PivotItems(It).Value = "(vide)"
                Else
                    If .PivotItems(It).Visible = True Then
                        Chaine = Chaine & .PivotItems.Item(It).Value & Separateur
                    End If
                End If
            Next It
        End With
     
        '---
        If Len(Chaine) > 0 Then
            TCDFiltreActif = Left$(Chaine, Len(Chaine) - Len(Separateur))
        Else
            TCDFiltreActif = ""
        End If
    End Function

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    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 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Ton code marche sur mon exemple.

    L'erreur se produit sur le vide ?
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonsoir,

    et si tu traitais les blanks de façon générale avant d'y aller comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With Worksheets(TCDFeuil).PivotTables(TCDNom).PivotFields(Champ)
            .PivotTables("TableauCroiséDynamique2").NullString = "Vide"
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut Bonoisr 78chris
    oui, au pas à pas je constate que la boucle fonctionne parfaitement sauf lorsque l'on arrive sur "(blank)", x contient la valeur "erreur 2042".

    ESVBA

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    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 420
    Points : 16 264
    Points
    16 264
    Par défaut
    RE

    Peux tu poster ton TCD (ou un extrait car sur le mien ton code marche).


    J'ai 2010 : je vais tester sur 2007.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut Bonsoir NVCFrm
    Encore "erreur 2042" avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Chaine = ""
        With Worksheets(TCDFeuil).PivotTables(TCDNom).PivotFields(Champ)
     
            Worksheets(TCDFeuil).PivotTables(TCDNom).NullString = "Vide"
            Worksheets(TCDFeuil).PivotTables(TCDNom).DisplayNullString = True
     
     
            For It = 1 To .PivotItems.Count
    ESVBA

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    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 420
    Points : 16 264
    Points
    16 264
    Par défaut
    RE

    Sur 2007 je n'ai pas de PB sur mon TCD avec le code que tu as posté.

    Donc sauf à tester sur ton cas...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut
    je me permets de donner un fichier exemple :
    Fichiers attachés Fichiers attachés

  10. #10
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Re,

    en testant le code chez moi tel quel il 'y une erreur. parce que le test If n'est pas correctement formulé. alors il s'en va éxécuter le else
    voici la correction: (("vide"))<>("vide")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Worksheets(TCDFeuil).PivotTables(TCDNom).PivotFields(Champ)
     
            .NullString = "Vide"
            .DisplayNullString = True
     .....
     
         If .PivotItems(It) = (("Vide")) Then
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  11. #11
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Worksheets(TCDFeuil).PivotTables(TCDNom).NullString = "vide"
            Worksheets(TCDFeuil).PivotTables(TCDNom).DisplayNullString = True
    provoque de nombreux blocages et des affichages incohérents (or TCD).
    Une boite de dialogue annonce 'le TCD n'est pas n'est pas valide" et demande d'actualiser le TCD. En réalisant l'opération, on obtient le bon TCD.

    je ne comprends pas son fonctionnement.

    La foncton ne fonctionne toujours pas.

    ESVBA

  12. #12
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    re,

    provoque de nombreux blocages et des affichages incohérents (or TCD).
    Une boite de dialogue annonce 'le TCD n'est pas n'est pas valide" et demande d'actualiser le TCD. En réalisant l'opération, on obtient le bon TCD.

    je ne comprends pas son fonctionnement.
    tu peux rafraîchir de cette façon: mais en lisant très bien ta fonction j'ai cru comprendre que tu fais une concaténation de chaînes obtenues sur Le Champ.
    si j'ai juste pour ça il existe une autre approche beaucoup plus directe je crois .
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  13. #13
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut
    je ne comprends rien.

    tu appliques ".NullString" sur un "PivotField" alors que l'aide ne propose que "PivotTable".

    que veut dire ("vide") <> (("vide")) ?

  14. #14
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    re
    tu appliques ".NullString" sur un "PivotField" alors que l'aide ne propose que "PivotTable".

    que veut dire ("vide") <> (("vide")) ?
    c'est une erreur de disposition

    .NullString s'applique pivotTable

    la double parenthèse n'est pas obligatoire. c'est une expression de régularité
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

  15. #15
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut
    je cherche la liste des champs cochés. S'il y a une autre manière de faire ?

    Mais 1/2 bonne nouvelle, pour la première fois j'ai obtenu la liste des champs "1998/1988/2001/(blank)" et sans passer par le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     .PivotItems(It) = (("vide")) Then
    1/2 muvise nouvelle : c'est le hazard.
    Le seul changement est d'avoir mis un "on error goto" et un "resume next"qui m'indique un manque de mémoire pour les deux lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Worksheets(TCDFeuil).PivotTables(TCDNom).NullString = "Vide"
            Worksheets(TCDFeuil).PivotTables(TCDNom).DisplayNullString = True
    .

    J'obtiens ensuite une "incompatibilité de type" lors du test sur le "(blank)" que le"RESUME NEXT" corrige en renvoyant à la ligne d'après.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
               .PivotItems(It).Value = "(vide)"
                Else
                    If .PivotItems(It).Visible = True Then  '<-- incompatibilité de type avec (blank)                    Chaine = Chaine & .PivotItems.Item(It).Value & Separateur
                    End If
    Mais "(Blank)" est toujours coché.

    Je n'ai toujours pas la solution.
    Pourquoi un manque de mémoire ?

    A demain.

    ESVBA

  16. #16
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 420
    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 420
    Points : 16 264
    Points
    16 264
    Par défaut
    Bonjour

    Ta fonction étant appelée à partir d'une cellule ne peut modifier la valeur de "(vide)" en "vide" et donc faute de renommage, le bug n'est pas contourné.

    Une solution en utilisant l'événement PivotTableUpdate pour remplir la cellule J1
    Fichiers attachés Fichiers attachés
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  17. #17
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    891
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 891
    Points : 831
    Points
    831
    Par défaut Bonjour 78chris
    Coup au but.

    Ca fonctionne.
    Je regrette juste qu'il faille mettre le code dans une procédure évènement.


    78chris
    Félicitation.

    Merci.

    ESVBA

  18. #18
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    bonjour,

    En effet si ta fonction est appelée d'une cellule, inutile de chercher à modifier un objet. Cela génère une erreur.

    ...je cherche la liste des champs cochés. S'il y a une autre manière de faire ?
    tu peux obtenir cela très rapidement avec la propriété TableRange1 du PivotTable qui ne contiendra que les éléments cochés je penses..


    Juste la colonne des étiquettes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Maliste = Mon_PivoTable.TableRange1.Columns(1)
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

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

Discussions similaires

  1. [Lazarus] Détecter qu'un item d'un TCheckGroup est coché
    Par Coucougnou dans le forum Lazarus
    Réponses: 5
    Dernier message: 29/04/2010, 16h30

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