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 :

Limite d'un Range/TCD [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Consultant en Gestion de Projets
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Gestion de Projets

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut Limite d'un Range/TCD
    Bonjour,
    Je rencontre un problème sur l'attribution d'un objet Range, que je souhaite exploiter pour la construction d'un TCD.
    - j'ai une base de données dans une feuille "DATA"
    - j'ai déclaré un objet plageSource de type Range
    - lors de l'attribution de cet objet, si je fais le test plageSource.Select : ça sélectionne bien la plage souhaitée sur la feuille de données (y compris les titres de colonne)
    - Cependant : cet objet est inutilisable par la suite.

    En regardant lors de l'exécution du code la fenêtre "variables locales", je constate que ça ne matche pas correctement. Voici un exemple des lignes
    affichées qui me font penser ça :
    - Errors : <Erreur définie par l'application ou par l'objet>
    - FormulaLabel : <Erreur définie par l'application ou par l'objet>
    - Hidden : <Impossible de lire la propriété Hidden de la classe Range>
    - LocationInTable : <Impossible de lire la propriété LocationInTable de la classe Range>
    - etc.

    Lorsque j'affiche l'erreur, j'obtiens : type erreur 13 - incompatibilité de type

    J'ai vérifié, la feuille de données est entièrement au format de cellule standard.

    Voici le fichier avec le code en question :
    http://www.cjoint.com/c/FFcpRkA2Dtp

    Il suffira de cliquer sur le bouton "création courbe en S" une fois le fichier ouvert.
    Ceci fonctionne parfaitement lorsque la plage de données dans DATA est faible (quelques milliers de ligne), mais dans mon cas précis il y a 102 000 lignes et 22 colonnes (et nous sommes loin de la limite en lignes qui frôle le million) : c'est là que ça plante.

    Auriez-vous une indication sur la raison de cette difficulté ? Si oui, comment puis-la résoudre ?

    Merci par avance pour votre aide,

    Aurélien

  2. #2
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Peux-tu déposer ton code (entre balise de préférence) que l'on puisse t'aider ?

    Parce que peu de personnes ouvrent les pièces jointes : http://www.developpez.net/forums/d84...s-discussions/

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant en Gestion de Projets
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Gestion de Projets

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut
    Bonjour

    Et merci pour ta réponse, dans un autre forum on m'avait invité à joindre le fichier en question...
    Voici le code : je n'ai mis que l'en-tête de module pour la déclaration des variables, ainsi que le Sub principal (production_Courbes_S) et celui incriminé dans mon histoire (creerCourbeDynamique).

    Pour faire court, ça plante lorsqu'il faut passer de l'affectation du Range plageSource au PivotTable, ou au choix du pivotTable au TCD.
    Encore une fois, ça fonctionne pour une petite plage de données mais pas pour une grande : c'est là que je ne comprends pas.

    Merci encore pour ton aide !

    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
     
    Option Explicit
     
        'Déclaration de variables de module
     
        Dim feuilleGCD As String, feuilleRepartitionMensuelle As String, mois As String, anneeActu As String, moisActu As String
        Dim i As Long, iprim As Long, premLig As Long, derLig As Long, derCol As Long, cptWP As Long
        Dim valTampon1, valTampon2, valTampon3 As Variant
        Dim plageSource As Range, plageDestination As Range, emplacementGraphe As Range
        Dim monPivotCache As PivotCache
        Dim monTCD As PivotTable
        Dim monPVT As PivotItem
        Dim monChart As Chart
        Dim tabWP_LT(), tabWP() As String
        Dim nomErreur As Error
     
        Const const_taillePlages As Integer = 20
    Sub production_Courbes_S()
        'Main - principal
     
        'Init param
        ReDim tabWP_LT(1, 0)
        ReDim tabWP(0)
        feuilleGCD = "GCD ""S"""
        feuilleRepartitionMensuelle = "Répartition mensuelle"
     
        'Actions successives
        nettoyerFeuille feuilleGCD
        nettoyerFeuille feuilleRepartitionMensuelle
     
        'Demander à l'utilisateur le niveau de granularité : WP1 ou WP1.1
        UserForm2.Show
     
        'Optimisation des calculs
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
     
        'Actions successives
        miseANiveauBDD
        creerCourbeDynamique
        creerGCDRepartitionMensuelle
     
        'Optimisation des calculs
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
     
        '*** Message de fin ***
        MsgBox "Opération terminée avec succès", vbOKOnly
     
    End Sub
     
    Sub creerCourbeDynamique()
     
     ' On Error GoTo errorHandler
     
      '@Developpez.net :
      'j'ai mis la déclinaison de l'enregistreur, le code de l'enregistreur puis mon code original ensuite.
     
        '---------------------------------------------------------------------------------------------
        '--- déclinaison de l'enregistreur à ma sauce ---
        '--------------------------
     
        'partie création du TCD
        Worksheets(feuilleGCD).Activate
        Range("A1").Select
     
        'ne fonctionne pas même en enlevant la partie Version:=xlPivotTableVersion14 et DefaultVersion:=xlPivotTableVersion14
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        Sheets("DATA").Range("A1").CurrentRegion, Version:=xlPivotTableVersion14).CreatePivotTable _
                tabledestination:=Worksheets(feuilleGCD).Range("A1"), tablename:="monTableauDynamique" _
               , DefaultVersion:=xlPivotTableVersion14     
     
        '-------------------------------------------------------
        '--- fin de déclinaison de l'enregistreur à ma sauce ---
        '---------------------------------------------------------------------------------------------
     
     
        '------------------------------------------------------------------------------------------
        '--- enregistreur de macro ---
        '-----------------------------
     
        'partie création du TCD
        Sheets("GCD ""S""").Select
        Range("A1").Select
     
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
            "DATA!R1C1:R102875C22", Version:=xlPivotTableVersion14).CreatePivotTable _
            tabledestination:="GCD ""S""!R1C1", tablename:="Tableau croisé dynamique1" _
            , DefaultVersion:=xlPivotTableVersion14
     
        Sheets("GCD ""S""").Select
        Cells(1, 1).Select
     
        'partie création du GCD
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlColumnClustered
        ActiveChart.SetSourceData Source:=Range("'GCD ""S""'!$A$1:$C$18")
     
        'partie mise en forme du GCD/TCD
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("LIB")
            .Orientation = xlPageField
            .Position = 1
        End With
     
        With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
            "PER_Simplifiee")
            .Orientation = xlRowField
            .Position = 1
        End With
     
        ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
            PivotTables("Tableau croisé dynamique1").PivotFields("QATP"), "Somme de QATP", _
            xlSum
        '--------------------------------
        '--- fin enregistreur de macro ---
        '---------------------------------------------------------------------------------------------   
     
     
        '--------------------------------
        '--- Code original ci-dessous :
     
        '***********************
        '*** Création du TCD ***
        '***********************
     
        Worksheets(feuilleGCD).Activate
        cptWP = UBound(tabWP)
        valTampon1 = 4
     
        'Optimisation des calculs
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
     
        'Sélectionner plageSource
        With Sheets("DATA")
            Set plageSource = .Range("A1").CurrentRegion
        End With
     
     
        'Où sera positionné le TCD
        Sheets(feuilleGCD).Activate
        Set plageDestination = Range(Cells(valTampon1, 2), Cells(valTampon1, 2))
     
        'Creation PivotCache depuis plageSource
        Set monPivotCache = ActiveWorkbook.PivotCaches.Create( _
            SourceType:=xlDatabase, _
            SourceData:=plageSource.Address)
     
        'Creation TCD depuis PivotCache
        Set monTCD = monPivotCache.CreatePivotTable(tabledestination:=plageDestination.Cells(1, 1), tablename:="monNom")
     
        'Définition des champs du TCD
        monTCD.AddDataField monTCD.PivotFields("REF"), "REF 'S'", xlCount
        With monTCD.PivotFields("REF 'S'")
            .Function = xlSum
            .Calculation = xlRunningTotal
            .BaseField = "PER_Simplifiee"
        End With
     
        monTCD.AddDataField monTCD.PivotFields("QATP"), "QATP 'S'", xlCount
        With monTCD.PivotFields("QATP 'S'")
            .Function = xlSum
            .Calculation = xlRunningTotal
            .BaseField = "PER_Simplifiee"
        End With
     
    End Sub

  4. #4
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    C'est a quelle ligne que ça coince exactement ?

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant en Gestion de Projets
    Inscrit en
    Juin 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant en Gestion de Projets

    Informations forums :
    Inscription : Juin 2016
    Messages : 8
    Par défaut
    Re,

    Sur la partie "déclinaison de l'enregistreur à ma sauce ", ça coince à la ligne 68.

    Si on en fait abstraction (càd je mets toute la partie "enregistreur de macro", puis "déclinaison de l'enregistreur de macro" en commentaire) et qu’on poursuit sur ma partie « originale », ça coince à la ligne 150.

    Idéalement j'aimerais savoir pourquoi ça plante dans mon code original bien sûr

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Pour la ligne 68 remplace avec ça pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        Sheets("DATA").Range("A1").CurrentRegion, Version:=xlPivotTableVersion14).CreatePivotTable _
                tabledestination:=Worksheets("feuilleGCD").Range("A1"), tablename:="monTableauDynamique" _
               , DefaultVersion:=xlPivotTableVersion14

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

Discussions similaires

  1. [XL-2010] Range limitée a la dernière valeur - Concaténation
    Par Ataraxie dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 23/08/2016, 17h31
  2. [XL-2010] TCD limites de la fonction "grouper les champs"
    Par Ginette54 dans le forum Excel
    Réponses: 3
    Dernier message: 02/10/2013, 12h38
  3. [XL-2007] Limite des TCD ?
    Par SupremPhoenix dans le forum Excel
    Réponses: 2
    Dernier message: 04/04/2013, 16h27
  4. TCD - SourceData dans un Range ?
    Par sl.info dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/08/2007, 14h05
  5. [VBA-E] Encore un problème avec les limites de RANGE
    Par durdesfois dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2007, 19h56

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