Erreur de sélection de Range

aureliendu31 Messages postés 11 Statut Membre -  
aureliendu31 Messages postés 11 Statut Membre -
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

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  2. aureliendu31 Messages postés 11 Statut Membre
     
    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
  3. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  4. aureliendu31 Messages postés 11 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. aureliendu31 Messages postés 11 Statut Membre
     
    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
  7. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  8. aureliendu31 Messages postés 11 Statut Membre
     
    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
  9. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
  10. aureliendu31 Messages postés 11 Statut Membre
     
    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
  11. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. aureliendu31 Messages postés 11 Statut Membre
       
      c'est étonnant, j'ai fait la manip pas à pas, et il me semble que rien ne manque...quel est l'onglet manquant ?
      0
    2. ThauTheme Messages postés 1564 Statut Membre 160
       
      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
  12. aureliendu31
     
    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
  13. aureliendu31
     
    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
  14. ThauTheme Messages postés 1564 Statut Membre 160
     
    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
    1. aureliendu31
       
      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