Créer un Range avec une variable tableau, c'est possible ?

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour le Forum,

Dans l'avancement de mon projet je bute sur un point important. Un coup de main, un conseil serait le bienvenu.

L'idée est la suivante :

Je créer un tableau dynamique, le redimensionne et le remplit. Jusque la tout va bien. J'obtiens donc une variable Tableau qui contient des éléments.

Ensuite je souhaite créer un Tableau Croisé Dynamique (TCD) à partir de ma variable Tableau précédente. Le problème se pose au niveau de la définition du "SourceData". Je ne sais pas comment sélectionner l'intégralité de ma variable Tableau sans passer par un Range classique.

La seule solution que j'ai trouvé, est de transférer tout le contenu de ma variable Tableau dans une feuille Excel, puis de mettre le "SourceData" comme un Range sur toute la plage.

Sauf que moi je ne veux justement pas transférer le contenu de ma variable Tableau dans une Feuille Excel ! Cette variable Tableau est dynamique et peut contenir environ 10 000 lignes sur 8 colonnes. Ça alourdit le fichier, et surtout ça augmente considérablement les temps de calculs si je transfère le contenu de la variable Tableau dans la feuille Excel. De plus je n'ai pas besoin d'avoir les 10 000 lignes de données, c'est complètement inutile.

Je place ci-après un bout de code qui illustrement de manière simple mon problème.

Code:
Option Explicit

Sub TEST()

Dim i As Long 'Déclaration des variables
Dim Tableau As Variant

ReDim Tableau(1 To 5, 1 To 3) As Variant 'On définit la taille et la dimension du tableau dynamique

'On remplit le tableau dynamique
For i = 1 To 5
    Tableau(i, 1) = 1
    Tableau(i, 2) = 2
    Tableau(i, 3) = 3
Next

Range(Cells(1, 1), Cells(UBound(Tableau, 1), UBound(Tableau, 2))) = Tableau 'On transfère les éléments du tableau dans la feuille de calcul

'=========================================================================================
'Crétion du Tableau Croisé Dynamique
'=========================================================================================
Sheets.Add 'On ajoute une feuille qui va contenir le TCD

'On ajoute le TCD
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets(ActiveSheet.Index + 1).Range("A1:C5"), _
Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:=Range("A1"), _
TableName:="Tableau croisé dynamique", DefaultVersion:=xlPivotTableVersion12

End Sub


Voila, j'espère avoir été clair... N'hésitez pas à demander plus d'infos si besoin est. Je reste dans les parages.


Bien cordialement,

André


Ps : Bonnes fêtes de pâques
 

Pièces jointes

  • TABLEAUX ET RANGE.xlsm
    19.2 KB · Affichages: 65

Paritec

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Bonjour Sérieux le forum
le but des tableaux et de travailler sur des tableaux pas sur les sheets
alors si tu commençais par nous mettre un fichier avec des données, et une explication de ce que tu veux faire on pourrait te faire et t'expliquer comment traiter ton sujet avec des tableaux
dans l'attente du fichier (pas vide)
a+
Papou:eek:
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Créer un Range avec une variable tableau, c'est possible ?

Dsl Paritec j'ai posté juste derrière toi^^

si tu commençais par nous mettre un fichier avec des données, et une explication de ce que tu veux

Euuuh, j'ai bien mis un fichier, il contient bien des données, et j'ai même définis mon problème ! Je ne comprends pas ta demande pour le coup ???

Peux tu préciser car je ne vois pas ce que tu veux exactement la.

Le but du jeu c'est de faire fonctionner le code que j'ai mis en exemple ci-dessus sans la ligne suivante :

Code:
Range(Cells(1, 1), Cells(UBound(Tableau, 1), UBound(Tableau, 2))) = Tableau 'On transfère les éléments du tableau dans la feuille de calcul

Rien de plus. Sauf que je n'y parviens pas pour le moment.


André
 

david84

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Bonjour, salut Pascal,
A mon avis, tu ne peux pas générer un TCD à partir d'un tableau VBA. Un TCD ne prend en compte que des plages de feuille de calcul. Tu dois donc copier ton tableau VBA dans une feuille de calcul pour ensuite pouvoir générer ton TCD.
A+
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Créer un Range avec une variable tableau, c'est possible ?

Salut David84,

C'est justement ce que je cherche à éviter...
Pourtant quand on créer un TCD via Excel, on a le choix de la sélection des données. Soit on entre une plage de données (Range) soit on peut lui entrer un tableau.

Es tu vraiment sur qu'il faille copier tout mon tableau dynamique dans une feuille pour ensuite pouvoir faire un range dessus pour créer le TCD ???

Tout ce que je veux c'est une réponse sure :p

J'avoue que ça m'étonne un peu mais bon c'est pas moi l'expert la dedans après tout. Ça m'embête un peu de devoir tout copier du coup^^

Merci David84.

André
 

pierrejean

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Bonjour à tous

Il est certainement possible de creer un tableau équivalent à un TCD à partir d'un tableau dynamique encore faudrait-il savoir ce que tu souhaites y inclure
NB: Je pratique trop peu le TCD pour imaginer toutes les possibilités (qui sont très nombreuses d'après ce que je crois savoir)
 

david84

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Re
c'est pas moi l'expert la dedans après tout
Ce n'est pas moi non plus.
Pour répondre à ta question, je ne suis sûr de rien mais cela me paraît logique : le but d'un TCD est de pouvoir ré agencer les champs d'une plage ou d'une table pour mettre en valeur certaines informations.
Pour que cela puisse se faire, il faut bien que cette plage ou table soit "physiquement" présente dans la feuille de calcul, sinon comment veux-tu sélectionner un champ donné pour le placer en ligne ou en colonne ou en filtre de rapport ?
Maintenant, attendons de voir si quelqu'un ne va pas te trouver la solution.
Mais si personne ne la trouve, il te faudra bien copier ton tableau dans la feuille, ou alors utiliser autre chose q'un TCD.
A+
 

MJ13

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Bonjour à tous

Bon, la encore, on a un fichier mais de la à générer un pseudo TCD, je ne comprend pas trop :confused:.

Peut-être qu'avec un vrai exemple, avec le TCD généré, on pourrait trouver une solution adaptée :).
 

Paritec

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Bonsoir Michel:eek: Pierrejean:eek:dit aussi le 11000ème,David:eek:dit l'extraterrestre,André,
si c'est que cela
Le but du jeu c'est de faire fonctionner le code que j'ai mis en exemple ci-dessus sans la ligne suivante
a+
Papou:eek:

Code:
Range(Cells(1, 1), resize(UBound(Tableau), UBound(Tableau, 2)) =  Tableau 'On transfère les éléments du tableau dans la feuille de calcul
 
Dernière édition:

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Créer un Range avec une variable tableau, c'est possible ?

Re-Bonjour,

PierreJean :

Il est certainement possible de creer un tableau équivalent à un TCD à partir d'un tableau dynamique

Oui on peut sans doute s'affranchir d'un TCD et essayer de faire la même chose avec un simple Tableau. Mais malheureusement j'utilise des fonction qui sont propres au TCD. Je me vois mal refaire la même chose alors que le TCD existe justement pour ça.

L'utilisation du TCD est donc conseillé dans mon cas.



David84 :

je ne suis sûr de rien mais cela me paraît logique : le but d'un TCD est de pouvoir ré agencer les champs d'une plage ou d'une table pour mettre en valeur certaines informations.
Pour que cela puisse se faire, il faut bien que cette plage ou table soit "physiquement" présente dans la feuille de calcul, sinon comment veux-tu sélectionner un champ donné pour le placer en ligne ou en colonne ou en filtre de rapport ?

Ben justement pour moi ce n'est pas la même logique que toi pour le coup. Je me dis que les données soient stockées dans la feuille ou dans une variable c'est la même chose. Si les données sont stockées dans une feuille alors elles sont liées au classeurs après sa réouverture. Tant dis que si elle sont stockées dans la mémoire (une variable tableau en gros) et bien les données sont toujours fonctionnelles mais la durée de vie est courte.

Finalement dire que les données sont situées dans la plage "A1:A10" c'est la même chose que de dire : les données sont situées dans le tableau(1)->Tableau(10). Sauf que dans un cas les données sont physiquement attachées à la feuille Excel, et dans l'autre cas elles sont virtuellement dans la mémoire. Mais je pense que c'est la même chose.
En tout cas c'est pas moins logique que lorsque l'on utilise des variables simples. On a jamais eu l'obligation de stoker le contenu d'une variable dans une feuille pour pouvoir travailler avec ???

Attention, je dis peut être des conneries la !!! Mais c'est comme ça que je vois les choses pour le moment.


MJ13 :

on a un fichier mais de la à générer un pseudo TCD, je ne comprend pas trop .

Peut-être qu'avec un vrai exemple, avec le TCD généré, on pourrait trouver une solution adaptée .

Je ne pense pas pouvoir mettre le code entier. Ça partirait dans tous les sens inutilement. Tout fonctionne très bien pour moi. C'est juste que je cherche à sélectionner les données qui sont stockées dans mon tableau plutôt que dans la feuille. Car avec 10 000 lignes, le plus long c'est justement de copier le contenu du tableau dans la feuille. Tout ça pourquoi ? Juste pour que mon TCD puisse y accéder avec un Range.
C'est nul je trouve. Je pense que l'on ne doit pas être obligé de faire un range mais de sélectionner les données avec la variable tableau. Comment ? Je ne le sais pas encore.


L'exemple est très représentatif de mon cas. Inutile de le complexifier je pense. C'est déjà bien assez dur juste avec ce petit exemple^^. Essayons de faire fonctionner ce code, et ce seras dans la poche.

Avec le code que j'ai mis au premier post, comment parvenir à sélectionner les données qui sont TOUTES déjà stockées dans la mémoire. Rien de plus.

Ce n'est peut être pas possible, mais j'aimerais savoir réellement ou est le problème par contre. Sinon je stocke tout sur une feuille. Mais bon c'est bricolage.

En tout cas, merci pour vos réactions. C'est sympa.

Bien cordialement,

André
 

MJ13

XLDnaute Barbatruc
Re : Créer un Range avec une variable tableau, c'est possible ?

Re

L'exemple est très représentatif de mon cas. Inutile de le complexifier je pense. C'est déjà bien assez dur juste avec ce petit exemple^^. Essayons de faire fonctionner ce code, et ce seras dans la poche.


Un TCD n'est pas un tableau si simple à gérer. Mais comme tu l'as présenté, en effet , cela en a tout l'air :confused:.

Sinon, va voir du côté de ODBC :).
 
Dernière édition:

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Créer un Range avec une variable tableau, c'est possible ?

RE,

Paritec :


Code:
Range(Cells(1, 1), resize(UBound(Tableau), UBound(Tableau, 2)) =  Tableau 'On transfère les éléments du tableau dans la feuille de calcul

Le but c'est de supprimer cette ligne, pas de la modifier :)


Bon c'est pas grave je vois que j'ai du mal à exprimer ma demande.

Je la reformule légèrement différente pour le coup. Comme ça plus d'erreur.

Allez c'est partis...


Je place ci après un code qui ne fonctionne pas. Je cherche justement à le rendre opérationnel. Le but de ce post, est donc de parvenir à une solution qui permette au code de fonctionner. Rien de plus !

Un code qui ne fonctionne pas, donc un code à réparer :eek:

Voici le code :

Code:
Option Explicit

Sub TEST()

Dim i As Long 'Déclaration des variables
Dim Tableau As Variant

ReDim Tableau(1 To 5, 1 To 3) As Variant 'On définit la taille et la dimension du tableau dynamique

'On remplit le tableau dynamique
For i = 1 To 5
    Tableau(i, 1) = 1
    Tableau(i, 2) = 2
    Tableau(i, 3) = 3
Next

'=========================================================================================
'Crétion du Tableau Croisé Dynamique
'=========================================================================================
Sheets.Add 'On ajoute une feuille qui va contenir le TCD

'On ajoute le TCD
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Tableau(1,1):Tableau(5,3)", _
Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:=Range("A1"), _
TableName:="Tableau croisé dynamique", DefaultVersion:=xlPivotTableVersion12

End Sub


Mon erreur se situe dans la définition du SourceData :

Code:
SourceData:="Tableau(1,1):Tableau(5,3)"

Quelle est la bonne syntaxe ?

J'espère avoir été plus clair de cette façon. Sinon pas de soucis, je recommence différemment^^


Merci de votre aide.

André
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 157
dernier inscrit
youma