Edition d'un ETAT

Bonjour à tous,

Débutant en VBA j'ai un problème qui me semble assez compliqué.

J'ai 2 onglets ; 1 contenant des données et l'autre étant un ETAT des données.

Dans cet état je veux que mes données soient rassemblées par magasins (A,B,C...) avec une colonne par magasin. (Si le magasin n'est pas dans les données je ne veux pas qu'il apparaisse dans mon état). Les données que je veux afficher dans les colonnes des magasins (A,B,C...) de mon onglet "ETAT" sont celles de la colonne "total" de mon onglet "données".

Le nombre de ligne de l'onglet données n'est pas fixe.

Je vous joins mon fichier avec un exemple de l'état attendu (en bleu) dans l'onglet "données", qui sera je pense plus parlant que mes explications.

J'ai déjà commencé le code dans lequel j'ai réussi à récupérer les données de l'onglet "données", supprimer les doublons et reporter les magasins (A, B, C,...) en colonne dans mon onglet ETAT.

Je précise que j'ai essayé des choses en essayant de faire des concatener mais sans grande réussite.

Merci par avance de votre aide !

28exemple.xlsm (22.94 Ko)

Bonjour,

Avec un nom pareil je me devais d'essayer de répondre :d

Pourquoi une macro ? Une TCD ne convient pas ?

Voir feuille 1 dans l'exemple.

Cordialement,

Vbabeginner

Hey !

Oui un TCD irait très bien mais tout doit être fait en VBA (pour des raisons obscures ahah)

Re,

Malheureusement je ne suis pas à l'aise avec VBA et les TCD ...

Mais patience quelqu'un d'autre te viendra surement en aide.

Bonne continuation.

Vbabeginner

Merci d'avoir prit le temps de répondre quand même !

Bonne continuation à toi aussi

Bonjour et bonne année,

Une proposition à étudier.

A te relire.

Cdlt.

26exemple.xlsm (25.21 Ko)
Option Explicit

Private Sub ETAT_Click()
Dim wb As Workbook
Dim wsData As Worksheet, wsPT As Worksheet
Dim lastRow As Long, lastCol As Long
Dim rngData As Range
Dim PTCache As PivotCache
Dim pt As PivotTable

    Application.ScreenUpdating = False

    Set wb = ActiveWorkbook

    With wb
        Set wsData = .Worksheets("Données")
        Set wsPT = .Worksheets("ETAT")
    End With

    On Error Resume Next
    wsPT.PivotTables(1).TableRange2.Clear
    On Error GoTo 0

    With wsData
        lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row - 1
        Set rngData = .Cells(1).Resize(lastRow, lastCol)
    End With

    With wsPT
        Set PTCache = wb.PivotCaches.Create(xlDatabase, rngData, 4)
        Set pt = PTCache.CreatePivotTable(.Cells(1), "TCD_1", , 4)
        With pt
            .ManualUpdate = True
            .AddFields RowFields:="Gencod", ColumnFields:="Magasin(De A à E)"
            With .PivotFields("Total")
                .Orientation = xlDataField
                .Function = xlSum
                .NumberFormat = "#,##0"
                .Caption = ChrW(931) & " Coût total"
            End With
            .RowAxisLayout xlTabularRow
            .ColumnGrand = True
            .RowGrand = False
            .TableStyle2 = "PivotStyleMedium2"
            .ManualUpdate = False
        End With
        .Activate
    End With

    Set pt = Nothing: Set PTCache = Nothing
    Set rngData = Nothing
    Set wsPT = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub

Bonsoir et merci pour ta réponse, bonne année également.

C'est un exercice pour mes cours comme je l'ai dit précédemment et un TCD n'est pas ce qui est demandé.

J'aurais du le préciser désolé !

J'ai finalement réussi à résoudre mon problème moi même, même si ça m'a prit pas mal de temps !

Encore désolé !

Bonne nuit

Bonjour,

Tu pourrais envoyer ton résultat et ainsi en faire profiter le forum?

Cdlt.

Bonjour Jean-Eric,

Par curiosité j'ai testé ta solution mais j'ai un message d'erreur :

" Run time error 5 : Invalid procedure call or argument. "

La première ligne qui semble poser problème est la suivante :

Set PTCache = wb.PivotCaches.Create(xlDatabase, rngData, 4)

Aurais-tu une idée de la raison de cette erreur ?

Pour info j'ai juste ouvert ton fichier et appuyer sur ETAT, je suis sur Office 2007 et les macros sont bien activées.

Merci !

Bonne journée,

Vbabeginner

Bonjour VBABEGINNER,

La syntaxe complète pour la création d'un cache de tableau croisé dynamique est :

        'Set PTCache = wb.PivotCaches.Create(xlDatabase, rngData, 4)
        Set PTCache = wb.PivotCaches.Create _
                      (SourceType:=xlDatabase, _
                       SourceData:=rngData, _
                       Version:=4)
        'Set pt = PTCache.CreatePivotTable(.Cells(1), "TCD_1", , 4)
        Set pt = PTCache.CreatePivotTable _
                 (tabledestination:=.Cells(1), _
                  TableName:="TCD_1", _
                  DefaultVersion:=4)

Il y a Version et DefaultVersion à 4. Ce qui correspond à Excel 2010. Pour Excel 2007, cette valeur doit être égale à 3.

Regarde l'aide VBA pour l'énumération XlPivotTableVersionList.

https://msdn.microsoft.com/fr-fr/library/office/ff839430(v=office.15).aspx

Cdlt.

Nota :

Tu risques aussi d'avoir un message d'erreur pour :

.RowAxisLayout xlTabularRow

Je ne sais plus si cette méthode existe sous Excel 2007...

Bonjour Jean-Eric,

Ha oui du coup ça marche vachement mieux ! Merci.

Et je te confirme qu'il n'y a pas de problème avec

.RowAxisLayout xlTabularRow

Bonne journée,

Vbabeginner

Rechercher des sujets similaires à "edition etat"