|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||||||
![]() ![]() |
Bonjour,
J'ai un document de plusieurs centaines de pages (+ de 1000) et environ 600 sections dont je dois extraire environ 250 sections à partir d'une phrase clé. Mon problème apparait lorsque je lance ma macro qui effectue cette opération (environ 15 minutes) où j'ai parfois le message suivant m'indiquant un manque de mémoire et que si je continue, l'opération ne pourra plus être annulée. Comment puis-je passer outre cela? Est-ce que cela vient de ma macro (Extraction des sections très compliquée à réaliser puisque recherche d'un texte cible puis copie de la section.) La partie Sélection du nom : Code :
Recherche phrase clé : Code :
Je ne peux malheureusement pour des raisons de confidentialité vous mettre à disposition ma macro. Je vais la renommer et exécuter le publipostage sans données personnelles. Attention le publipostage est lancé depuis un ERP donc j'interviens par macro derrière après la fusion en détectant l'évènement de fin de fusion. Cela se passe sans souci, le problème est réellement dans la copie de la section voulue dans un autre document qui fait à la fin environ 250 pages. Je travaille bien évidemment avec des range partout et j'ai déjà désactivé les options d'affichage suivantes. Code :
Je recherche à désactiver l'option d'historique pour ne pas garder de traces au risque de ne pouvoir annuler, ce n'est pas grave. De toute façon, le traitement ne sera pas annulé mais réexécuté sans la macro en cas de plantage (près de 5 minutes de fusion). Merci de votre aide. Si vous avez des questions, n'hésitez pas, j'essaierai d'expliciter mieux mon problème. personnellement, je pense que cela est dû à la longueur du document Word généré. Cependant, je ne peux faire autrement puisque je ne peux prévoir de sélectionner les parties dans un nouveau document (environ 250 enregistrements à fusionner). Le principal est que mon code marche mais il est malheureusement très long à s'exécuter ce qui ralentit cette fusion puis impression.
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 321 ![]() |
Salut,
Je ne pense pas que ce soit la recherche qui pose problème, mais le traitement que tu fais àprès la recherche qui génère cette lenteur. Lorsque l'on dépasse un certain nombre d'oprération dans un certain laps de temps, Word n'est plus en mesure d'enregistrer les différences avec le document initial, c'est la raison de ce message. Essaie d'enregistrer en cours de route le fichier pour le message.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#3 |
![]() ![]() |
Bonjour Olivier,
Merci de ta réponse, effectivement, le traitement après est très long mais mon but premier était d'optimiser ma macro. Toutefois, je ne vois pas trop comment je peux le réaliser désormais à part en retouchant peut-être la partie d'extraction. Mais en fait le plus long est la copie page par page une fois les emplacements récupérés dans un tableau (ce qui ne peut pas s'optimiser?) Effectivement, en insérant une sauvegarde au milieu, je n'ai plus le message d'erreur.
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 321 ![]() |
Salut,
Pour atteindre un endroit dans un document, la méthode de recherche est la plus performante que je connaisse. Si on la compare avec une boucle sur les paragraphes ou les mots d'un texte, c'est sans appel, .Find est imbattable. Comment fais tu la copie ? Par un Copy ou par transfert de la portion de document dans un objet Range que tu inséres dans le second document ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#5 | |
![]() ![]() |
Citation:
je ne pense pas gagner enormement à faire un couper suivi d'un coller. puis une boucle pour le delete en partant de la fin pour evitant d'avoir a repaginer. Je pourrais essayer lundi avec un couper. C'est bien le plus rapide?
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
|
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 321 ![]() |
Salut,
Un copier coller ou couper coller va ralentir le processus global. Ce qui serait intéressant et d'utiliser un objet range pour faire le transfert d'un document à l'autre.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#7 | |
![]() ![]() |
Bonjour,
Citation:
Je ne comprends pas ce que tu veux dire. Peux tu me mettre un petit exemple Merci.
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
|
|
|
00
|
|
|
#8 | ||
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 321 ![]() |
Salut,
Avec un code de ce genre : Code :
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
||
|
|
00
|
|
|
#9 |
![]() ![]() |
Bonjour Olivier,
Je teste demain, et te tiens au courant et déjà merci, j'avais pas eu l'idée.
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
|
|
00
|
|
|
#10 | ||||||
![]() ![]() |
Bonjour,
Merci Olivier ![]() Pour la sauvegarde régulière du fichier, cela marche parfaitement aussi. J'ai rajouté pour l'optimisation le fait de désactiver les options d'orthographe, grammaire et de pagination du document. (Objet document) Code :
Code :
à la fois les révisions (Trackrevisions) et la commande annuler (CTRL + Z) undoclear. Code :
PS : Je ne crois pas que dans la FAQ, il y ait une partie sur l'optimisation de code (Vitessse d'exécution et bonnes habitudes de codage). Ce serait bien d'en avoir une partie au moins pour les opérations les plus courantes.
__________________
Cordialement, Christophe Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche |
||||||
|
|
10
|
|
|
#11 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 321 ![]() |
Salut,
C'est effectivement une idée pour une entrée dans la FAQ.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
10
|
Copyright © 2000-2012 - www.developpez.com