Erreur de sélection de Range

Fermé
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016 - 1 juin 2016 à 12:18
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016 - 8 juin 2016 à 12:05
Bonjour à tous,

Je rencontre un pb sur l'attribution d'un objet Range.
- j'ai une base de données dans une feuille "DATA"
- j'ai déclaré un objet plageSource de type Range (l'idée est de faire un TCD par la suite)
- 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.

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

Merci par avance pour votre aide,

Cordialement,

Aurélien

14 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2016 à 13:53
Bonjour Aurélien, bonjour le forum,

Peut être un problème de portabilité de la variable plageSource ?... Sans le code difficile de t'aider !
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 1/06/2016 à 15:15
Bonjour Thautheme,

c'est juste !

Voici le code en question :

Dans l'en-tête du module :

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

Et 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

il n'est pas bien folichon...

J'ai oublié de préciser : ceci fonctionne parfaitement lorsque la plage est faible (typiquement quelques milliers de ligne), mais dans mon cas précis il y a 102 000 lignes.
J'ai pensé que l'erreur venait de là au départ, mais je n'ai pas trouvé dans la documentation de MS Excel d'indication dans ce sens : un range peut prendre a priori la taille d'une feuille entière.

complément d'info : type erreur 13 - incompatibilité de type
et j'ai vérifié, la feuille de données est entièrement au format de cellule standard...

Voilà, je reste à l'affût s'il y a d'autres questions !
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2016 à 15:33
Re,

C'est à cause de la variable derCOL que tu as déclarée de type Integer (limité à 32 767). Il te faut la déclarer de type Long limité à 2 147 483 647...

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 1/06/2016 à 15:46
Rebonjour ThauTheme,

Merci pour l'indication ! j'ai foncé dessus mais au final ça n'a pas changé le résultat...même si je pense que ça contribuait.(j'ai même refermé et rouvert le fichier au cas où)

Sur la fenêtre "variables locales", j'ai le type qui s'affiche : Variant/Long alors que je l'ai déclaré Long et avec l'option Explicit.
De même, plageSource affiche comme type : Variant/Object/Range.
Je suis un peu perplexe...

Tu aurais une autre idée ?

à bientôt
0

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

Posez votre question
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016
Modifié par aureliendu31 le 1/06/2016 à 15:57
complément d'info : l'erreur intervient lorsque dans la suite du code j'écris :

Dim monPivotCache As PivotCache

'Creation PivotCache depuis plageSource
Set monPivotCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=plageSource)

c'est en remontant le fil de mes investigations que j'ai constaté que plageSource ne réagissait pas normalement, j'aurais du en parler plus tôt...
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2016 à 15:59
Re,

Oui, j'ai une super idée. Envoie ton fichier (voir www.cjoint.com) pour éviter de perdre un temps fou...

Sinon, si ta plage ne contient pas de ligne ou de colonne vide, le code peut être simplifié avec :

Dim plageSource As Range

With Sheets("DATA")
    '.Visible = True
    '.Activate
    Set plageSource = .Range("A1").CurrentRegion
End With


Pas nécessairement besoin de de rendre l'onglet visible ni de le sélectionner pour définir la plage...

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

j'ai simplifié au maximum mon fichier.

Il reste à cliquer sur le bouton "créer courbe S"

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

Je te remercie par avance pour ton aide !

Je note pour le tuyau de la feuille visible/invisible, au départ je ne l'avais pas activée mais dans le doute...ça me rassure ☺
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2016 à 16:32
Re,

Bon je galère car sur ma bécane 64 bits ton code ne fonctionne pas car demande des modifications...
Mais je pense savoir où se situe l'erreur.
Tu as le droit de déclarer plusieurs variable dans une seule ligne mais il te faut les typer individuellement sinon elles prennent le type Variant par défaut.
Tu ne peux pas écrire :

Dim i, iprim, premLig, derLig, derCol, cptWP As Long

pensant que toutes ces variable seront de type Long !... Seule cptWP l'est.
Il te faut écrire :

Dim i As Long, iprim As Long, premLig As Long, derLig As Long, derCol As Long, cptWP As Long

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 1/06/2016 à 16:43
re,

ça plante toujours, ça devient les aventuriers du code perdu tout ça ^^
ceci dit, les types affichés en variable locale sont cohérents, j'apprécie !
je suis aussi en 64 bits, c'est étonnant que ça ne fonctionne pas chez toi.

une autre idée ?
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2016 à 17:06
Re,

je me suis mal exprimé. C'est "Office 10 64 bits" qui pose problème. J'ai essayé de faire tourner le code pas à pas mais il manques des onglets...
0
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016
1 juin 2016 à 17:14
c'est étonnant, j'ai fait la manip pas à pas, et il me semble que rien ne manque...quel est l'onglet manquant ?
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
1 juin 2016 à 18:50
Re,

Oui tu as raison. J'ai voulu sauter les premières macros dont une définit la variable feuilleGCD. C'est pour cela que ça plantait.
Écoute, je suis archi nul en TCD mais après lecture de l'aide VBA j'ai réussi à passer deux lignes en les modifiant :

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

remplacé par :
    Set monPivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=plageSource.Address)


puis :
    Set monTCD = monPivotCache.CreatePivotTable(TableDestination:=plageDestination)

remplacer par :
    Set monTCD = monPivotCache.CreatePivotTable(TableDestination:=plageDestination.Cells(1, 1))


Mais la ligne en dessous plante aussitôt et l'aide VBA s'est subitement transformé en chinois, voire même coréen du centre (pour ne blesser personne)...

J'en déduis que le problème ne vient pas de la variable plageSource. Tu dois revoir le code de création du TCD...
0
aureliendu31
1 juin 2016 à 19:49
ok merci bien !

je ne suis plus au bureau là, mais demain matin sans faute j'essaierai : si tu arrives à passer deux lignes c'est déjà un pas de géant pour moi !

Bonne soirée et à très bientôt !
0
aureliendu31
2 juin 2016 à 09:38
Hello,


ça ne marche pas non plus, je suis bloqué.

Ce que je remarque en revanche, c'est qu'avec une plage de données plus courte (5000 lignes), quand bien même la plageSource présente ce problème dans ses propriétés, rien n'empêche la macro de s'exécuter jusqu'au bout. Du coup a priori la méthode pour la création du TCD devrait fonctionner.

Je me demande si ce n'est pas la taille du range qui est mis en défaut, et si oui comment contourner cet élément...
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
2 juin 2016 à 09:56
Bonjour,

Désolé mais je ne pourrai pas t'aider davantage car, comme dit plus haut, nul en TCD... Tu devrais peut-être créer un nouveau fil en demandant les limites d'un TCD...
0
aureliendu31
2 juin 2016 à 10:17
ok c'est pas grave.

En tout cas merci tout de même pour le temps que tu as passé à m'aider et les petites astuces données en passant !

A une prochaine fois,

Aurélien
0
aureliendu31 Messages postés 11 Date d'inscription mercredi 1 juin 2016 Statut Membre Dernière intervention 8 juin 2016
8 juin 2016 à 12:05
Hello,

pour information j'ai eu la solution sur un autre forum :
https://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