Signaler VBA comment automatisé un tableau croisé dynamique

Bonjour les amis,

je reviens vers vous car je galère un peu en ce moment,

voilà , je suis en train de crée des tableau croisé dynamique en vba. mon code fonctionne a moitie. c'est a dire dans l’étiquette de ligne j'ai deux champs, "entité commercial" et "Numéro DC" sauf que après exécution du code, le champs "Numéro DC" ne s'insère en automatique malgré que dans le code il existe en position 2.

pour mon 2e soucis, je cherche a calculer le nombre de cellule non vide de la colonne B et afficher le chiffre dans une cellule de la colonne C qui est de la même ligne du total,

vous trouvez les exemple dans ce fichier "tableau croisé dynamique.xlsx".

et pour le code, il est dans ce fichier "macro TCD.xla"

ce fichier contient 3 modules:

module 1 contient le code du premier tableau croisé dynamique qui est "DC ayant 1 mission"

module 2 contient le code du deuxième tableau croisé dynamique qui est "Mission COMBI"

module 3 contient le code du troisieme tableau croisé dynamique qui est "Misions EC"

pour exécute ce code ouvrir le fichier tableau croisé dynamique puis ouvrir le fichier macro TCD puis aller dans complément->Macro->Edité DC ou -> Edité Mission COMBI ou-> Edité Missions EC

En vous remerciant tous par avance.

27macro-tcd.zip (16.97 Ko)

Bonjour,

Un premier retour : je n'ai traité que la procédure <Editer les DC>.

Il te suffit de reproduire pour les 2 autres.

A te relire.

Bonnes fêtes de fin d'année.

20macro-tcd.xlam (26.17 Ko)
Option Explicit

Public Sub Editer_DC()

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With
    '---------------------------------------------------------------------------------
    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets(wsName)
    Set rngData = wsData.Cells(1).CurrentRegion
    On Error Resume Next
    wb.Worksheets("DC ayant 1 mission").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True
    '---------------------------------------------------------------------------------
    Set PTCache = wb.PivotCaches.Create _
                  (SourceType:=xlDatabase, _
                   SourceData:=rngData)
    '---------------------------------------------------------------------------------
    Set wsPT = wb.Worksheets.Add(After:=wb.Worksheets(Worksheets.Count))
    wsPT.Name = "DC ayant 1 mission"
    '---------------------------------------------------------------------------------
    Set PT = PTCache.CreatePivotTable _
             (tabledestination:=wsPT.Cells(1), _
              TableName:="TCD_1")
    '---------------------------------------------------------------------------------
    With PT
        .ManualUpdate = True
        .AddFields RowFields:=Array("Entité commerciale", "Numéro du DC"), _
                   PageFields:="DH Origine Mission (réel)"
        With .PivotFields("Numéro du DC")
            .Orientation = xlDataField
            .Function = xlCount
            .NumberFormat = "#,##0"
            .Caption = "NB  Numéro du DC"
        End With
        .RowAxisLayout xlOutlineRow
        .SubtotalLocation xlAtBottom
        .TableStyle2 = ""
        .ManualUpdate = False
        With .PivotFields("Entité commerciale")
            .PivotItems("COMBI COMMERCIAL").Visible = False
            .PivotItems("MLMC COMMERCIAL").Visible = False
        End With
        For Each pi In .PivotFields("Entité commerciale").PivotItems
            If pi.Visible = True Then
                Set rng = .PivotFields("NB  Numéro du DC").DataRange
                Set rng2 = .PivotFields("Entité commerciale").PivotItems(pi.Name) _
                           .DataRange.EntireRow
                Set rng3 = Intersect(rng, rng2)
                Set rCell = rng3.Cells(rng3.Rows.Count, 1)
                rCell.Offset(1, 1).Value = Application.Count(rng3)
            End If
        Next pi
    End With
    '---------------------------------------------------------------------------------
    Set rCell = Nothing
    Set rng3 = Nothing: Set rng2 = Nothing: Set rng = Nothing
    Set PT = Nothing
    Set PTCache = Nothing
    Set rngData = Nothing
    Set wsData = Nothing
    Set wb = Nothing

End Sub

Bonjour jean-eric,

je te remercie d'abord pour ton aide, le code il a l'aire correcte mais je ne peux pas l'exécuté car les variables ne sont pas déclarés. aucune variable n'est déclarés. peux-tu stp les déclarés car comme le code n'as pas de commentaire du coup je comprend pas le sens de toutes les variables.

Merci d'avance

Re,

Toutes les variables dont déclarées dans un module standard spécifique.

Cdlt.

le problème le fichier que tu as joint dans ton commentaire ne contient aucune module aucune feuille, et aucune macro. il est vide. ou bien le fait qu'il est en format XLAM et que mon ordi ne peu pas le lire. c'est trop bisard

Jean-Eric a écrit :

Re,

Toutes les variables dont déclarées dans un module standard spécifique.

Cdlt.

tu sais colle le code des variables dans dans une réponse et moi je vais inclure ces variables dans la macro Editer_DC Merci par avance

Re,

Tu ouvres le fichier xlsam.

Rien n'apparaît à l'écran car c'est une macro complémentaire (ta macro complémentaire).

Tu fais ALT F11 et regarde les modules modDeclarations et modEditer_PC.

Cette dernière est lancée avec la commande créée dans le ruban (Compléments).

A te relire.

Cdlt.

Jean-Eric a écrit :

Re,

Tu ouvres le fichier xlsam.

Rien n'apparaît à l'écran car c'est une macro complémentaire (ta macro complémentaire).

Tu fais ALT F11 et regarde les modules modDeclarations et modEditer_PC.

Cette dernière est lancée avec la commande créée dans le ruban (Compléments).

A te relire.

Cdlt.

effectivement c'est ce que j'ai fais, ALT + F11 et le mode visuel basic s'ouvre mais ne contient aucun module et aucune macro, il est carrément vide; c'est comme si tu enregistre une macro complémentaire mais sans créer ni module ni macro.

pour cela je te demande de me coller dans un message, le code de moddeclaration.

en pièce jointe le fichier que tu m'as donné pour vérifier. je te remercie

mon email si t'en a besoin : icecubestory@gmail.com

20macro-tcd.xlam (26.17 Ko)

re,

effectivement c'est ce que j'ai fais, ALT + F11 et le mode visuel basic s'ouvre mais ne contient aucun module et aucune macro, il est carrément vide; c'est comme si tu enregistre une macro complémentaire mais sans créer ni module ni macro.

pour cela je te demande de me coller dans un message, le code de moddeclaration.

en pièce jointe le fichier que tu m'as donné pour vérifier. je te remercie

mon email si t'en a besoin : icecubestory@gmail.com

21macro-tcd.xlam (26.17 Ko)

Re,

Dans l'explorateur Windows, tu effectues un clic droit sur le fichier xlam. Puis dans propriétés, Général, tu as en bas de la fenêtre, une case Débloquer. Tu coches et tu appliques.

Tu ouvres ensuite le fichier, ALT F11, etc...

A te relire.

Cdlt.

Re,

Merci beaucoup, le code marche parfaitement sur le 1e tableau c'est a dire Editer_DC. actuellement je suis en train d'appliquer le code pour le 2e tableau "Editer Mission COMBI", j'ai fais tout les changements nécessaire, et quand j'exécute je tombe sur cette erreur 1004 "le nom du champs dynamique existe déjà"

.caption = "Indice mission"

faut il remplacer ce nom ?? je ne suis pas sûr!

Re,

Le nom du champ (.caption) doit être différent du nom du pivotfield.

A joute un espace à la fin de la chaîne.

Cdlt.

Re,

Yes merci, beaucoup, c'est parfait , je vais maintenant l’adapter au 3e tableau


oui ça marche parfaitement aussi pour le 3e tableau! super cool! je te remercie beaucoup, tu m'as bien sauvé. Bonne fête de fin d'année!

Re,

Pense à clore le sujet.

Bonne fêtes de fin d'année.

Cdlt.

Rechercher des sujets similaires à "signaler vba comment automatise tableau croise dynamique"