XL 2016 Création de tableau dynamique croisé

VBA

XLDnaute Nouveau
Bonjour,
J'ai développer un code pour selectionner les données d'un excel et les met en forme dans un tableau dynamique croisé, mais j'ai une erreur au niveau du nom a chaque fois.
Pouvez vous m'aider svp ?

Voici mon code

VB:
Sub TCD_échéancier()

    Der = ActiveSheet.Cells(Rows.count, "A").End(xlUp).Row

For i = 2 To Der
    If Range("M" & i) = 0 Then
        Rows(i).Insert
        Exit For
    End If
Next

    Range("A1:N1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Feuil1!R1C1:R" & i - 1 & "C14", Version:=6).CreatePivotTable TableDestination:= _
        "Feuil2!R3C1", TableName:="Tableau croisé dynamique1", DefaultVersion:=6
    Sheets("Feuil2").Select

    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "FER MON")
        .Orientation = xlRowField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Article" _
        )
        .Orientation = xlDataField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Domaine" _
        )
        .Orientation = xlRowField
        .Position = 2
    End With

    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Semaine échéancier")
        .Orientation = xlColumnField
        .Position = 1
    End With
    With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
        "Reste a livr.")
        .Orientation = xlPageField
        .Position = 1
    End With



End Sub
J'ai aperçu sur le net de mettre sous un tableau et insérer ensuite le TCD. Mias je ne vois pas vraiment comment sa marche.
D'avance merci.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@VBA [Bienvenue sur le forum]
Essaie de voir ce que cela donne en continuant sur la même logique
VB:
Sub TCD_échéancier_TestII()
Dim Plg As Range, Nom_TCD
Set Plg = ActiveSheet.UsedRange
Nom_TCD = InputBox("Nom du TCD?", "TCD", "TCD_N" & Second(Time))
ActiveWorkbook.PivotCaches.Add(SourceType:=1, _
    SourceData:=Plg).CreatePivotTable TableDestination:="", _
    TableName:=CStr(Nom_TCD), DefaultVersion:=1
With ActiveSheet
.PivotTableWizard TableDestination:=.Cells(1, 1)
With .PivotTables(CStr(Nom_TCD))
    With .PivotFields("FER MON")
        .Orientation = xlRowField
        .Position = 1
    End With
 With .PivotFields("Article" )
        .Orientation = xlDataField
        .Position = 1
    End With
'etc...
End With
End With
End Sub
 

MJ13

XLDnaute Barbatruc
Bonjour à tous

J'avais développé il y a quelques années une routine pour faire des TCD automatiquement.

Il suffit de rajouter une ligne et de mettre la destination du TCD soit Lignes(L), colonne(C) ou page(P) puis pour les champs calculés de mettre N = Nombre S = somme M = moyenne Min= Min Max = max ET = Ecart-type.

On peut choisir de faire pour 1 lettre ou plusieurs avec 2 macros.

A voir si cela pourrait servir. :)
 

Pièces jointes

  • TCD_Auto_OK_MJ.xls
    105.5 KB · Affichages: 62

VBA

XLDnaute Nouveau
Bonjour,

Tout dabord pour vos réponse rapide.

Staple1600 j'ai testé ta méthode elle fonctionne bien mais le seul soucis c'est qu'il faut que je rentre la plage moi même. Je filtre des élements que je surligne avec une couleur différente, et ducoup je sépare les deux parties d'une ligne vide comme ceci:

rec.PNG


J'ai eu quelques tentative mais sans succès pourrais tu m'aider ?
 

VBA

XLDnaute Nouveau
J'ai adapté ton code par rapport au mien avec la plage. Mais il m'affiche une erreur identique a ce que j'avais deja.

VB:
Sub TCD_TEST()


Der = ActiveSheet.Cells(Rows.count, "A").End(xlUp).Row

For i = 2 To Der
    If Range("A" & i).Interior.ColorIndex = 46 Then
        Rows(i).Insert
        Exit For
    End If
Next

For j = 2 To Der
    If Range("A" & j) = "" Then
        Exit For
    End If
Next

Dim Plg As Range, Nom_TCD
Set Plg = Feuil1.Range("A1:T" & j - 1)
Nom_TCD = InputBox("Nom du TCD?", "TCD", "TCD_N" & Second(Time))
ActiveWorkbook.PivotCaches.Add(SourceType:=1, _
     SourceData:=Plg).CreatePivotTable TableDestination:="", _
     TableName:=CStr(Nom_TCD), DefaultVersion:=1
With ActiveSheet
.PivotTableWizard TableDestination:=.Cells(1, 1)
With .PivotTables(CStr(Nom_TCD))
     With .PivotFields("Division")
         .Orientation = xlRowField
         .Position = 1
    End With
    With .PivotFields("Article")
         .Orientation = xlDataField
         .Position = 1
    End With
    With .PivotFields("Mag.")
         .Orientation = xlRowField
         .Position = 2
    End With
End With
End With
End Sub

Voici l'erreur que j'obtiens:
1004.PNG
 

VBA

XLDnaute Nouveau
Je ne peux pas joindre le fichier malheuresement il est de nature confidentiel :(

Mais voici quelques fragments :


t.PNG


Voici le début du fichier

tt.PNG


La selection pour le TCD s'arrete avant la ligne blanche.

Vous voyez qu'il n'y a pas de colonne vide, et je viens de reverifier il n'y a pas non plus de ligne vide.

Je ne vois donc pas d'ou peut venir le problème. o_O
 

eriiic

XLDnaute Barbatruc
Bonjour,

si tu crées un nouveau tableau tu risques d'avoir un nouveau nom à chaque fois.
Crée-le une fois pour toute, contrôle ou change son nom, et contente-toi de changer la source des données à chaque fois.
eric
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@VBA
Bien sur que tu peux joindre un fichier
Sauf qu'il s'agira d'un fichier créé ex nihilo avec des données "bidons"
Du style: NOM1 PRENOM1 ADRESSE1 etc
Ou REF1 DESIGNATION1
Bref même structure que l'initial, même nombre de colonne, même format de chiffres etc...
 

eriiic

XLDnaute Barbatruc
Le tableau ne se crée qu'une seul fois par fichier une fois crée je n'y touche plus, je n'ai pas besoin de l'actualiser. Ducoup ta méthode ne fonctionne pas.
Qui te parles d'actualisation ou non ? Tu ne la fais que si tu en as besoin.
Je crois que tu n'as pas compris.
Ta source de données change à chaque besoin et bien sûr que si ça fonctionne si tu la changes sur un TCD déjà créé.
C'est ce qu'il y a de plus simple et de plus efficace. Il est le plus souvent inutile et contre-productif de reconstruire x fois à l'identique un même TCD.
C'est comparable refaire tout le temps une mise forme identique par macro alors que tu peux la faire une fois pour toute sur la feuille. Travail inutile pour excel
eric
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 140
Membres
112 669
dernier inscrit
Guigui2502