Peut-on sauvegarder une table dynamique comme jeu de données ?
Bonjour,
Je souhaite savoir s'il est possible d'enregistrer le contenu d'une table dynamique comme un fichier, à titre de jeu de données à utiliser pour plus tard, ou en tant qu'archive consultable.
On imagine par exemple qu'on utilise Excel comme interface de simulation graphique, où une plage de cellules est utilisée comme écran pour afficher les résultats d'un calcul. Chaque itération de calcul modifie le résultat affiché à l'écran. Pendant l'exécution du code de calcul, une table dynamique est utilisée pour reporter l'état de la plage de cellules, itération après itération. A la fin des itérations, le code permet d'afficher n'importe laquelle des itérations souhaitées, grâce à cette table dynamique.
Peut-on archiver cette table, d'une manière ou d'une autre, afin d'y recourir au besoin lors d'une autre cession Excel ? Sous-entendu : sans avoir à refaire le calcul itératif pour bénéficier du contenu de cette table dynamique à ce moment-là. C'est un peu l'idée des .dat etc.
Merci beaucoup d'avance, car je trouve lourdingue de créer pour ce faire des fichiers Excel (ou des onglets) en cascade dans lesquels sont recrachées les données, itération par itération.
Bien cordialement,
Linds.
Bonjour,
Si j'ai bien compris, vous pouvez créer une table avec une colonne indiquant l'indicatif (numero, heure...) d'une itération, et ensuite par exemple via PowerQuery ou un filtre vous pouvez effectuer un tri sur cette colonne de la table pour retrouver les valeurs d'une itération.
Après dans tous les cas vous aurez besoin de sauvegarder vos valeurs quelque part, que ce soit dans une grande table, plusieurs onglets, ou un csv. A voir ce qui vous convient le mieux.
Bonjour Saboh,
Merci pour votre réponse rapide.
Je ne connais pas encore PowerQuery, mais cela ne semble pas répondre à ma question dont je ne sais pas si elle peut avoir une réponse positive.
Au lieu de sauvegarder les valeurs dans une feuille du fichier ou dans un fichier dédié, je voulais savoir s'il était possible de générer un fichier à part et qui serait les données correspondant à la variable tableau générée pendant le code, pour le recharger au besoin dans l'interface.
Pour être plus précis : une table dynamique est créée par Dim TabDyn() (sans figer la nature de la variable, comme évoqué dans ce site pour les tableaux en VBA), et chaque élément de cette table correspond à une itération et dont le contenu est une valeur de plage de type Worksheets(n).range(cells(1,1),cells(i,j)).value2. Je cherche à savoir si on peut sauvegarder TabDyn() en fichier "paramètre" à part et pouvoir ensuite le charger comme fichier de données. Cela évite des pages et des pages de restitution graphique des plages concernées.
Si ce n'est pas possible, je pourrai effectivement coder une feuille ou ou fichier d'archivage.
Merci à vous.
Bien cordialement.
Rebonjour,
Désolé j'ai vraiment du mal à vous suivre...
De toute manière, si vous souhaitez retrouver des valeurs, qu'elles soient paramètres d'entrée ou résultats, vous DEVEZ les sauvegarder quelque part. C'est le fonctionnement de tout programme.
Ensuite si vous souhaitez sauvegarder divers types de variables "sans figer la nature de la variable" vous avez le type Variant si vous utilisez du VBA.
Vous semblez avoir peur de la lecture/écriture de vos données... Selon moi si vous créez un pattern d'affichage dynamique, la lecture se fera automatiquement.
De plus, pour revenir sur powerQuery c'est un outil exactement adapté à ce genre de scénario, permettant de manipuler de grands ensembles de données très rapidement.
Si je suis encore à coté de la plaque je vous prie de joindre un exemple, car nous parlons dans le vent avec une description du problème trop vague à mon avis.
Bonjour Saboh,
Merci encore pour votre réponse.
Si vous avez du mal à me suivre, c'est que, ou je ne suis pas suffisamment clair dans ma demande, ou je suis en peine de savoir si effectivement PowerQuery répond à mon besoin car je ne connais pas du tout cette approche. Il me semble difficile de mieux décrire sans partager le fichier et pointer dedans où l'on souhaite faire une exploitation particulière à l'origine de la question ; mais je ré-essaye en décrivant ici le principe du code.
Public P_TabIter()
for i=1 to n
Module1.Iteration 'exécute le calcul itératif nommé Iteration écrit dans le Module 1
P_TabIter(i) = Trame.Range("ZoneJeu") 'enregistrement de l'état de la plage nommée "ZoneJeu" de la feuille de code interne "Trame"
next i
Donc la variable tableau P_TabIter() stocke les "copies de l'écran de jeu défini" de chaque itération et je voulais savoir si je pouvais sauvegarder cette variable comme un fichier, dit "de données" (comme un .dat pour d'autres logiciel par exemple), pour la recharger ensuite dans l'interface que j'ai créée. Ceci donc au lieu de déstocker les éléments de la table dans une feuille pour ce faire, ce qui peut être rapidement lourd de manipulation quand il y a un grand nombre d'itérations, et ce d'autant plus que la manipulation de tables dynamiques est plus rapide et efficace que la manipulation des cellules.
Nota: je peux générer aussi des images .gif de chaque écran-itération pour monter un .gif animé en parallèle, qui est plus fluide à regarder que le déroulement écran des itérations dans Excel. Lorsque je souhaite effectivement générer ces images, c'est clair que le code est très ralenti, du fait de devoir passer par un objet ChartObject tampon pour pouvoir exporter une image d'un objet Range.
Bien cordialement.
Bonjour,
Je pense avoir compris votre demande. Oui bien sur c'est possible de faire cela. Il existe 2 options : ou full VBA dans laquelle vous lisez votre tableau ligne par ligne et l'écrivez dans un fichier txt/csv, il ne me semble pas avoir vu de .dat dans Excel. Ou bien en définissant un Export via powerQuery et en l'appellant via le code VBA.
Cependant vous ne pouvez pas stocker vos résultats dans une "variable" de code de facon durable. Lors de la fermeture du fichier ces valeurs sont effacées, meme les Const(antes).
Personnellement je vous recommanderai l'option PowerQuery, plus robuste selon moi, et certainement plus rapide et paramétrable. Regardez donc sur le net par exemple "créer un export csv via powerquery, vous verrez que ce n'est pas compliqué. Ensuite dans votre code il suffira d'ajouter une ligne du type
ThisWorkbook.Connections("Query – Name of Query").RefreshUn autre avantage est que si vous voulez faire de l'analyse de data poussées ou du moins massive, comme il semble etre le cas, c'est littéralement "l'outil pour ca". Enfin il y a des pointures sur ce forum sur cet outil qui sauront certainement vous guider dans cette approche.
Dans tous les cas n'hésitez pas a joindre un fichier, ca permet de résoudre au lieu d'écrire ;)