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 boucler sur les champs, rajouter en values ceux qui ni sont pas déjà.


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut TCD boucler sur les champs, rajouter en values ceux qui ni sont pas déjà.
    Bonjour,

    Lors de la mise à jour d'un TCD, il arrive que de nouvelles colonnes soit présente, j'ai déjà une macro qui permet de changer la source, maintenant je voudrait rajouter a mon TCD dans la partie Values les nouveaux champ.
    Ces champs ont tous un nom similaire "truc.nombre"
    Je sais enlever ou ajouter un champ quand je connais son nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        ActiveSheet.PivotTables("PivotTable2").PivotFields( _
            "Sum of truc.128").Orientation = xlHidden
        ActiveSheet.PivotTables("PivotTable2").AddDataField ActiveSheet.PivotTables( _
            "PivotTable2").PivotFields("truc.128"), _
            "Sum of truc.128", xlSum
    Ce que je cherche à faire:
    1) boucler sur tous les champs
    2) vérifier si le champs est déjà présent

    pour le 1) j'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim pvtf As PivotField
    For Each pvtf In ActiveSheet.PivotTables("PivotTable2").PivotFields
        pvtf.Name '.caption
    Next
    Mais j'obtiens l'erreur "invalid use of property"
    edit2: quel boulet, j'ai oublié de mettre msgbox devant pvtf.name, normal qu'il ne comprenne pas ce que je lui demande ...

    2) là je sais pas trop comment m'y prendre, si vous avez des idées je suis preneur

    Merci d'avance.

    edit: pour le point2 je viens de trouver ça je vais tester le code trouvé ci-dessus legerement modifié modifié pour ajouté le choix le choix de la feuille
    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
     Sub test()
     If testchamp("recMSap_envoi_tmis.122", "TB recap global par ref") = 0 Then
         MsgBox "chmp n'existe pas"
     Else
         MsgBox "chmp existe"
     End If
     End Sub
     Function testchamp(pf As String, sh As String)
     On Error Resume Next
     Set testchamp = Sheets(sh).PivotTables(1).PivotFields(pf)
     If testchamp Is Nothing Then
         testchamp = 0
     ElseIf testchamp.ShowingInAxis = False Then
         testchamp = 0
     End If
     End Function
    Désolé pour le dérangement je devrais m'en sortir tout seul...
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    J'ai presque réussi, il ne me reste qu'un petit souci, j'aimerais choisir la position des champs que je les ajoutes (en n-2 avec n= le nombre de champs déjà présent), mais je ne sais pas comment, en regardant l'aide vba sur addDataField je craint que ça ne soit pas possible
    Syntax:
    expression .AddDataField(Field, Caption, Function)
    Il n'y a semble-t-il pas d'incation de position, une idée pour contourner le problème?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test1()
    Dim pvtf As PivotField
    For Each pvtf In ActiveSheet.PivotTables("PivotTable2").PivotFields
       If testchamp(pvtf.Name, "TB recap global par ref") = 0 And pvtf.Name Like "recMSap_envoi_tmis*" Then
            Sheets("TB recap global par ref").PivotTables("PivotTable2").AddDataField pvtf, _
            "Sum of " & pvtf.Name, xlSum
        End If
    Next
    End Sub
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/02/2014, 15h22
  2. chercher les éléments d'une table B qui ne sont pas dans la table A
    Par Cupidon dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/01/2008, 13h40
  3. Réponses: 3
    Dernier message: 27/04/2007, 09h56
  4. Boucler sur les numero champs
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 30/08/2006, 06h29
  5. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 16h15

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