IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

extraire tous les paragraphes contenant un mot précis


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut extraire tous les paragraphes contenant un mot précis
    Bonjour à tous,

    J'aimerais savoir si une macro Word pourrait effectuer la tâche suivante :

    1) document = texte de longueur indéterminée, séparé en paragraphes

    2) on tape un mot à rechercher

    3) chaque fois que la macro trouve le mot en question, elle sélectionne le paragraphe où ce mot est contenu, et le recopie dans un 2e fichier

    4) la macro cherche l’occurrence suivante, et copie le paragraphe correspondant en-dessous du 1er paragraphe recopié (autrement dit, chaque paragraphe contenant le mot recherché doit rester un paragraphe séparé dans le 2e fichier)

    5) quand toutes les occurrences ont été trouvées, la macro sort de la boucle...

    NB dans l'idéal, j'aimerais que la macro soit capable de rechercher non seulement le mot tapé, mais aussi toutes ses formes "lemmatisées" ; par exemple, si on tape oiseau, la macro s'arrête aussi sur oiseaux (donc le mot au pluriel) ; si le mot est un verbe, c'est plus compliqué : pour vouloir, elle doit chercher veux, voulait, voudriez, etc.
    Dans la boîte de dialogue "Rechercher" de Word 2003, il existe une case à cocher "Rechercher toutes les formes du mot (anglais)",ce qui semble indiquer que cette fonction n'existe pas pour la langue française...

    De toute façon, je serais déjà content de pouvoir effectuer automatiquement les opérations décrites de 1 à 5.

    Merci par avance

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Le plus simple c'est encore de passer par la collection paragraphs du texte. De mémoire, à compléter et non testé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    dim texte as string
    dim cherché as string
    dim trouvé as Integer
    Cherché = "Octave"
    For each paragraphe in activedocument.paragraphs
        paragraphe.select
        texte = selection.text
        'Puisque VBA n'a pas de méthode, ou de fonction contains (VB.net oui),
        'il faut tricher un peu
        Trouvé = instr(texte, Cherché)
        select case Trouvé
            case is > 0
            'On l'a trouvé
                selection.copy
     
    'Coller dans l'autre document
    'Mais là, je n'ai pas le temps
    'On peut utiliser l'enregistreur de macros pour
    'avoir un canevas de code
     
           Case else
        End select
    selection.collapse
     
    next
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Un bon début pour un ... bon débutant
    Bonsoir et merci, Clément,

    Je suis un vrai débutant en macro, pas complètement ignorant, mais presque.
    Donc, pour commencer, je ne comprends pas ce que signifie au début de votre réponse "passer par la collection paragraphs du texte" ; si vous pouviez me mettre cela en français courant, je vous en serais reconnaissant.

    Pour ce qui est du code proposé : dois-je supposer qu'en le lançant, il va générer une boîte de dialogue où je taperai le mot recherché ?
    Merci là encore d'éclairer ma lanterne.

    Pour la suite du code permettant d'ouvrir un 2e document et d'y copier le paragraphe trouvé, je peux m'aider d'une macro qu'on m'a faite récemment sur ce forum, au sujet de textes bilingues grec-français.
    Mais je serai, après cette étape, incapable de "raccrocher les wagons" pour que la boucle reparte, puis se termine une fois le texte épuisé.

    Voilà, si vous avez un peu de temps plus tard, j'attendrai votre réponse à mes diverses interrogations.

    D'ici-là, bonne soirée

    PS s'il existait un moyen de programmer le résultat recherché en passant par un autre logiciel que Word, quitte à convertir le fichier Word en txt, html, pdf ou autre, je suis évidemment preneur de toute information à ce sujet

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par air_lent Voir le message
    Bonsoir et merci, Clément,


    Donc, pour commencer, je ne comprends pas ce que signifie au début de votre réponse "passer par la collection paragraphs du texte" ; si vous pouviez me mettre cela en français courant, je vous en serais reconnaissant.
    En VBA, et dans plusieurs langages de programmation, en fait, une collection c'est un ensemble d'objets semblable. Donc, pour faire court, chaque paragraphe est un objet paragraph et l'ensemble des paragraphes est une collection paraghaphs. Et c'est le même manège pour l'ensemble des objets de Word, et de chaque version de VBA, en fait.

    Et VBA, permet d'appliquer le même traitement à l'ensemble des objets de la même collection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For each paragraphe in activedocument.paragraphs
    Pour ce qui est du code proposé : dois-je supposer qu'en le lançant, il va générer une boîte de dialogue où je taperai le mot recherché ?
    Non, mon code permet juste, une fois le mot trouvé, de le chercher dans chaque paragraphe, et, si le mot est trouvé, de copier le paragraphe dans le presse-papiers,


    Mais je serai, après cette étape, incapable de "raccrocher les wagons" pour que la boucle reparte, puis se termine une fois le texte épuisé.
    Là, je suis un peu perdu. Mais, une fois la macro complète, on peut la relancer au besoin, et même l'affecter à un bouton.


    PS s'il existait un moyen de programmer le résultat recherché en passant par un autre logiciel que Word, quitte à convertir le fichier Word en txt, html, pdf ou autre, je suis évidemment preneur de toute information à ce sujet
    Cela reste possible, mais je ne suis pas convaincu, que ce soit la façon la plus simple de procéder.

    Ceci dit, sur cette page, il y a des liens vers des documents sur VBA que l'on peut télécharger.

    P.S. Ces temps-ci, je passe une bonne partie de mon temps libre à mettre à jour et améliorer les différentes sources VB.net (une plus grande passion que VBA) que j'ai déposées sur le site. Certaines fonctionnent (très) mal sur Windows 10. Leur passage de Windows 7 à Windows 10 n'a pas toujours été sans faille. Il y en a peut-être qui n'aimeront pas cela, mais passer de VB.net à VBA, cela me donne un peu l'impression de, disons, régresser, même si le mot est trop fort.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Bonjour Clément,

    Merci de m'avoir donné ces explications sur le sens des mots (les bonnes définitions dénotent à mon avis les bons enseignants).
    Mais je suis incapable d'exploiter seul ces informations, puisque je ne sais pas construire la macro en amont et en aval de ce bout de code.

    J'ai cherché hier un logiciel pouvant effectuer ce travail à la place de Word ; j'ai trouvé, en démonstration, "PowerGrep", qui permet la recherche d'un mot ou d'une expression dans leur contexte. Malheureusement, le logiciel est en anglais : quand on n'est pas arrêté par un langage de programmation, on l'est par une langue étrangère...

    Si donc quelqu'un d'autre passe devant cette discussion, je reste intéressé par une macro complète capable de :
    - ouvrir une boîte de dialogue où taper un mot à rechercher
    - rechercher tous les paragraphes où ce mot est présent (éventuellement sous toutes ses formes : singulier, pluriel, féminin...)
    - recopier dans un fichier vierge chacun des paragraphes trouvés.

    Je ne pense pas que pour quelqu'un qui connaîtrait assez bien VBA, cela soit très complexe (du moins si l'on s'en tient à la recherche d'un mot sans demander ses formes variables) ; le canevas du projet serait :
    - ouvrir une boîte de dialogue de recherche ; une fois le mot saisi et validé, la macro repart
    - chercher la 1ère occurrence du mot
    - sélectionner le paragraphe contenant cette 1ère occurrence
    - copier le 1er paragraphe trouvé
    - créer un fichier vierge et s'y placer
    - coller le 1er paragraphe trouvé
    - revenir au fichier initial
    - chercher la 2e occurrence
    - etc.
    - quand le mot reste introuvable, arrêter la macro

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo