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 :

Excel 2013=> Macro pour obtenir un TCD


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    cadre
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : cadre
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Par défaut Excel 2013=> Macro pour obtenir un TCD
    Bonsoir,

    je souhaiterais savoir s'il serait possible de créer une macro pour obtenir un tableau croisé dynamique? Si oui, quel en serait le code?

    En vous remerciant par avance,

    cordialement,

    Pierre.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par infoclp81 Voir le message
    Bonjour,

    Une piste : suppression-re-creation-tcd

  3. #3
    Membre averti
    Homme Profil pro
    cadre
    Inscrit en
    Mai 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : cadre
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2012
    Messages : 35
    Par défaut
    Bonjour,

    merci pour votre réponse. Serait-il possible de mettre un peu plus de commentaires (commentaires plus détaillé pour chaque ligne de code?

    merci pour tout .

    Je suis débutant dans VBA.

    cordialement,

    Pierre.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par infoclp81 Voir le message
    Bonjour Pierre,

    Bien que le code soit déjà documenté, il ne le sera jamais assez....

    Je vous propose plutôt la méthode suivante, celle qui m'a permis d'avancer en VBA. Avec l'enregistreur de macro, vous allez créer le TCD dont vous avez besoin et à la fin vous allez récupérer le code que vous avez tapé. Il faudra ensuite le simplifier et l'automatiser.

    Attention le nombre de lignes est impressionnant, il vous faudra donc être modeste dans les séquences de conception au risque de vous perdre dans le code. Vous commencez par la création du TCD en sélectionnant 3 champs, vous allez au résultat et vous poursuivez en complexifiant à partir du TCD obtenu toujours en utilisant l'enregistreur de macros.

    Si vous mettez votre code en ligne en indiquant les difficultés auxquelles vous êtes confronté et les lignes où le programme "bugue", on sera un certain nombre à vous aider.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut
    Bonsoir tous

    Une petit exemple pour embrayer
    Code vba : 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
    Sub Sub_Sub_Sub()
    Dim objTable As PivotTable, objField As PivotField
    'Création de données pour test
    With Sheets.Add
        .Range(.Cells(2, 1), .Cells(22, 1)) = "=""P. NOM ""&CHAR(64+ROW()-1)&ROW()"
        .Cells(1, 1).Resize(, 5) = Split("NOMS NOMBRE PRIX1 PRIX2 TAUX")
        .Cells(2, 2).Resize(21, 4) = "=ROW()*COLUMN()"
    End With
    'Lignes de codes pour créer rapidement un TCD
    ActiveSheet.PivotTableWizard
    Set objTable = ActiveSheet.PivotTableWizard
    With objTable
        With .PivotFields("NOMS")
            .Orientation = xlRowField
            .Position = 1
        End With
        .AddDataField .PivotFields("PRIX1"), "Somme de PRIX1", xlSum
        .AddDataField .PivotFields("PRIX2"), "Somme de PRIX2", xlSum
        .DataPivotField.Orientation = xlRowField
        .DataPivotField.Position = 2
    End With
    End Sub

    Avant de passer au pilotage de TCD par macro, tu as déjà fais un long chemin avec les TCD et ta souris ?
    A mon avis, c'est plus simple de passer au VBA une fois qu'on maitrise les tcd manuellement, non ?

    PS: je n'avais pas vu le lien déposé plus bas par Eric Kergresse,

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Par défaut
    Une version dans laquelle j'ai ajouté des commentaires
    Code vba : 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 Sub_Sub_Sub_Sub_B()
    Dim objTable As PivotTable, objField As PivotField
    'Création de données pour test (sur une nouvelle feuille)
    With Sheets.Add
    .Range(.Cells(2, 1), .Cells(22, 1)) = "=""Nom ""&CEILING((ROW()-1)/4,1)"
    .Cells(1, 1).Resize(, 5) = Split("NOMS QT PRIXHT STOT TTC")
    .[B2:C22] = "=ROW()*COLUMN()": .[D2:D22] = "=RC[-2]*RC[-1]": .[E2:E22] = "=RC[-1]*1.2"
    .UsedRange.Value = .UsedRange.Value: .[A1].CurrentRegion.NumberFormat = "#,##0.00"
    End With
    '<<---///---///+-+-(\°/)+-+\\\---\\\--->>
    'Lignes de codes pour créer rapidement un TCD
    Set objTable = ActiveSheet.PivotTableWizard
    With objTable
    'Le champ NOMS est mis dans la zone LIGNES
        With .PivotFields("NOMS")
        .Orientation = xlRowField: .Position = 1
        End With
    'Le champ QT est mis dans la zone LIGNES
        With .PivotFields("QT")
            .Orientation = xlRowField
            .Position = 2
        End With
    'Les champs PRIXHT et TTC sont mis dans la zone VALEURS
        .AddDataField .PivotFields("PRIXHT"), "Somme de PRIXHT", xlSum
        .AddDataField .PivotFields("TTC"), "Somme de TTC", xlSum
    'Disposition du rapport sous forme tabulaire
        .RowAxisLayout xlTabularRow
    'Dispostion en Colonnes
        .DataPivotField.Orientation = xlColumnField
        .DataPivotField.Position = 1
    'Application d'un style prédéfinie de TCD
        .TableStyle2 = "PivotStyleMedium24"
    End With
    '<<---///---///+-+-(°)+-+\\\---\\\--->>
    End Sub

    Bonne journée.

Discussions similaires

  1. [XL-2010] Macro pour filtrer un TCD à partir d'une cellule
    Par Chrislezoud dans le forum Excel
    Réponses: 5
    Dernier message: 22/03/2013, 10h38
  2. macro pour créer plusieurs tcd à partir d'access
    Par 78580400 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/05/2011, 10h13
  3. Macro pour rafraichir un TCD
    Par athos7776 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/09/2008, 22h49
  4. [VBA-excel]Probleme de macro pour creer un graphique.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/07/2006, 15h42
  5. [VBA Excel] Une même macro pour plusieurs CheckBox
    Par Choupett' dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/06/2006, 13h54

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