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 :

Macro tableau croisé dynamique [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 93
    Points : 74
    Points
    74
    Par défaut Macro tableau croisé dynamique
    Bonjour tout le monde

    je commence ma premiére macro en Tableau croisée Dynamique et j'aurais besoins de quelques conseils .

    avant tout j'aimerais corriger les lignes 10,11,12 car je veux reprendre la date avec différent format mais ça n'affiche rien. la même ligne de code fonctionne parfaitement dans une autre macro !!!

    concernant le TCD j'ai trouver du code sur le forum que je dois adapter, il faut que je détérminer les limites de mon tableau avant le traitement de données car je traite des tableaux de différentes tailles . merci pour vos conseils
    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 TCD()
    ThisWorkbook.Worksheets(1).Cells(1, 3) = "ANNEE"
    ThisWorkbook.Worksheets(1).Cells(1, 13) = "MOIS"
    ThisWorkbook.Worksheets(1).Cells(1, 13) = "ANNEE MOIS"
    For ligne = 2 To Range("K" & Rows.Count).End(xlUp).Row
    If (IsEmpty(Range("A" & ligne))) Then
        'MsgBox "date Manquant à la ligne " & ligne
        Exit Sub
        Else
        Range("L" & ligne).Value = Format(Range("K" & ligne).Value, "yyyy")
        Range("M" & ligne).Value = Format(Range("K" & ligne).Value, "mm")
        Range("N" & ligne).Value = Format(Range("K" & ligne).Value, "yyyymm")
    Next ligne
    'End Sub
    Sub CreerTCD()
     
    'SourceData: Définit la source de données dans le TCD.
    '[Feuil1!A1].CurrentRegion.Address(, , xlR1C1, True) permet d'étendre
    'automatiquement la sélection de façon à y inclure toute la zone en cours
    'à partir de la cellule A1, dans la Feuil1.
     
    'TableDestination: Définit la position du TCD (cellule A3 dans la Feuil2).
     
    'TableName: Définit le nom du nouveau TCD. ("Mon TCD")
     
    ThisWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
        [Feuil1!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
        TableDestination:="Feuil2!R3C1", _
        TableName:="Mon TCD"
     
     
    'Mise en forme:
    With Feuil2.PivotTables("Mon TCD")
        'Ajoute un champ de lignes nommé "Ville".
        'Le nom du champ "Ville" doit préalablement exister comme entête de la
        'source de données.
        .AddFields RowFields:="CODE ARTICLE"
        .AddFields RowFields:="ANNEE MOIS"
     
        'Définit l'orientation du champ nommé "CA" en tant que Donnée.
        'le nom du champ "CA" doit préalablement exister comme entête
        'de la source de données.
        .PivotFields("Qte_dem_km").Function = xlSum
    End With
     
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Il manque un :
    après la ligne 13.
    Est-ce que tu es sûr que tes cellules pointent sur la bonne feuille ? essiae quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Worksheets(1)
        For ligne = 2 To Range("K" & Rows.Count).End(xlUp).Row
            If (IsEmpty(Range("A" & ligne))) Then
                'MsgBox "date Manquant à la ligne " & ligne
                Exit Sub
                Else
                .Range("L" & ligne).Value = Format(.Range("K" & ligne).Value, "yyyy")
                .Range("M" & ligne).Value = Format(.Range("K" & ligne).Value, "mm")
                .Range("N" & ligne).Value = Format(.Range("K" & ligne).Value, "yyyymm")
            End If
        Next ligne
    End With
    en changeant l'index de la feuille si ce n'est pas le bon.

    concernant le TCD j'ai trouver du code sur le forum que je dois adapter, il faut que je détérminer les limites de mon tableau avant le traitement de données car je traite des tableaux de différentes tailles . merci pour vos conseils
    Euh... est-ce que tu peux être plus précis ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 93
    Points : 74
    Points
    74
    Par défaut
    je pense que j'ai pas bien expliquer .

    je connais pas la taille du tableau sur lequel je veux executer la fonction , il faut que je sélectionne toute les données avant d'appliquer mon le tableau croisé dynamique?

    car au final ce que je souhaite c'est récupérer une somme en fonction d'un code produit avec la date .

    merci

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    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 203
    Points : 14 354
    Points
    14 354
    Par défaut
    je connais pas la taille du tableau sur lequel je veux executer la fonction , il faut que je sélectionne toute les données avant d'appliquer mon le tableau croisé dynamique?
    Ca dépend de ta version d'Excel; quelle est-elle ? Où sont tes données; sur une feuille Excel ? Maintenant, tu n'es pas obligé d'utiliser un TCD pour faire ce que tu veux faire.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 93
    Points : 74
    Points
    74
    Par défaut
    mes données sont sur la Feuil1 et je suis sous excel 2010.

    j'arrive pas a saisir cette ligne !!
    en gros la je dois pouvoir sélectionner toutes les données de mon tableau qui ne sont pas de la même taille a chaque fois !!
    est ce que le current region sert a cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SourceType:=xlDatabase, SourceData:= _
    "Feuil1!A1:N100"
    j'ai trouvé une solution mais qui prend en considération même les cellules vides .


    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
    Sub TCD()
    Cells.Select
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
    "Feuil1!A1:N100").CreatePivotTable TableDestination:="", TableName:= _
    "TCD"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("TCD").SmallGrid = False
    ActiveSheet.PivotTables("TCD").AddFields RowFields:= _
    "CODE ARTICLE", ColumnFields:="ANNEE MOIS" ', PageFields:=""
    With ActiveSheet.PivotTables("TCD").PivotFields("Qte_dem_km")
    .Orientation = xlDataField
    .Caption = "Somme Qte_dem_km"
    .Function = xlSum
    End With
    Application.CommandBars("PivotTable").Visible = False
    End Sub
    je vous remercie de votre aide .

  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
    Bonjour

    Tu as plusieurs solutions :

    - Currentregion peut marcher si la feuille ne contient bien que les données source
    - si tu as 2007 ou 2010, tu peux convertir ta source en tableau (au sens 2007) et utiliser le tableau comme source du TCD
    - tu peux nommer ta source par une formule décaler et utiliser le nom pour la construction du TCD
    - tu peux par VBA rechercher la dernière ligne remplie sur une colonne sans trou : là aussi sous réserve que ta feuille source ne contienne qu'une liste
    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 régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 93
    Points : 74
    Points
    74
    Par défaut
    merci ,cela fonctionneavec la méthode avec CurrentRegion et je suis sous version 2010.
    pour la suite je vois pas comment faire pour mettre deux étiquettes en tête de colonnes .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'ici je dois ajouter le champ Annee a l'étiquette de colonne
    ActiveSheet.PivotTables("TCD").AddFields ColumnFields:="Mois" ',
    j'aimerias aussi pouvoir nommer ma feuille destination dans laquel je veux créer mon tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableDestination:=""
    mon but final serait de faire un tableau général qui fait la différence des valeurs des deux tableaux croises dynamiques.
    est ce possible d'exprimer une fonction recherche V qui parcourt les deux tableaux et ensuite on fait la diff entre les deux résultats triés par date

    je cherche une fonction qui peut m'aider a faire ce calcul !!

    merci de votre aide

    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
    Sub TCP()
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
     [Feuil1!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
     TableDestination:="", TableName:="TCP"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("TCP").SmallGrid = False
    ActiveSheet.PivotTables("TCP").AddFields RowFields:= _
    "CODE ARTICLE", ColumnFields:="ANNEE MOIS" ', PageFields:=""
    With ActiveSheet.PivotTables("TCP").PivotFields("Qte_dem_km")
    .Orientation = xlDataField
    .Caption = "somme Qte_dem_km"
    .Function = xlSum
    End With
    Application.CommandBars("PivotTable").Visible = False
    Call TCD
    End Sub
    Sub TCD()
    ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
     [Feuil3!A1].CurrentRegion.Address(, , xlR1C1, True)).CreatePivotTable _
     TableDestination:="", TableName:="TCD"
    ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
    ActiveSheet.Cells(3, 1).Select
    ActiveSheet.PivotTables("TCD").SmallGrid = False
    ActiveSheet.PivotTables("TCD").AddFields RowFields:="Article"
    ActiveSheet.PivotTables("TCD").AddFields ColumnFields:="Année"
    'ici je dois ajouter le champs mois a l'étiquette de colonne
    'ActiveSheet.PivotTables("TCD").AddFields ColumnFields:="Mois" ', PageFields:=""
    With ActiveSheet.PivotTables("TCD").PivotFields("Qté restant à livrer")
    .Orientation = xlDataField
    .Caption = "somme Qte_dem_km"
    .Function = xlSum
    End With
    Application.CommandBars("PivotTable").Visible = False
    End Sub

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

Discussions similaires

  1. Macro Tableau croisé dynamique
    Par Vanene dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/07/2012, 10h10
  2. macro Tableau croisé dynamique
    Par nounouna dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/05/2010, 13h01
  3. [XL-2003] Macro Tableau croisé dynamique
    Par Otmanes dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2009, 17h18
  4. [XL-2007] Macro tableau croisé dynamique
    Par naty76 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2009, 09h35
  5. [VBA-E] pb entre macro et tableau croisé dynamique
    Par flear dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/01/2007, 09h19

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