Limite d'un Range/TCD

Résolu/Fermé
aureliendu31 - Modifié par aureliendu31 le 2/06/2016 à 10:39
 aureliendu31 - 8 juin 2016 à 11:37
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 code en question :
1) Dans l'en-tête du module :

Dim premLig As Long, derLig As Long, derCol As Long
Dim plageSource As Range, plageDestination As Range, emplacementGraphe As Range

2) Dans le sub qui pose problème :

Sheets("DATA").Visible = True
Sheets("DATA").Activate
derLig = Cells(Rows.Count, 1).End(xlUp).Row
derCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set plageSource = Range(Cells(1, 1), Cells(derLig, derCol))
plageSource.Select

Ceci fonctionne parfaitement lorsque la plage est faible (quelques milliers de ligne), mais dans mon cas précis il y a 102 000 lignes et 22 colonnes.

Pour plus d'information, voici le fichier en question : il suffira de cliquer sur le bouton "création courbe en S" une fois le fichier ouvert.
http://www.cjoint.com/c/FFborwRyltp

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

Merci par avance pour votre aide,

6 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
2 juin 2016 à 15:08
Bonjour,

Oulala...
Beaucoup d'erreurs...

La première est dans ta déclaration des variables.
Ecrire :
Dim feuilleGCD, feuilleRepartitionMensuelle, mois, anneeActu, moisActu As String

est équivalant à :
Dim feuilleGCD As Variant, feuilleRepartitionMensuelle As Variant, mois As Variant, anneeActu As Variant, moisActu As String


En VBA il faut typer chacune des variables.

De ce fait, ton "range" plagesource n'est pas un Range, mais un Variant.
Ca n'est pas trop grave, mais fait déjà cette modification.
Dim feuilleGCD As String, feuilleRepartitionMensuelle As String
Dim mois As String, anneeActu As String, moisActu As String
Dim i As Long, iprim As Long, premLig As Long, derLig As Long
Dim derCol As Long, cptWP As Long
Dim valTampon1 As Variant, valTampon2 As Variant, valTampon3 As Variant
Dim plageSource As Range, plageDestination As Range
Dim emplacementGraphe As Range
Dim monPivotCache As PivotCache
Dim monTCD As PivotTable
Dim monPVT As PivotItem
Dim monChart As Chart
Dim tabWP_LT() As String, tabWP() As String 


Ensuite, nommer une feuille avec des guillemets n'est franchement pas une réussite.
Personnellement, je renommerai GD "S" en GD S.


Dans un TCD, le paramètre SourceData est de type Variant car il peut prendre plusieurs types de données selon ce que tu veux faire. Ici, en l'occurence, ta liste de données est une Liste ou base de données Microsoft Excel. Par conséquent, tu ne dois pas passer le Range comme paramètre, mais son adresse.
Remplace donc :
 Set monPivotCache = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=plageSource)

Par :
 Set monPivotCache = ActiveWorkbook.PivotCaches.Create( _
        SourceType:=xlDatabase, _
        SourceData:=plageSource.Address)


Avec ces trois points tu devrais avancer un peu dans ton débogage, mais tu risques fort de revenir avec une nouvelle erreur...

1
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016
2 juin 2016 à 15:16
Bonjour Pikaju,

Et merci de m'aider !

J'ai eu ces quelques remarques depuis que j'ai diffusé le fichier, j'ai eu le temps de le corriger en local pour voir si ça évolue.Pour l'instant je suis toujours bloqué,même si je reconnais que le typage des variables est plus "propre" ainsi.

Si tu as la possibilité de faire tourner le code sur ton PC avec les modifs dont tu me parles, ça bloque ensuite sur le plageDestination.
J'ai essayé d'écrire plageDestination.address pour voir mais ça plante tout de même...
As-tu une idée pour poursuivre la correction ?

Pour info, là où je suis perplexe c'est que ça fonctionne parfaitement sur une BDD de petite dimension, et ça plante lorsque celle-ci fait 102 000 lignes...

A bientôt,

Aurélien
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
2 juin 2016 à 15:19
Ce que je vois c'est que je viens de passer du temps pour t'apporter des corrections que quelqu'un d'autre t'avais déjà donné (ThauTheme en l'occurence).
Si tu veux que l'on t'aide, il faudrait déjà intégrer les modifs dans ton fichier et poser les bonnes questions!
0
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016
2 juin 2016 à 15:51
Re,

Je suis désolé que tu sois contrarié.
Il est vrai que TauTheme m'a apporté sa contribution, mais comme les modifications apportées n'ont pas eu d'impact sur la ligne qui bloque toujours, je n'ai pas pensé utile de remettre un nouveau fichier...
Je suis désolé que ça t'ait fait perdre du temps, je ne m'en suis pas rendu compte : à l'avenir je prendrai toujours garde à proposer le fichier le plus actualisé possible.

Peux-tu m'aider tout de même pour la suite ?
Voici le nouveau fichier en question : https://www.cjoint.com/c/FFcnYfBE5Fp

Ma question est toujours la même, je pense (j'espère !) que c'est la bonne : comment se fait-il que la macro fonctionne correctement pour une petite base de données mais pas pour une grande ?

A bientôt,

Aurélien
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
2 juin 2016 à 16:22
Bon.
Il n'y a pas vraiment de limite, donc pas de réponse à ta question.
Si tu veux passer une ligne de code supplémentaire, remplace :
'Creation TCD depuis PivotCache
    Set monTCD = monPivotCache.CreatePivotTable(TableDestination:=plageDestination.Cells(1, 1))

par
'Creation TCD depuis PivotCache
    Set monTCD = monPivotCache.CreatePivotTable(TableDestination:=plageDestination.Cells(1, 1), TableName:="monnom") 


Mais bon à cette allure là, on n'est pas sorti du sable.

Donc...
Enregistre grâce à l'enregistreur de macro, la procédure de création de ton TCD. Seul toi peux le faire car seul toi connais les champs à utiliser.
Avec le code de l'enregistreur, essaie de corriger ton code. Si tu n'y parviens pas reviens nous voir avec les deux codes (enregistreur et le tien).
0
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016
Modifié par aureliendu31 le 2/06/2016 à 17:46
Re,

j'ai tenté de faire comme tu me l'as proposé. J'ai toujours ce message "erreur 13 - incompatibilité de type" qui ressort.
(la modif proposée avec le tableName bloque toujours par contre)

Je te mets en lien le nouveau fichier, avec en évidence dans le code l'enregistrement de macro.

https://www.cjoint.com/c/FFcpRkA2Dtp

A bientôt et encore merci pour le temps que tu passes à m'aider ! Je garde la foi ☺
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
2 juin 2016 à 18:14
Pas besoin de foi.
Je n'ai pas accès à ton fichier ce soir, je regarde demain

--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
aureliendu31
6 juin 2016 à 10:27
Hello !

Je n'ai toujours pas réussi à débloquer le code, as-tu eu le temps de regarder ce qui peut poser problème ?

A bientôt,
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
6 juin 2016 à 10:54
Salut,

Je n'y parviens pas non plus...
Désolé
0
aureliendu31
8 juin 2016 à 11:37
Hello,

pour information j'ai eu la solution sur un autre forum :
http://www.developpez.net/forums/d1588939/logiciels/microsoft-office/excel/macros-vba-excel/limite-d-range-tcd/

ça servira pour un prochain utilisateur en détresse :)

Bonne journée à vous !
0