Calculate de Excel à partir de VB.NET

Résolu
Wavir Messages postés 4 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 13 juin 2006 - 12 juin 2006 à 16:44
Wavir Messages postés 4 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 13 juin 2006 - 13 juin 2006 à 14:02
Bonjour.

J'ai une application VB.NET dont le but est de prendre des données de SQL Server et de les envoyer dans un fichier Excel.  Ce fichier Excel fait 15 mo et est en XlCalculation.xlCalculationAutomatic.  À l'ouverture du fichier, Excel effectue le calcul.  Si on ouvre directement le fichier avec Excel, ce calcul prend environ 30 secondes.  Mais si on ouvre le fichier Excel avec le code VB.NET, ce même calcul prend 6 minutes !

Y aurait-il un moyen de faire que Excel fasse ce calcul plus rapidement ou même qu'il ne le fasse pas du tout lors de l'ouverture ?

Le code utilisé pour ouvrir le fichier Excel à partir de VB.NET:

Dim

app
As Microsoft.Office.Interop.Excel.Application
app = CreateObject("Excel.Application")

' C'est à cette ligne que le calcul commence, pendant 6 minutes.

Dim exbook
As Microsoft.Office.Interop.Excel.Workbook = app.Workbooks.Open("C:\test.xls")

Merci de votre aide

4 réponses

cs_bipou Messages postés 61 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 14 septembre 2006
13 juin 2006 à 09:27
ok

lorsque tu ouvre le fichier directement par excel, tu peux lui indiquer qu'il doit être en cacul manuel. (menu outil, options, onglet calcul) puis tu l'enregistre. c'est un des paramètres qui est sauvegardé

en principe lorsque tu l'ouvrira via vb il devrait prendre en compte ce paramètre
3
cs_bipou Messages postés 61 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 14 septembre 2006
12 juin 2006 à 17:08
bonjour

essaie
app.Calculation = xlCalculationManual

qui annule le calcul automatique d'excel
0
Wavir Messages postés 4 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 13 juin 2006
12 juin 2006 à 17:26
Le app.Calculation = xlCalculationManual fonctionne bien, mais il faut que l'application soit déjà ouverte pour le faire.  Le problème, c'est que le calcul s'effectue lors de l'ouverture, à la ligne
Dim exbook As Microsoft.Office.Interop.Excel.Workbook = app.Workbooks.Open("C:\test.xls")

Et on
  ne peut pas
faire le app.Calculation = xlCalculationManual avant cette ligne, puisque app n'a pas encore de Workbook.

Y a-t-il un moyen de faire l'ouverture du fichier sans faire le calcul ?  Ou encore une manière de faire le calcul à une vitesse plus acceptable (comme le 30 secondes requis lorsque c'est Excel lui-même qui ouvre le fichier ) ?

Merci
0
Wavir Messages postés 4 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 13 juin 2006
13 juin 2006 à 14:02
Ok merci.  Je vais laisser le calcul en Manuel, au lieu de le remettre en Automatic après l'enregistrement.
0
Rejoignez-nous