|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Bonjour,
Je planche depuis un certain nombre de jours sur le problème suivant sans savoir par quel bout le prendre. Je voudrais pouvoir déterminer si un document Word contient une liste de mots sans avoir moi-même à rechercher chacun de ces mots manuellement à l'aide de la fonction Rechercher de Word. Dans mon esprit, je dois d'abord présenter cette liste de mots dans un tableau Word dans un premier document que j'appellerai par exemple Document1. Dans le fichier Document1.doc, j'ai donc un tableau de deux colonnes. La première colonne contient : Papa Maman Pierre Paul La deuxième colonne est vide pour l'instant. Si j'ouvre un fichier Document2.doc, je voudrais que la macro m'indique automatiquement si mon document contient "Papa", "Maman", "Pierre" et/ou "Paul". L'idéal serait que le programme fasse apparaître une croix à droite de chaque chaîne trouvée. J'ai une idée de la structure générale du programme mais je n'ai pas encore trouvé comment la formaliser : Tant que la fin du tableau de Document1 n'est pas atteinte : Dans Document1, sélectionner le contenu de la cellule de gauche de la première ligne, le copier, passer dans Document2 et rechercher ce contenu dans l'ensemble du document. Si ce contenu est trouvé dans Document, insérer "X" dans la colonne de droite. Sinon, passer à la ligne suivante et recommencer. J'imagine que je n'ai pas pris en compte tous les paramètres, mais si quelqu'un pouvait m'aider, ce serait formidable. Merci. |
|
|
00
|
|
|
#2 | ||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Déjà, tu dois créer ton tableau dans ton document. Le premier tableau, ou Table(), a le N° 1.
Dans la macro tu crées le tableau des mots ("TableauDesMots") à rechercher. Ensuite, tu crées une boucle, dans cette boucle, tu sélectionnes la table, puis tu lances la recherche pour chaque index du "TableauDesMots". Pour chaque mot trouvé, tu te déplaces dans la cellule suivante et tu insère 1. Le code simpliste pour faire ça : Code :
A+ |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Bonjour,
Merci beaucoup ! Je vais tester ça dès aujourd'hui. En fait (pardon si je n'ai pas été clair au départ), le document que je veux tester n'est pas un tableau mais un document Word quel qu'il soit. Si le document Word contient un paragraphe du type : "Papa est parti avec maman et tonton", je veux que la macro indique un signe à côté de "Papa", "Maman" et "Tonton" (même si la casse est différente), les mots à rechercher étant bel et bien dans un tableau. Je crois que je vois comment m'y prendre à partir de ta piste et je te remercie vivement. Bien cordialement, 3dfroggy |
|
|
00
|
|
|
#4 | ||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Si tu n'as qu'une fois chaque mot, tu n'as pas grand chose à modifier
Code :
A + |
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Rebonjour,
Merci encore de ton aide. Je viens de tester et ça marche, mais mon souci, c'est que je voudrais avoir ça dans deux documents différents. Je t'explique. J'ai un document MotsRecherches.doc qui contient un tableau de deux colonnes (pour l'instant, ce n'est pas un tableau au sens de la programmation ; c'est juste un tableau Word, dans lequel je veux pouvoir ajouter et supprimer des éléments ; par exemple supprimer "Papa" ou ajouter "Mamie", sans avoir à modifier le code si possible). Fichier MotsRecherches.doc : --------------- Papa | Maman | Tonton | Tata | Ensuite, j'ai un fichier DocumentATester. doc, qui est une lettre qui contient les phrases suivantes : DocumentATester.doc : Hier, j’ai vu papa. Il m'a emmené au cinéma et ça m'a beaucoup plus. Ca faisait longtemps que je n'étais pas allé au cinéma et papa m'a bien fait plaisir. Le cinéma, c’est vraiment chouette. Ensuite, je suis allé voir maman et ensemble, nous sommes partis chez tonton. A partir du fichier DocumentATester, j'aimerais que ma macro interagisse avec MotsRecherches.doc et affiche : --------------- Papa | X Maman | X Tonton | X Tata | Je n'ai pas besoin de savoir s'il y a une ou plusieurs occurrences de telle ou telle chaîne : juste de savoir si oui ou non le terme est là (dans mon exemple, il y a avant 2 occurrences de "papa", 1 occurrence de "maman" et 1 de "tonton". (Je précise quand même que je suis capable de remplacer le "1" par un "X" ! Déjà que que j'ai l'impression d'être complètement assisté...) Merci encore de ton aide précieuse. 3dfroggy |
|
|
00
|
|
|
#6 | ||||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
En fait, ce qui te manque c'est
1 - créer un tableau de mots pris dans un document 2 - passer dans un autre document pour aller y chercher chaque mot du tableau C'est bien ça ? Edit Comme je dois bientôt partir, je te mets déjà comment passer d'un doc à l'autre Code :
Code :
Bon après-midi |
||||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Re- bonjour,
Merci encore de ta disponibilité. Oui, c'est exactement ça. Au départ, mon fichier MotsRecherches.doc est fermé et mon fichier DocumentATester.doc est ouvert. A partir de mon fichier DocumentATester.doc, je veux que la macro fasse ceci : Ouvrir le fichier MotsRecherches.doc TANT QUE la fin de la liste de mots du fichier MotsRecherches.doc n'est pas atteinte Sélectionner le mot de la cellule de gauche Copier le mot dans le Presse-Papiers Basculer vers le fichier DocumentATester.doc Rechercher le mot Revenir dans le document MotsRecherches.doc Aller dans la cellule de droite Si le mot a été trouvé dans DocumentATester.doc, mettre une croix (X) dans cette cellule Sinon, ne rien mettre du tout (ou mettre un N, ça m'est égal). Passer à laligne du dessous et recommencer. FIN DU TANT QUE Si tu veux te représenter les choses, tu images que tu es instituteur. Tu as demandé aux écoliers de faire une rédaction mais tu leur as interdit formellement d'utiliser les mots "Papa, Mama, Tonton, Tata". Tu veux donc un moyen rapide de déterminer, avant même d'avoir commencé à corriger une copie, si la rédaction contient l'un de ces mots (si elle contient l'un de ces mots, tu refuses de corriger la copie de l'élève, qui doit s'arranger pour faire disparaître ces mots pour que tu acceptes de corriger). Je pense que ce que tu viens de m'expliquer va bien m'aider. Bonne continuation. Lionel |
|
|
00
|
|
|
#8 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Me rev'là.
Il serait mieux de créer d'abord ton tableau() des mots à rechercher en lisant la colonne 1 du Tableau Word (mon code - non testé, je n'avais pas le tps...) Ça éviterait d'avoir à passer d'un doc dans l'autre pour chaque mot. Pour éviter les mouvements de pages, en début de macro, place l'instruction et, avant End SubA+ |
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Bonjour,
Merci de ces précisions ! Je viens de mettre à jour mon code, qui se présente sous la forme suivante : Code :
Par contre, le débogueur de VBA bloque sur la ligne ReDim Preserve TableauDesMots(DerLigne) pour laquelle il indique "TableauDesMots(derLigne)=incompatibilité de type". J'espère avoir mis la section 'Créer un tableau au bon endroit dans le code. Je suis en train de mettre une capture d'écran sur http://co2mat.free.fr/chercherTrouver (j'espère que c'est autorisé). Merci encore de ton aide. Bien cordialement, Lionel |
||
|
|
00
|
|
|
#10 | ||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Oui, bien sûr mais l'erreur m'est imputable. Dans mes explications je n'ai pas repris depuis le début
Si tu mets Code :
tableau = Array("papa", "maman", "tonton", "tata") Mais si le tableau doit être redimensionné, la déclaration doit être Code :
Dim TableauDesMots() as string 'dans cet exemple Code :
Tu nous dis A+ NB - Je n'ai pas vérifié le reste du code |
||
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Bonjour,
Merci une nouvelle fois de ton aide et pour l'explication concernant la suppression de "Tableau" (en fait, je ne comprenais plus pourquoi il y avait plusieurs tableaux). Par contre, j'ai toujours mon erreur de compatibilité de type sur : Code :
Merci encore de ta patience et bonne journée. Lionel |
||
|
|
00
|
|
|
#12 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Là, je ne vois pas d'où je suis... tu pourrais nous joindre le zip de ton fichier "anonymé" ?
|
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Re-bonjour,
En fait, j'ai mis un exemple anonyme de mon fichier là : http://co2mat.free.fr/chercherTrouve...ichiertest.doc Je vais juste refaire une capture d'écran avec le code que tu m'as mis ce matin (le code de la capture était celui d'hier). Une fois encore, mille mercis ! Lionel |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Je viens de mettre la nouvelle capture en ligne là :
http://co2mat.free.fr/chercherTrouve...reur211107.jpg Merci encore. Lionel |
|
|
00
|
|
|
#15 | ||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Ok, j'ai vu. Ton problème vient de ce que ton tableau est dans le même document que le texte. Ce que je t'ai passé ne peut pas fonctionner.
Si j'ai une idée, et le tps d'ici moins quart, je regarde L'idéal serait que tu sépares ton tableau du texte (Documents ou sections différentes) A+ Voilà, vite fait... Je t'ai mis le code pour insérer un saut de section entre ton tableau de mots et le texte. A n'utiliser qu'une fois (...). Mais tu peux le faire manuellement. Le code Code :
A+ |
||
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Merci de ta réponse.
Ca ne me dérange pas du tout de séparer le tableau du reste du texte par une section, par exemple. En fait, comme je te l'avais dit, au départ, je pensais faire ça avec deux documents distincts, mais le hic, c'est que je ne vois pas comment passer de l'un à l'autre en boucle. A partir du code que tu m'avais donné, je m'étais dit que je conserverais le TableauDesMots dans un document séparé et que je demanderais à la macro de : ouvrir le fichier contenant TableauDesMots Sélectionner TableauDesMots, le copier et le coller au tout début de FichierATester. Une fois les mots recherchés et le tableau rempli grâce à ton code, opération inverse : je sélectionner TableauDesMots, je le coupe et je le recolle dans un autre document. Ca, je sais faire avec l'enregistreur de macros. Habituellement, je me débrouille en tâtonnant grâce à l'enregistreur de macros. Je procède "par l'exemple", je récupère le code et je l'adapte, mais là, je suis largué et je pense que j'ai mal analysé mon problème au départ. Il n'y a aucune urgence concernant la réponse, si tu es encore motivé pour m'aider. Cet outil me sera très utile quand il sera opérationnel mais je n'ai AUCUN IMPERATIF de délai, donc gère tes priorités à TOI. C'est déjà bien appréciable d'avoir un interlocuteur si serviable. MERCI encore et bon après-midi. Lionel FichierA |
|
|
00
|
|
|
#17 |
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
Je te l'ai finalement mis, le code, t'as pas vu ? Et en plus je me suis mis en retard
![]() Ce n'est pas grave, avec la pluie "tout le monde" était en retard... Mais regarde ce que je t'ai mis, ça devrait aller. A+ Edit Tu as bien dit que, s'il y avait plusieurs fois le même mot, ça n'avait pas d'importance ? Parce que sinon, il faudrait faire une boucle de recherche... Et là le code existe dans Contribuez, soit en comptant le nombre de fois et en mémorisant le N° de page (par SilkyRoad) soit plus simplement pour insérer un signet... et on n'est pas loin de l'insersion d'une balise. |
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Bonsoir,
Ben non, je n'avais pas vu que nous étions déjà passés à la page 2 !!!! :-( Désolé de t'avoir mis en retard. La prochaine fois, prends ton temps ! Concernant le code, maintenant, je n'ai plus d'erreur mais une fois le saut de section créé (à l'aide de ton code), quand j'exécute la macro, le texte situé juste après le saut de section est sélectionné et il ne se passe rien d'autre (je ne vois pas de 1 dans la colonne de droite du tableau). J'ai essayé de désactiver la ligne Application.ScreenUpdating = False au cas où, mais ça ne change rien. J'ai mis une capture d'écran là : http://co2mat.free.fr/chercherTrouve...eur211107b.jpg Merci de ta patience ! Bonne soirée. Lionel |
|
|
00
|
|
|
#19 | |||||
|
Inactif
Inscription : février 2005 Messages : 12 466 ![]() |
La croix doit être dans le tableau ?
Dans ce cas, une fois la donnée trouvée, il faut retourner sur le tableau pour baliser la donnée. Tu as deux possibilités mais il y en a une qui me paraît plus sympa. Quand la procédure lit le tableau de mots, on lui affecte un signet dont le nom est le mot. Quand la procédure examine ton texte et trouve un mot, elle retourne sur le signet correspondant, place une croix dans la cellule mitoyenne et retourne chercher le mot suivant. Pour ça, le mieux est d'utiliser deux procédures. Une fois le tableau des mots renseigné, la recherche est lancée dans une procédure paramétrée. On pourrait faire ça avec un Gosub mais c'est mieux de séparer les deux. Je regarde et je te rappelle Voilà. Code :
Là, tout de suite, je retourne à Stanley Kubrick sur Arte Bonne soirée A+ Sans signet, c'est possible... Est-ce mieux ? Oui, c'est probablement plus rapide si tu as beaucoup de mots dans ton tableau. A toi le choix. Code :
Citation:
![]() A+ PS - J'ai oublié de te dire que tu seras limité à 9999 mots dans ton tableau. Tu vas pouvoir faire le tour de la famille
|
|||||
|
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : novembre 2007 Messages : 27 ![]() |
Bonjour,
Mort de rire Ben oui, mais je ne plagie pas Bénureau, moââââââ :o))))) (C'est bien tiré d'une chanson de Bénureau, non ?)Blague à part : 1) Oui, j'avais besoin que la croix apparaisse dans la colonne de droite. 2) Je viens de tester (avec la deuxième version) et ça marche à la PERFECTION. Je te remercie vivement de ton aide. Ce programme va m'être EXTRÊMEMENT UTILE, et la limite de 9999 entrées n'en sera pas une pour moi, car je n'aurai jamais plus d'une cinquantaine de termes à traiter. J'espère que tous les utilisateurs de ce forum auront la chance de tomber sur un membre aussi serviable et efficace. Une fois encore, mille merci. Bien cordialement, Lionel |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com