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 :

Obtenir résultat d'un TCD avec VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut Obtenir résultat d'un TCD avec VBA
    Bonjour,

    Comment est-il possible d'obtenir le résultat d'un TCD avec VBA .....:

    J'ai une feuille, ~10000 lignes, ~50 colonnes. Je fais un TCD pour compiler et obtenir mes totaux, mais....avec en faisant 2-3 codes, le nom des TCD change et me pose problème....
    Comment pourrait-on faire pour obtenir un tableau style TCD via VBA...?

    Une petite aide ?

    Merci pour les idées...

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible dans cet exemple.


    Il vous faut travailler avec un objet PivotTable.

    Le code suivant crée un TCD dans un nouvel onglet. Dans cette version, le nom du TCD est défini par vous.

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     
    Sub CreationTcd(ByVal FeuilleSourceTcd As Worksheet, ByVal LigneTitreSource As Long, ByVal NomFeuilleTcd As String)
     
    Dim AireTcd As Range
    Dim DerniereLigne As Long
    Dim DerniereColonne As Long
    Dim ShTcd As Worksheet
     
    Dim Pvt As PivotTable
     
        With FeuilleSourceTcd
     
            .Cells.EntireRow.Hidden = False
            .Cells.EntireColumn.Hidden = False
     
             DerniereLigne = .Cells(.Rows.Count, 1).End(xlUp).Row  ' A adapter suivant la colonne de référence du tableau
             DerniereColonne = .Cells(LigneTitreSource, .Columns.Count).End(xlToLeft).Column
             Set AireTcd = .Range(.Cells(LigneTitreSource, 1), .Cells(DerniereLigne, DerniereColonne))
     
        End With
     
        ' Suppression éventuelle feuille Tcd déjà existante
        For Each ShTcd In Sheets
            If ShTcd.Name = NomFeuilleTcd Then
               Application.DisplayAlerts = False
               ShTcd.Delete
               Application.DisplayAlerts = True
               Exit For
             End If
        Next ShTcd
     
         ' Création de l'onglet supportant le TCD
         Set ShTcd = Worksheets.Add(after:=Sheets(Sheets.Count))
         With ShTcd
            .Name = NomFeuilleTcd
         End With
     
         ' Création du Tcd
         ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=AireTcd, Version:=xlPivotTableVersion12). _
            CreatePivotTable TableDestination:="'" & NomFeuilleTcd & "'!R3C1", TableName:="TCD1", DefaultVersion:=xlPivotTableVersion12
     
           ' xlPivotTableVersion12 : A adapter suivant votre version d'Excel
     
         Set Pvt = ShTcd.PivotTables("TCD1")
     
         With Pvt
     
                With .PivotFields("Sexe")
                    .Orientation = xlColumnField
                    .Position = 1
                End With
                With .PivotFields("Date")
                    .Orientation = xlRowField
                    .Position = 1
                End With
     
                .AddDataField Pvt.PivotFields("Id"), "Nombre de Id", xlCount
     
                ' Groupement des années et des mois
                .RowRange.Cells(3, 1).Group Start:=True, End:=True, Periods:=Array(False, False, False, False, True, False, True)
     
                ' Attribution d'un style
                .TableStyle2 = "PivotStyleDark7"
     
                ' La zone ColumnRange est la zone au dessus des données
                With .ColumnRange
                    .HorizontalAlignment = xlCenter
                    .ColumnWidth = 16
                End With
     
     
                ' La zone DataBodyRange est la zone des données
                With .DataBodyRange
                    .HorizontalAlignment = xlCenter
                End With
     
     
        End With
     
        ActiveWindow.DisplayGridlines = False
     
        Set AireTcd = Nothing
        Set ShTcd = Nothing
     
    End Sub
    La macro est lancée dans l'onglet source avec cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub BoutonCreerLeTcd_Click()
            CreationTcd Sheets("Données"), 10, "Tcd"
    End Sub

    Si vous n'avez pas la main sur le nom du TCD :
    S'il n'y a qu'un seul TCD sur l'onglet, le problème ne se pose pas.

    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
     
    Sub SelectionTcd()
     
    Dim ShTcd As Worksheet
    Dim Pvt As PivotTable
    Dim I As Integer
     
        Set ShTcd = Sheets("Feuil1") ' Nom de la feuille contenant le TCD
     
        With ShTcd
             If .PivotTables.Count > 0 Then
                For I = 1 To .PivotTables.Count
                    Set Pvt = .PivotTables(I)
                    Pvt.TableRange2.Select  ' La méthode Select n'est utilisée que pour montrer le TCD
                                                     ' sinon elle n'est pas utile
                    MsgBox Pvt.Name
                    '........
                    Set Pvt = Nothing
                Next I
            End If
        End With
     
        Set ShTcd = Nothing
     
    End Sub
    Une fois compris le principe, il vous faut travailler avec l'enregistreur de macro et corriger le code selon vos besoins.

    L'exemple est dans le fichier joint :

    Pièce jointe 220498

    Pour connaître les zones nommées d'un TCD travail-zones-nommees-tcd-vba

    Cordialement.
    Dernière modification par Invité ; 17/09/2016 à 09h10.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Bonjour Eric Kergresse,

    Merci pour cette explication très claire et détaillée pour une création et utilisation des TCD.

    En fait, je pensais éviter d'utiliser un TCD, je pensais plutôt utiliser un tableau matrice qui pourrait me donner le même résultat, sans passer par un TCD. Je pensais à des tableaux avec plusieurs dimensions et utilisation des "ubunt " etc...

    Mais je vous remercie grandement pour votre aide et garde votre code "au chaud"

    Merci pour votre aide,

  4. #4
    Invité
    Invité(e)
    Par défaut
    Que cherchez-vous à récupérer dans votre TCD ? Les totaux de la dernière colonne ?

    Cordialement.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Bonjour,

    Il y a un peu de ça, mais pas seulement... :
    C'est un fichier de suivi commercial , résultat final attendu :
    En ligne, le nom des commerciaux, en colonne les différentes villes et en valeurs la somme des ventes par ville. Ce que fait naturellement un TCD. Et pour répondre à votre question,
    Ce qui m'interesse essentiellement, c'est connaître pour chaque commercial, la ville où la somme des ventes est la plus grande...
    En vous remerciant pour votre aide,

  6. #6
    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

    Alors TCD ou pas TCD ?

    Un simple filtre sur un TCD, donnera ce top villes si on met Commercial et ville en ligne avec un filtre 10 premiers appliqué au champ ville, limité à 1 en partant du haut.

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

Discussions similaires

  1. [XL-2010] Impression d'un TCD avec code VBA
    Par nibledispo dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/05/2013, 20h07
  2. [XL-2007] Problème de génération de TCD (Pivot table) avec VBa
    Par ManinBI dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/04/2012, 12h12
  3. [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
  4. ajouter et supprimer des données dans un tcd avec vba
    Par pscoool dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 09/12/2009, 18h14
  5. [PPT-2003] quiz avec résultats dans powerpoint 2003 en Vba
    Par quizvbappt dans le forum VBA PowerPoint
    Réponses: 15
    Dernier message: 12/05/2009, 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