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 :

VBA : Créer un TCD sur chaque onglet d' un document [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mars 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut VBA : Créer un TCD sur chaque onglet d' un document
    Bonjour,
    Je souhaiterais créer automatiquement un Tableau croisé dynamique dans chaque onglet de mon document Excel.

    J’ai x onglets avec des tableaux de taille variable. Sur chaque onglet, je voudrais ajouter un TCD.

    Les tableaux seraient créés à partir de la colonne F par exemple.

    Voici mon début de code mais je bloque !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub TCD ()
    ' Création d'un TCD par onglet
    Dim i As Integer
    Dim nb_ong As Integer
    Dim DernLigne As Long
    nb_ong = Sheets.Count
    For i = 2 To nb_ong  Step 1
    Sheets(i).Select
    DernLigne = Range("B" & Rows.Count).End(xlUp).Row
    …
    End Sub
    Classeur1.xlsx

    D'avance Merci de votre aide.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour dttpedt,

    Je ne suis pas un grand expert en TCD mais je pense que ceci peut te servir :
    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
    Sub TDC_multi()
    Dim onglet As Worksheet
    Dim cell_onglet As Range
    Dim max_row As Integer
     
    For Each onglet In Worksheets
     
        With onglet
            Set cell_onglet = .Range("A1:D" & .Columns(1).Find("*", , , , , xlPrevious).Row)
            Call TCD_add(onglet, cell_onglet)
        End With
     
    Next onglet
     
     
    End Sub
     
    Sub TCD_add(onglet As Worksheet, cell_onglet As Range)
     
    With onglet
        test = onglet.Name
        For Each PvTb In .PivotTables
            PvTb.TableRange2.Clear
        Next PvTb
    End With
     
    'Creation du TCD
    onglet.PivotTableWizard SourceType:=xlDatabase, SourceData:=cell_onglet, TableDestination:=onglet.Range("G1"), TableName:="TCD_" & onglet.Name
     
     
    'Mise en forme
    With onglet.PivotTables("TCD_" & onglet.Name)
    'Ajoute un champ de lignes nommé "CZTDCS".
    '----------------.AddFields RowFields:="CZTDCS"
     
    'Définit l'orientation du champ nommé "CZPN" en tant que Donnée.
    '----------------.PivotFields("CZPN").Orientation = xlDataField
     
    'Définit l'orientation du champ nommé "VALEURECAR" en tant que Donnée.
    '----------------.PivotFields("VALEURECAR").Orientation = xlDataField
     
    'Définit l'orientation du champ nommé "VALABS" en tant que Donnée.
    '----------------.PivotFields("VALABS").Orientation = xlDataField
    End With
     
    End Sub
    Ce code te permet de créer sur tous tes onglets en cellule "G1" les TCD de l'onglet courant.
    N'ayant pas plus d'information concernant ce que tu souhaites faire, je te laisse revenir vers moi si tu rencontres des difficultés.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Invité
    Invité(e)
    Par défaut Bonjour,
    Voici un classe qui te permet de créer des TDC couplé avec ce qui est dit plus haut ça vas te simplifier la vie!
    Code Module : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim TDC As New clsTdcRD
     
    TDC.CreerTableau ActiveWorkbook, "Feuil1!A1:c3", "TDC"
    TDC.NewPivotTables "Status", TypeFiltre
    TDC.NewPivotTables "Name", Typeligne
    TDC.NewPivotTables "Product", TypeColonne
     
    TDC.AfficheTotal False, False
    TDC.Style "PivotStyleLight16"
     
    Sheets("TDC").Activate
    ActiveWindow.DisplayGridlines = False
    End Sub
    Code Module de Classe:=clsTdcRD : 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
    Private tb As Object
    Public Enum PivotType
        Typeligne = 1
        TypeColonne = 2
        TypeFiltre = 3
    End Enum
    Public Enum Fonct
    Somme = -4157
    Nombre = -4112
    Moyenne = -4106
    Max = -4136
    Min = -4139
    Produit = -4149
    Chiffres = -4113
    Écartype = -4155
    Écartypep = -4156
    Var = -4164
    VarP = -4165
    End Enum
    Public Function CreerTableau(Wb As Workbook, palge As String, Name As String)
    Dim Ws As Worksheet
    Set Ws = Sheets.Add
       Set tb = Wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            palge, Version:=xlPivotTableVersion12)
       Set tb = tb.CreatePivotTable( _
            TableDestination:=Ws.Range("A1"), TableName:=Name, _
            DefaultVersion:=xlPivotTableVersion12)
            Ws.Name = Name
    End Function
     
     
     
    Public Sub NewPivotTables(Fld As String, Orientation As PivotType, Optional SousTotaux As Boolean)
        With tb.PivotFields(Fld)
            .Orientation = Orientation
            If SousTotaux = False Then
                .LayoutSubtotalLocation = 1
            Else
                .LayoutSubtotalLocation = 2
            End If
     
            '.Position = 1
        End With
     
    End Sub
     
    Public Sub NewDataField(Fld As String, Optional Fonction As Fonct = Somme)
        tb.AddDataField tb.PivotFields(Fld), " " & Fld, Fonction
    End Sub
     
    Public Sub AfficheTotal(Linge As Boolean, Colone As Boolean)
    tb.ColumnGrand = Colone
    tb.RowGrand = Linge
    End Sub
    Public Sub Style(S As String)
     tb.TableStyle2 = S
    End Sub
    Fichiers attachés Fichiers attachés
    • Type de fichier : xls TDC.xls (50,0 Ko, 148 affichages)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mars 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Bonjour Kimy_Ire,

    Je suis désolé mais je ne comprend pas trop ton code. il crée un TCD dans l'onglet 6 et rien dans les autres.

    En faite, j'ai un fichier Excel ayant plusieurs onglets, et chaque onglet à un tableau dont le nombre de ligne varie.

    Ce que je souhaiterais c'est donc d'avoir un TCD par onglet qui reprendrais les valeurs de mes tableaux. Pour la configuration des TCD, il y a aurait les mêmes paramètres pour tous.

    je en sais pas si je suis très clair ? En tout cas merci pour ton aide.

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    je te propose ma nouvelle mouture!
    Fichiers attachés Fichiers attachés
    • Type de fichier : xls TDC.xls (56,0 Ko, 176 affichages)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mars 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci rdurupt pour ta solution sa fonctionne bien mais en faite il me faut modifier la mise en page.

    J'ai vu que dans le module de classe, il y n'y avait que 3 type de pivot or il me manque le 4ème Valeur ! et je ne sais pas comment le créer.

    Concernant la plage de valeur elle est variable sur chaque onglet y a t-il une solution ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par dttpedt Voir le message
    J'ai vu que dans le module de classe, il y n'y avait que 3 type de pivot or il me manque le 4ème Valeur ! et je ne sais pas comment le créer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    'Somme
    'Nombre
    'Moyenne
    'Max
    'Min
    'Produit
    'Chiffres
    'Écartype
    'Écartypep
    'Var
    'VarP
    TDC.NewDataField "Prix", Somme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TDC.CreerTableau ActiveWorkbook, Feuille & "!" & ActiveWorkbook.Sheets(Feuille).UsedRange.Address, "TDC_" & Feuille, AvantFeuille
    TDC.NewDataField "Prix", Somme
    TDC.NewPivotTables "Status", TypeFiltre
    'SousTotaux=true
    TDC.NewPivotTables "Name", Typeligne, True
    TDC.NewPivotTables "Magasin", TypeColonne, True
    TDC.NewPivotTables "Product", Typeligne
    TDC.AfficheTotal True, True
    TDC.Style "PivotStyleLight16"
    Citation Envoyé par dttpedt Voir le message
    Concernant la plage de valeur elle est variable sur chaque onglet y a t-il une solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TDC.CreerTableau ActiveWorkbook, Feuille & "!" & ActiveWorkbook.Sheets(Feuille).UsedRange.Address, "TDC_" & Feuille, AvantFeuille
    et si tu veux relooker TDC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TDC.Style "PivotStyleLight16"
    TDC.Style "PivotStyleDark5"
    pour trouver le style qui te convient, utilise l'enregistreur de macro!
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 10/04/2014 à 14h46.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mars 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2014
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Ok c'est bon maintenant.

    Merci

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

Discussions similaires

  1. VBA pour créer un TCD sur powerpivot
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/09/2012, 16h17
  2. [Toutes versions] repliquer un TCD sur plusieurs onglets
    Par crissud dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/04/2011, 08h21
  3. TabControl avec boutons sur chaque onglet
    Par Nanos dans le forum Contribuez
    Réponses: 3
    Dernier message: 22/07/2010, 14h05
  4. [TCD] [E-03] ventiler un TCD sur des onglets
    Par coyote égaré dans le forum Excel
    Réponses: 2
    Dernier message: 10/06/2008, 12h24
  5. [VBA]Exécuter une tache sur chaque ligne d'une table
    Par Tierisa dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/04/2007, 16h53

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