Bonjour
J'ai une application assez lourde en Excel dont le but est d'extraire des informations de documents PDF, Word, Excel, PowerPoint ou encore des fichiers image, sachant que je convertis les images et les PDF en .rtf pour les analyser comme du Word.
Du fait que ces extractions se font à partir de règles descriptives telles que : Extraire toutes les lignes à partir de la n° 2 de la colonne QUANTITÉ du tableau dont le titre supérieur commence par Ventes de l'année ou encore Extraire toutes les plages de texte du document commençant par un texte en gras, en police ARIAL ou COLIBRI de taille 12 à 16 et finissant au premier changement visuel - l'utilisateur doit disposer nativement d'environ 150 à 200 critères de ce type, sans compter tous ceux qu'il peut écrire par lui-même dans un classeur externe -, le traitement de pré-analyse des documents est devenu lourd et donc malheureusement lent.
Étonnement lent je devrais dire car concernant les documents que je traite sous Word (.doc et . rtf issus de documents océrisés), je viens de constater que le même traitement réalisé nativement en VBA sous Word s'exécute entre 10 et 40 fois plus rapidement qu'en VBA sous Excel.
Je vais donc devoir "sous-traiter" une partie de mon code à Word en arrière-plan.
Jusqu'ici, j'avais prévu des "fenêtres d'avancement" (UserForms) qui permettent de rassurer l'utilisateur sur le bon fonctionnement du programme. Ces fenêtres font notamment état de l'action en cours (ouverture du document, analyse des tableaux, etc.) mais indiquent également le pourcentage d'avancement de l'action en cours ainsi qu'un pourcentage évalué global.
Je souhaite maintenir ces fenêtres en place.
Entre autres solutions, j'ai commencé à explorer les API SendMessage et PostMessage : je voudrais que Word adresse régulièrement à mes fenêtres d'avancement Excel des données qui permettent de les actualiser.
- Pour le moment, je n'ai réussi qu'à modifier le bandeau de mes fenêtres : en pratique le bandeau est masqué pour être remplacé par un affichage personnalisé et donc ça ne me gênerait pas de récupérer les informations d'avancement via le bandeau, mais à ma connaissance il n'y a pas d'évènement "Bandeau_change".
- Je sais comment identifier le handle de ma fenêtre d'avancement ou celui d'un éventuel TextBox qui recevrait le message, mais la syntaxe des SendMessage / PostMessage m'échappe
- Et d'ailleurs, quelle API choisir ? Si j'ai bien compris, SendMessage attend un code retour alors que PostMessage est totalement asynchrone, mais est-ce la seule différence (sachant que j'ai déjà un début de réponse : j'ai réussi à faire marcher SendMessage (mal, mais bon) mais pas PostMessage.
Vos lumières seraient les bienvenues
Merci d'avance
Gilbert
Partager