|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juin 2007 Messages : 7 ![]() |
Bonjour,
J'avais besoin de récupérer une ligne de donnée précise dans des classeurs servant de base de données (issues de différentes applis internes) : 1 classeur par type de base et par année (contenu : code de la donnée + 1 colonne par mois plus le cumul annuel) . J'avais 4 paramètres à gérer : le code de la donnée, la succursale initiatrice, l'année voulue et le mois recherché. Ayant trouvé dans le tutoriel : "lire et écrire dans les classeurs fermés", la méthode pour y accéder de manière dynamique, j'ai créé ma macro complémentaire et l'ai utilisé dans des tableaux de bord assez conséquent (5000 appels de la fonction par tableau environ). Cela a bien fonctionné. Le problème vient du temps de réponse : 6 secondes par appel (les bases et les tableaux de bord sont sur le même serveur). En délocalisant (bases et tableau sur mon pc), je gagne un peu de temps mais cela reste encore trop long. Quelqu'un aurait une idée ? Voici mon code : Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Malheureusement je crois que VBA n'est pas très véloce alors si en plus tu utilises des Recordset
Je sais qu'il existe une bibliothèque pour C# qui gère bien les documents au format OXML (donc les .xlsx mais pas les points .xls). Selon un ami qui s'en est servi, ça booste sérieusement les performances! Par contre, faut savoir coder en C#...je peux te donner plus de précisions si ça t'intéresse. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2007 Messages : 7 ![]() |
Ben, pour le recordset, je n'ai pas trop le choix :
au début, j'ai voulu utiliser les fonctions RECHERCHEV et INDIRECT associées pour déterminer le nom du fichier contenant les données de manière dynamique mais INDIRECT ne fonctionne qu'avec des classeurs ouverts. Or, j'ai des tableaux de bord qui reprenne plusieurs années et deux bases différentes ; ça me faisait beaucoup de fichiers à ouvrir (encombrement mémoire) et je m'y refusais. Maintenant que les tableaux de bord sont réalisés (avec bien des difficultés de mise au point tant au niveau des formules que de la présentation), je n'ai pas trop envie de les recommencer et je préfère essayer d'améliorer ma fonction personnalisée. Là où je bosse, je ne peux télécharger quoi que ce soit alors ça m'étonnerait que je puisse programmer en c#. Mais je connais, j'ai appris avec Basic, cobol, C++ alors dit toujours, je suis preneuse ! Et merci de ta réponse |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Sinon en solution "tout Office" il doit être possible d'importer tes feuilles Excel dans Access (tu peux automatiser le processus avec des macros) et de récupérer les données dont tu as besoin via des requêtes, ce qui serait infiniment plus rapide que d'utiliser ADODB et des Recordsets.
La bibliothèque dont je parle est EPPlus: http://epplus.codeplex.com/releases/view/42439. Toujours d'après ce que l'on m'a dit, c'est mal documenté mais il y a pas mal d'exemples pour comprendre comment ça fonctionne. Pour gérer les fichiers .xls, il existe une autre bibliothèque C# qui a l'air performante, ExcelLibray: http://code.google.com/p/excellibrary/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com