|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Thomas M Inscription : février 2011 Messages : 38 ![]() |
Bonjour
Dans ma base access 2003, j'utilise un formulaire pour générer un fichier Excel assez lourd (contenant beaucoup de données, de formules, de mise en forme, de feuilles etc. En gros, un fichier de 1 Mo) grâce à du VBA. Sans optimisation, il fallait 33 secondes à mon dual core pour générer le fichier. En utilisant exc.Calculation = xlCalculationManual et exc.ScreenUpdating = False je passe à 8 sec pour la génération, ce qui n'est vraiment pas négligeable. Le problème est qu'exactement une fois sur deux, la ligne exc.Calculation = xlCalculationManual me génère une Erreur d'exécution '1004': La méthode 'Calculation' de l'objet '_Application' a échoué. (exc.Calculation = <Incompatibilité de type>) J'ai effectué pas mal de recherches, et j'ai essayé les méthodes suivantes:
Ici les principales lignes de mon code (début / fin ): Code :
Comment: éviter d'avoir des processus Excel qui s'accumulent, et comment éviter cette erreur une fois sur deux? Merci beaucoup d'avance |
||
|
|
00
|
|
|
#2 |
![]() ![]() René MAROTInscription : octobre 2005 Messages : 5 462 ![]() |
T'es-tu assuré que ton Excel était visible avant d'envoyer le .quit ? Si tu ne fais pas cela, le Excel peut rester caché en mémoire.
Note qu'il peut être très dificile de fermer Excel à partir de Access. Il y a pluseiurs postes sur ce site qui traite du problème. Parfois la seule, et bien triste, solution c'est de 'tuer' le process Excel qui est en mémoire. Ton problème, c'est systématiquement une fois sur deux ou en moyenne une fois sur deux ? Une solution serait peut-être de faire les traitements Excel à partir de Excel. C-à-d de créer une macro Excel et de l'exécuter avec une commande shell "Excel". Ça peut être un peu accrobatique mais cela évite d'avoir un pointeur vers Excel dans ton Access. A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs. |
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé Sénior
![]() Pierre GONZALEZDéveloppeur Office VBA Inscription : août 2005 Messages : 3 412 ![]() |
Bonsoir.
Pour les processus qui s'accumulent, je crois que tu ouvres 2 fois Excel : icipuisque tu as utilisé le mot New, et là Code :
Set exc = CreateObject("Excel.Application") Code :
Code :
oWbk.Worksheets("NomFeuille").Range("A1") ... Cordialement, PGZ
__________________
pluritas non est ponenda sine necessitate - Le rasoir d'Okham Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon |
||
|
|
10
|
|
|
#4 | |
![]() ![]() Maintenance données produits Inscription : décembre 2005 Messages : 3 939 ![]() |
Bonsoir,
Je suis d'accord avec PGZ Citation:
Conseil allant dans le même sens ici. Une syntaxe explicite signifie que l'on part d'une variable objet, pour arriver au membre (méthode ou propriété) souhaité. Par exemple cette ligne n'est pas bonne parce qu'elle commence directement par une méthode, sans préciser à quel variable objet elle se rapporte. A+ |
|
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Thomas M Inscription : février 2011 Messages : 38 ![]() |
Bonjour,
Tout d'abord, merci pour vos réponses. C'est bien exactement une fois sur deux que l'erreur apparait. Quand je génère un première fichier Excel, tout marche bien, mais un EXCEL reste dans les processus. Je génère un second fichier, et là dès le début, erreur. Un second processus Excel est généré. Je termine la sub et je reclique sur mon bouton pour regénérer ce deuxième fichier. Là pas d'erreur. Un troisieme processus est créé... et ainsi de suite. Sinon non, excel n'est pas visible ... Et j'ai besoin d'effectuer toutes mes manipulations dans access et non dans une macro car je formate et j'injecte des valeurs en fonction de résultats de recordsets. Quant au Set exc = CreateObject("Excel.Application"), l'erreur est présente avec ou sans. Je suis actuellement en train de revoir tout mon code pour régler ce problème de référence dont j'étais conscient mais qui me facilitait le codage. Là je remplace tout avec des With WBl.Worksheets(i) .. Je vous tiens au courant, Merci encore |
|
|
00
|
|
|
#6 | ||
|
Futur Membre du Club
![]() Thomas M Inscription : février 2011 Messages : 38 ![]() |
Super, ça marche à chaque coup sans grincher, et les processus Excel disparaissent à la fin de la sub. Et je passe même de 8s à 7s pour générer mon fichier.
Merci à vous deux de m'avoir mis sur la piste. Voilà comment j'ai structuré mon code pour corriger ce problème: Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com