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

SERIEUXETCOOL

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

Pour Misange,

mais tu n'as toujours pas besoin d'un TCD pour faire un graphique

Ben euh jusqu’à maintenant je ne sais pas faire de graphique 3D (je précise bien 3D) sans passer par un TCD. J'ai 3 colonnes de données (Qui correspondent à mon tableau dynamique) et il faut les mettre sous forme de matrice sinon Excel ne construit pas le graph. Donc la solution la plus simple selon moi est de passer par les TCD.

Sinon on va s'embêter à mettre les données des 3 colonnes sous forme de matrice avec des transposés, puis ensuite appliquer des filtres tout ça pourquoi ? Pour refaire ce que le TCD sait bien faire.

Je me trompe peut être, mais alors comment construit-on un graph de surface en ayant 3 colonnes de données en entrée ? La je suis preneur :)



André


Ps : j'ai un fichier qui ne fonctionne pas. J'ai essayé d'utiliser un array combiné avec mon tableau mais je ne parviens toujours pas à tracer le moindre graph 3D. Je désespère un peu quand même. Je pense que je vais être obligé de transférer le contenu de tout mon tableau dans la feuille et puis voila. Ça va me prendre 3 plombes pour rien mais je ne vois pas d'autre solution à ma portée.
 

Misange

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

Alors là... les bras m'en tombent un peu. Tout ça pour ça ?

et in fine tu vas peut être nous dire que le graphique 3D que tu veux c'est un graphique en nuage de points pour x et y et que ce qu'excel propose nécessite que les valeurs des X et des Y soient régulièrement espacées avec juste z qui varie de façon continue ?
 

SERIEUXETCOOL

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

Misange tu te trompe un peu. Je ne vois pas ou je m'exprime mal. C'est tellement évident pour moi je pense que je ne sais pas le dire simplement.

Reprenons les bases.... J'ai 3 colonnes de données qui se trouvent dans un tableau dynamique (X,Y,Z). Chaque couple (X,Y,Z) de ce tableau représente un point qui à une seule et unique place dans l'espace formé par 3 axes orthonormées. Si je place tous les couples (X,Y,Z) sur un graphique j'obtiens une image en 3 dimensions.

Je ne vois pas ou est le problème pour le moment. Moi j'ai la base de données...J'ai pas la représentation graphique. Rien de plus :confused:

Pour un graph en 2D c'est simple, il suffit de sélectionner 2 colonnes. Mais pour un graph 3D ça ne fonctionne plus. Il faut une matrice en entrée et non pas 3 colonnes.


C'est pourtant simple il me semble ? A moins que je sois encore une fois complètement à coté de la plaque (ce qui est possible). Misange n'hésite pas à me demander plus d'infos si besoin est. J’essaierai d'y répondre autant que possible.

C'est donc bien évidement un simple nuage de point que je demande. Mais un nuage de point à 3 dimensions tout de même (X,Y,Z).

Dranreb, je vais relire et retester ta réponse au post 45 mais je suis perdu pour le moment. Je ne comprends pas comment arriver à tracer un graph avec les infos du post 45. Je m'y remet...

Merci à vous de votre patience déjà. Et merci pour les solutions déjà proposées actuellement.


André
 

SERIEUXETCOOL

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

Merci Misange pour le lien. Je suis déjà passé par la. Ça n'a pourtant pas comblé mes attentes à l'époque :(

Le graph de surface est celui qui m'intéresse. Je pense que la conclusion est probablement que ma demande n'est pas réalisable sous Excel.

Il faut sans doute faire appel à une base de données externe. Mais ça ne m’intéresse pas. Il n'existe peut être pas de solution au final.


A voir.


André
 

Misange

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

C'est donc bien évidement un simple nuage de point que je demande. Mais un nuage de point à 3 dimensions tout de même (X,Y,Z).

ce que ne fait PAS un graph de surface qui ne place pas les points dans l'espace en fonction des 3 coordonnées, pas plus qu'un graphique en courbe ne place les x de façon proportionnelle à leur valeur sur l'axe des X, d'où ma mise ne garde. MAis là je m'arrête vraiment sur ce fil, j'ai pressé le citron, y a plus de jus ....
 

SERIEUXETCOOL

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

Pas de soucis Misange.

Merci d'avoir participé en tout cas. C'est sympa de ta part.

Je suis sur une petite piste. Si elle fonctionne (ce que j'espère), et bien je viendrai la commenter ici. Sinon ben je laisse tomber moi de même.

Je transfère tout sur la feuille et puis basta.

A plus.


André
 

Misange

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

Confirmation de Hans Vogelaar. Tu ne peux pas utiliser un range pour alimenter directement un pivottable. Il faut éventuellement créer un recordset indépendant mais ça ne sera probablement pas plus rapide que de transférer l'array directement dans la feuille, ce qui n'est quand même pas si long, le transfert d'un array dans une feuille se faisant en une seule opération.
 

Discussions similaires

Statistiques des forums

Discussions
312 344
Messages
2 087 444
Membres
103 546
dernier inscrit
mohamed tano