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
Bonjour le fil, le forum

Juste au cas où un XLDnaute passerait par ici

Une autre syntaxe (simplifiée) et paramétrable.
VB:
Sub test()
'Feuil1 est le codename de la feuille avec les données
'NOMS et NB correspondent aux intitulés de mon exemple
'=>entêtes des colonnes de la base de données
CreatePivot Feuil1, "NOMS", "NB"
End Sub

Private Sub CreatePivot(Feuille As Worksheet, intLig$, intData$)
'inspiré par:http://gallery.technet.microsoft.com/excel-2010-code-example-c1be6ed3
'adapté en macro paramétrable un samedi de mai 2018 ;-)
Dim objTable As PivotTable
    With Feuille
        .Range("A1").Select
    Set objTable = .PivotTableWizard
    End With
        With objTable.PivotFields(intLig)
            .Orientation = xlRowField
        End With
        With objTable.PivotFields(intData)
            .Orientation = xlDataField
            .Function = xlSum
        End With
    'Aperçu du TCD
    ActiveSheet.PrintPreview
    Application.DisplayAlerts = False
    'Suppression du TCD
    If MsgBox("Supprimer le TCD?", vbYesNo + vbCritical, "Avertissement") = vbYes Then
        ActiveSheet.Delete
    End If
    Application.DisplayAlerts = True
 End Sub
 

VBA

XLDnaute Nouveau
Bonjour,

il faudrais faire une toute petite modif dans le code. je fais un petit filtrage de couleur avec quelques produits.
Et ducoup je trie et j'ai une petite boucle qui insert une ligne quand sa change de couleur.
Pourrait t'on rajouter cela dans le code pour qu'il prenne en compte la délimitation entre les deux parties pour la selection des lignes et la création du tcd.


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

Staple1600

XLDnaute Barbatruc
Re

C'est écrit dans les commentaires en vert: cela correspond au noms des intitulés du Tableau Croisé Dynamique.
intLig => int pour intitulé et Lig pour Ligne
intData => Data pour Données

Ceci était juste un exemple pour "nourrir " ton intérêt pour le VBA
(surtout si on prends en compte ton pseudo ;))
 

Staple1600

XLDnaute Barbatruc
Re

Normalement un TCD est actualisable.
Donc si des données sont ajoutées à la base de données (qui normalementne devrait avoir aucune couleur puisque c'est une base de donnée)
Cette macro devrait suffire
VB:
Sub rafraichir_tcd()
Dim rng As Range
Set rng = Worksheets("Feuil1").UsedRange
Set PTCache = ActiveWorkbook.PivotCaches.Add(1, rng)
Sheets("TCD").PivotTables(1).PivotCache.Refresh
End Sub

C'est pour cela que je l'avais posté précédemment
(mais il est vrai qu'à "l'époque "tu ne l'avais pas remarqué ;)))
 

VBA

XLDnaute Nouveau
Oui il est actualisable mais il selectionne toutes les lignes or moi je ne veux qu'il ne selectionne toute les lignes jusqu'à la ligne vide.
Voici comment se presente le fichier une fois le filtre et le trie effecté:

rec.PNG
 

MJ13

XLDnaute Barbatruc
Bonjour à tous, bonjour JM

@VBA: Heureusement que JM est là. Sinon, il me paraît difficile d'aider quelqu'un si le cahier des charges change constamment.

Et sans fichier, cela me paraît être une perte de temps pour tout le monde, toi y compris, avec des macros pour un TCD qui est lié à la structure du tableau de données.

Sinon en reprenant ton fichier, la macro du post 6 et le fichier que j'ai mis, voici une version qui donne le même résultat que ta macro avec explication. L'intérêt c'est que tu n'as pas besoin de tout reparamètrer dans ta macro, quelques lettres bien placées en première ligne du tableau de données et le TCD se crée automatiquement. Je m'en sers tous les jours et cela me fait gagner un temps fou. :)
 

Pièces jointes

  • TCD_Auto_OK_MJ.xlsm
    214.9 KB · Affichages: 80

Staple1600

XLDnaute Barbatruc
Bonjour MJ13

@VBA
Normalement, selon la norme en vigueur dans le monde Excelien, toute base de donnée digne de ce nom ne contient jamais (même les jours fériés) aucune ligne vide.

Donc avec une base de données normalisée, la macro Sub rafraichir_tcd() suffirait amplement.
(Je pense même qu'on pourrait la réduire encore)
 

VBA

XLDnaute Nouveau
@MJ13 je comprend bien ta solution mais le fichier excel moi est jamais le même je fais des extractions toutes les semaines et ducoup j'obtiens toujours un nouveau fichier excel, et pour remettre tes lettres à chaque fois ça va être légerement compliqué d'autant plus que les maccro que je developpe sont destiné à une personne non spécialisé en informatique pour qui tout sa est quelquechose d'incompréhensible, ducoup je veux que ce soit quelquechose de relativement simple pour que la personne n'a juste qu'à lancer la maccro.

@Staple1600 il est indispensable d'insérer une ligne et de séparer des produits pris en compte dans le tcd des autres coloré d'une autre couleurs. C'est pour cela que je veux que ça ne prenne les produits avant la ligne insérée
 

MJ13

XLDnaute Barbatruc
Re

@VBA Pourtant une macro peut très facilement insérer une ligne et mettre les lettres là où il le faut.

Sinon, comme a dit JM, si tu as une ligne vide, cela me paraît difficile de trouver une solution à ton problème.
 

Discussions similaires

Statistiques des forums

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