Edition d'un ETAT Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
V
VBeginnerA
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 janvier 2016
Version d'Excel : 2010

Message par VBeginnerA » 2 janvier 2016, 14:47

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 !
Exemple.xlsm
(22.94 Kio) Téléchargé 26 fois
V
VBABEGINNER
Membre dévoué
Membre dévoué
Messages : 725
Inscrit le : 5 novembre 2014
Version d'Excel : 2010

Message par VBABEGINNER » 2 janvier 2016, 14:56

Bonjour,

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


Pourquoi une macro ? Une TCD ne convient pas ?

Voir feuille 1 dans l'exemple.


Cordialement,

Vbabeginner
Copy of Exemple.xlsm
(22.62 Kio) Téléchargé 21 fois
V
VBeginnerA
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 janvier 2016
Version d'Excel : 2010

Message par VBeginnerA » 2 janvier 2016, 15:04

Hey !
Oui un TCD irait très bien mais tout doit être fait en VBA (pour des raisons obscures ahah)
C'est un projet pour l'école
V
VBABEGINNER
Membre dévoué
Membre dévoué
Messages : 725
Inscrit le : 5 novembre 2014
Version d'Excel : 2010

Message par VBABEGINNER » 2 janvier 2016, 15:09

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
V
VBeginnerA
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 janvier 2016
Version d'Excel : 2010

Message par VBeginnerA » 2 janvier 2016, 17:57

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

Bonne continuation à toi aussi :)
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'569
Appréciations reçues : 556
Inscrit le : 27 août 2012
Version d'Excel : 365 Insider

Message par Jean-Eric » 2 janvier 2016, 22:55

Bonjour et bonne année,
Une proposition à étudier.
A te relire.
Cdlt.
Exemple.xlsm
(25.21 Kio) Téléchargé 23 fois
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
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
V
VBeginnerA
Nouveau venu
Nouveau venu
Messages : 4
Inscrit le : 2 janvier 2016
Version d'Excel : 2010

Message par VBeginnerA » 3 janvier 2016, 01:48

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 :)
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'569
Appréciations reçues : 556
Inscrit le : 27 août 2012
Version d'Excel : 365 Insider

Message par Jean-Eric » 3 janvier 2016, 09:38

Bonjour,
Tu pourrais envoyer ton résultat et ainsi en faire profiter le forum?
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
V
VBABEGINNER
Membre dévoué
Membre dévoué
Messages : 725
Inscrit le : 5 novembre 2014
Version d'Excel : 2010

Message par VBABEGINNER » 3 janvier 2016, 13:49

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
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'569
Appréciations reçues : 556
Inscrit le : 27 août 2012
Version d'Excel : 365 Insider

Message par Jean-Eric » 3 janvier 2016, 14:14

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/librar ... e.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...
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message