IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur lors de la création de TCD [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Actuaire
    Inscrit en
    Juillet 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Actuaire
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 49
    Par défaut Erreur lors de la création de TCD
    Bonjour tout le monde,

    J'ai un problème que je n'arrive pas à résoudre:

    J'ai créé une macro qui crée un tableau croisé dynamique à partir d'une source de données, jusque là rien de compliqué.

    J'ai ajouté un peu de gestion d'erreur, car je ne serai certainement pas le seul à utiliser ce programme.

    En gros, on ouvre le classeur contenant la source, on crée un onglet "TCD" et on crée le pivot table dedans.

    Je fais le check suivant : Si , lorsqu'on ouvre le classeur, l'onglet TCD existe déja, on supprime le TCD contenu dans l'onglet et on en recrée un, sinon on ne fait rien.

    En gros j'ai 2 traitements sur 2 fichiers légèrement différents, sur l'un cela fonctionne sans problème, sur l'autre cela ne fonctionne pas.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
     
    Sub create_TCD(traite As Variant, target As Workbook)
     
    'Déclaration des variables
    Dim wshTCD      As Worksheet
    Dim PvtTCD      As PivotTable
    Dim source_table As Range
    Dim input_sheet As String
    Dim last_col, last_row As Long
     
     
    'Code et noms d'onglets différents selon le traite
    If traite = "source1" Then
        input_sheet = "Q_25_08_Crea_Bord_source1"
        GoTo traitement_source1
    ElseIf traite = "source2" Then
        input_sheet = "Q_25_06_Crea_Bord_source2"
        GoTo traitement_source2
    End If
     
     
    '************************************************************************************************************
    'Traitement des données source1
    '************************************************************************************************************
    traitement_source1:
    'Calcul des dimensions du tableau à récupérer
    last_row = target.Sheets(input_sheet).Range("b20").End(xlDown).Row
    last_col = target.Sheets(input_sheet).Range("b20").End(xlToRight).Column
     
    'Définition du tableau source
    target.Sheets(input_sheet).Activate
    Set source_table = target.Sheets(input_sheet).Range(Cells(20, 2), Cells(last_row, last_col))
    'source_table.Select
     
    'Vérification : "l'onglet TCD n'existe pas déja. Si oui, on efface le TCD en gardant l'onglet"
    On Error Resume Next
    target.Sheets("TCD").Activate
     
    If Err.Number = 0 Then
       'Suppression de tous les TCD existants dans la feuille
        target.Sheets("TCD").Range("A1:Z100").ClearContents
    Else
        'Création d'un nouvel onglet pour le stockage du TCD
        Sheets.Add
        ActiveSheet.Name = "TCD"
    End If
     
    On Error GoTo 0
     
     
     
    'Affectation du TCD à la feuille "TCD"
    Set wshTCD = Worksheets("TCD")
     
     
       'Ajout d'un TCD sur l'onglet "TCD"
        Set PvtTCD = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=source_table) _
              .CreatePivotTable(tabledestination:=wshTCD.Range("B5"), TableName:="TCD_" & traite)
     
        'Ajout des champs au TCD
        With PvtTCD
     
        '### Champ Ligne
     
     
        '### Champ Colonne
                With .PivotFields("MOTIVO PAGAM")
                .Orientation = xlColumnField
                .Position = 1
            End With
     
        '### Champ Etiquette de données
            With .PivotFields("TIPO TRAT")
                .Orientation = xlPageField
                .Position = 1
            End With
     
                    With .PivotFields("ANNO GEN")
                .Orientation = xlPageField
                .Position = 1
            End With
     
     
        '### Champ Valeurs
            With .PivotFields("TIPO TRAT")
                .Orientation = xlDataField
            End With
     
     
           'Filtrage des données
           PvtTCD.PivotFields("TIPO TRAT").CurrentPage = "1VITA" 'On ne regarde que les traités "1VITA"
           PvtTCD.PivotFields("ANNO GEN").EnableMultiplePageItems = True
           On Error Resume Next
           PvtTCD.PivotFields("ANNO GEN").PivotItems("2001").Visible = False 'On exclut la génération 2001 du filtre
            On Error GoTo 0
        End With
     
        GoTo Fin_Proc
     
     
    '************************************************************************************************************
    'Traitement des données source2
    '************************************************************************************************************
    traitement_source2:
    'Calcul des dimensions du tableau à récupérer
    last_row = ActiveSheet.Range("b20").End(xlDown).Row
    last_col = ActiveSheet.Range("b20").End(xlToRight).Column
     
    'Définition du tableau source
    target.Sheets(input_sheet).Activate
    Set source_table = target.Sheets(input_sheet).Range(Cells(20, 2), Cells(last_row, last_col))
    source_table.Select
     
    'Vérification : "l'onglet TCD n'existe pas déja. Si oui, on efface le TCD en gardant l'onglet"
    On Error Resume Next
    target.Sheets("TCD").Activate
     
    If Err.Number = 0 Then
       'Suppression de tous les TCD existants dans la feuille
        target.Sheets("TCD").Range("A1:Z100").ClearContents
    Else
        'Création d'un nouvel onglet pour le stockage du TCD
        Sheets.Add
        ActiveSheet.Name = "TCD"
    End If
     
    On Error GoTo 0
     
     
    'Affectation du TCD à la feuille "TCD"
    Set wshTCD = Worksheets("TCD")
    wshTCD.Activate
     
     
       'Ajout d'un TCD sur l'onglet "TCD"
        Set PvtTCD = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=source_table) _
              .CreatePivotTable(tabledestination:=wshTCD.Range("B5"), TableName:="TCD_" & traite)
     
        'Ajout des champs au TCD
        With PvtTCD
     
        '### Champ Ligne
            With .PivotFields("ANNO GEN")
                .Orientation = xlRowField
                .Position = 1
            End With
     
        '### Champ Colonne
            With .PivotFields("MOTIVO PAGAM")
                .Orientation = xlColumnField
                .Position = 1
            End With
     
        '### Champ Etiquette de données
            With .PivotFields("TIPO TRAT")
                .Orientation = xlPageField
                .Position = 1
            End With
     
     
        '### Champ Valeurs
            With .PivotFields("ANNO GEN")
                .Orientation = xlDataField
                .Function = xlCountNums
            End With
     
     
           'Filtrage des données
           PvtTCD.PivotFields("TIPO TRAT").CurrentPage = "1VITA" 'On ne regarde que les traités "1VITA"
     
     
        End With
     
        GoTo Fin_Proc
     
     
     
     
    Fin_Proc:
     
    End Sub
    Je ne sais pas pourquoi, mais cela ne fonctionne pas pour le traitement de la source 2 si le TCD existait déja lors de l'ouverture du fichier (ligne 136 du code), or le code est identique au traitement de la source 1, la seule chose qui change c'est ce que je met dans les lignes et les colonnes dans le TCD (après la ligne 136 du code).

    L'erreur renvoyée est la suivante :"La méthode create de l'objet pivotcache a échoué".

    J'ai fait des recherches sur internet, et j'ai essayé de vider le cache des TCD, mais l'erreur persiste.

    Si jamais vous pouvez m'aider, cela me permettrait de terminer cette macro!

    merci!

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par Methodrone8 Voir le message
    Je fais le check suivant : Si , lorsqu'on ouvre le classeur, l'onglet TCD existe déja, on supprime le TCD contenu dans l'onglet et on en recrée un, sinon on ne fait rien.
    Je me demande quel est l'intérêt de supprimer les TCD pour les recréer, à part te créer des ennuis ?

    Une fois le TCD créé il me semble plus simple de l'actualiser avec une base évolutive puis éventuellement d'en changer le paramétrage selon les résultats souhaités.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Erreur 1004 lors de la création de TCD avec l'enregistreur de macro
    Par ryobanga dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2010, 15h35
  2. Réponses: 4
    Dernier message: 21/02/2006, 16h47
  3. Réponses: 1
    Dernier message: 26/05/2005, 12h24
  4. message d'erreur lors de la création de la base
    Par ber_jp dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/05/2004, 12h15
  5. message d'erreur lors de la création d'une base
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/04/2004, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo