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 VBA TablePivot


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Par défaut Macro VBA TablePivot
    Bonjour,

    Je débute sur VBA et je rencontre un problème avec le code suivant:

    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
    Sub Developpement()
    Sheets.Add
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Data!R1C1:R461C11", Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Feuil7!R3C1", TableName:="Tableau croisé dynamique6", _
            DefaultVersion:=xlPivotTableVersion10
        Sheets("Feuil7").Select
        Cells(3, 1).Select
        
        With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Qualification")
            .Orientation = xlPageField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Motif")
            .Orientation = xlPageField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Affecté à")
            .Orientation = xlRowField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Services")
            .Orientation = xlRowField
            .Position = 2
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Nom commercial")
            .Orientation = xlRowField
            .Position = 3
        End With
        ActiveSheet.PivotTables("Tableau croisé dynamique6").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique6").PivotFields("CA"), "Somme de CA", _
            xlSum
        ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Qualification").ClearAllFilters
        ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields( _
            "Qualification").CurrentPage = "Développement "
        ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Motif"). _
            ClearAllFilters
        ActiveSheet.PivotTables("Tableau croisé dynamique6").PivotFields("Motif"). _
            CurrentPage = "Commercial "
        Sheets("Feuil7").Select
        Sheets("Feuil7").Name = "TCD Développement"
        Range("E31").Select
    End Sub
    J'ai créé ce code via l'enregistrement de macros sur Excel, il fonctionnait au départ mais plus maintenant. Autre chose, la feuille contenant mes données est variable chaque mois, je cherche un code qui tiendrais compte de cela.

    D'avance merci.

  2. #2
    Invité
    Invité(e)

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Par défaut
    Bonjour rdurupt,

    Je te remercie pour le lien, ton tableau est très bien mais très compliqué pour mon faible niveau.

    Je veux simplement modifier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SourceData:= _"Data!R1C1:R461C11"
    dans le code pour que le TCD s'adapte en fonction de la taille de la base de données

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableDestination:="Feuil7!R3C1"
    pour créer le TCD dans un onglet nommé directement pour éviter la manip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Feuil7").Select
        Sheets("Feuil7").Name = "TCD Développement"
    en fin de code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "Data!R1C1:R461C11", Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Feuil7!R3C1", TableName:="Tableau croisé dynamique6", _
            DefaultVersion:=xlPivotTableVersion10
        Sheets("Feuil7").Select
        Cells(3, 1).Select

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je te remercie pour le lien, ton tableau est très bien mais très compliqué pour mon faible niveau.
    Pourtant, plus simple que cela, c'est difficile.
    Pour obtenir l'adresse d'une plage de cellules dynamiquement, tu as plusieurs possibilités dont en voici deux
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("db").UsedRange
    ou (si la plage de données commence à la cellule A1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
    Pour le premier code, il faut que la plage de données soit seule sur la feuille
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,Philippe
    les classe ça affole mais quand on regarde le code ça simplifie grandement!

  6. #6
    Membre confirmé
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Par défaut
    Message d'erreur 5, il me surligne le code ci-dessous en jaune:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            ThisWorkbook.Worksheets("Data").Range("A1").CurrentRegion, Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Feuil7!R1C1", TableName:="Tableau croisé dynamique6", _
            DefaultVersion:=xlPivotTableVersion14
    Citation Envoyé par rdurupt Voir le message
    les classe ça affole mais quand on regarde le code ça simplifie grandement!
    Il est vrai que ça affole quand on connait pas parfaitement le langage.

    Si j'ai bien suivi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TDC.CreerTableau ActiveWorkbook, "DATA!" & Sheets("DATA").UsedRange.Address, "TDC", "DATA"
    TDC.NewPivotTables "DATE", TypeFiltre
    TDC.NewPivotTables "DATES", TypeFiltre
    TDC.NewPivotTables "FOURNISSEUR", Typeligne, True
    TDC.NewPivotTables "PIECE", Typeligne, True
    TDC.NewPivotTables "REF", TypeColonne, True
    TDC.NewDataField "MONTANT", Somme
    TDC.AfficheTotal True, True
    TDC.Style PivotStyleMedium9
    "DATE"; "DATES"; sont les titres de tes colonnes et les TypeFiltre sont paramétrables.

    Si True est placé le TCD les affiche, si il n'y a rien ils ne sont pas affichés?

  7. #7
    Membre confirmé
    Homme Profil pro
    Chef d'exploitation
    Inscrit en
    Juillet 2014
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef d'exploitation
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 57
    Par défaut Correction balises
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Pourtant, plus simple que cela, c'est difficile.
    Je dois vraiment être nul mais cela ne fonctionne toujours pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets.Add
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            ThisWorkbook.Worksheets("Data").Range("A1").CurrentRegion, Version:=xlPivotTableVersion14).CreatePivotTable _
            TableDestination:="Feuil7!R1C1", TableName:="Tableau croisé dynamique6", _
            DefaultVersion:=xlPivotTableVersion14
        Sheets("Feuil7").Select
        Cells(3, 1).Select
    J'ai trouvé un autre code qui fonctionne bien mais pour celui la je n'arrive pas à paramétrer les filtres correctement:

    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
    Sub CreatePivotdev()
     
        Dim objTable As PivotTable, objField As PivotField
        ActiveWorkbook.Sheets("Data").Select
        Range("A1").Select
     
        With ActiveSheet.PivotTables("Tableau croisé dynamique12").PivotFields( _
            "Qualification")
            .PivotItems("Apport vente ").Visible = False
            .PivotItems("Fin suspension fact. ").Visible = False
            .PivotItems("Hausse tarifaire ").Visible = False
            .PivotItems("Perte ").Visible = False
            .PivotItems("Perte partielle ").Visible = False
            .PivotItems("Rénégo tarifs ").Visible = False
            .PivotItems("Suspension fact. ").Visible = False
            .PivotItems("Transfert inter-centre ").Visible = False
            .PivotItems("Variation d'activité ").Visible = False
        End With
        With ActiveSheet.PivotTables("Tableau croisé dynamique12").PivotFields("Motif")
            .PivotItems("Cessation d'activité ").Visible = False
            .PivotItems("Changement de propriétaire ").Visible = False
            .PivotItems("Concurrence ").Visible = False
            .PivotItems("(blank)").Visible = False
        End With
     
        ActiveSheet.PivotTables("Tableau croisé dynamique12").PivotFields( _
            "Qualification").Subtotals = Array(False, False, False, False, False, False, False, _
            False, False, False, False, False)
        Range("D12").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique12").PivotFields("Motif"). _
            Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
            False, False)
     
        Set objTable = Data.PivotTableWizard
     
        Set objField = objTable.PivotFields("Services")
        objField.Orientation = xlRowField
        Set objField = objTable.PivotFields("Qualification")
        objField.Orientation = xlRowField
        Set objField = objTable.PivotFields("Motif")
        objField.Orientation = xlRowField
        Set objField = objTable.PivotFields("Affecté à")
        objField.Orientation = xlRowField
     
        Set objField = objTable.PivotFields("CA")
        objField.Orientation = xlDataField
        objField.Function = xlSum
        objField.NumberFormat = "#,##0.00 $"
     
    End Sub
    Le problème vient du fait (à mon avis) qu'il faut que j'appelle le TCD de manière dynamique au lieu de "Tableau croisé dynamique12"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveSheet.PivotTables("Tableau croisé dynamique12").PivotFields( _
            "Qualification").Subtotals = Array(False, False, False, False, False, False, False, _
            False, False, False, False, False)

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je dois vraiment être nul mais cela ne fonctionne toujours pas:
    Qu'est-ce qui ne fonctionne pas ?
    Il ne se passe rien, il y a un message d'erreur si oui quel numéro et quel en est le texte ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Probleme d'enregistrement sur Macro/VBA de Excel
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/11/2005, 17h23
  2. Connaître la taille d'un module avec une macro VBA ou autre
    Par beegees dans le forum Général VBA
    Réponses: 15
    Dernier message: 22/11/2005, 09h47
  3. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51
  4. Macro VBA sur Access
    Par beurnoir dans le forum Access
    Réponses: 3
    Dernier message: 12/10/2005, 16h46
  5. [SQL][MACRO VBA]Pb de syntaxe
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/08/2004, 09h11

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