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 :

Déterminer si un document Word contient une liste de mots [À faire]


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut Déterminer si un document Word contient une liste de mots
    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.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub ChercherTrouver()
    Dim TableauDesMots, ok As Boolean, i As Integer
        tableau = Array("papa", "maman", "tonton", "tata")
        For i = 0 To UBound(TableauDesMots)
            Selection.Tables(1).Select
            With Selection.Find
                .Text = TableauDesMots(i)
                ok = .Execute = True
                If ok Then
                    Selection.MoveRight Unit:=wdCell
                    Selection.TypeText Text:="1"
                End If
            End With
        Next
    End Sub
    Au lieu de passer dans la cellule suivante pour insérer "1", tu peux utiliser le N° de ligne et de colonne pour te déplacer mais commence par là.
    A+

  3. #3
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    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

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu n'as qu'une fois chaque mot, tu n'as pas grand chose à modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        For i = 0 To UBound(TableauDesMots)
            With Selection.Find
                .Text = TableauDesMots(i)
                ok = .Execute = True
                If ok Then
                    Selection.MoveRight Unit:=wdCharacter
                    Selection.TypeText Text:="_1_" 'tu règles les espaces comme tu le souhaites
                End If
            End With
        Next
    Maintenant, si l'occurence du mot cherché peut être rencontrée plusieurs fois, tu vas devoir faire une boucle de recherche. Pour ça, regarde là http://www.developpez.net/forums/sho...d.php?t=411051, tu supprimes la sélection de la ligne et l'insertion du signet et tu remplaces LeMot par TableauDesMots(i). Enfin, tu mets le tout dans la boucle For i = 0 To UBound(TableauDesMots)
    A +

  5. #5
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    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

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Documents("Classeur1.doc").Activate
    '...
        Documents("Classeur2.doc").Activate
    Pour sélectionner le tableau, je t'ai mis le code. Pour créer un tableauDeMots de ton tableau Word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DerLigne = ActiveDocument.Tables(1).Rows.count
    Redim Preserve TableauDeMots(DerLigne)
    For NoLigne = 1 to DerLigne
        TableauDeMots(NoLigne) = ActiveDocument.Tables(1).Cell(NoLigne, 1)
    Next
    Mais je dois "y aller"
    Bon après-midi

  7. #7
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    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

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    et, avant End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    A+

  9. #9
    Membre averti
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    Bonjour,

    Merci de ces précisions !

    Je viens de mettre à jour mon code, qui se présente sous la forme suivante :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    Sub ChercherTrouver()
     
    'Désactiver la mise à jour de l'application pour éviter les mouvements de pages
    Application.ScreenUpdating = False
     
    Dim TableauDesMots, ok As Boolean, i As Integer
     
        'Créer un tableau
        tableau = Array("papa", "maman", "tonton", "tata")
        DerLigne = ActiveDocument.Tables(1).Rows.Count
        ReDim Preserve TableauDesMots(DerLigne)
        For NoLigne = 1 To DerLigne
     
     
        TableauDesMots(NoLigne) = ActiveDocument.Tables(1).Cell(NoLigne, 1)
    Next
     
        For i = 0 To UBound(TableauDesMots)
            Selection.Tables(1).Select
            With Selection.Find
                .Text = TableauDesMots(i)
                ok = .Execute = True
                If ok Then
                    Selection.MoveRight Unit:=wdCell
                    Selection.TypeText Text:="1"
                End If
            End With
     
     
        Next
    'Réactiver la mise à jour de l'application
    Application.ScreenUpdating = True
    End Sub

    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

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
       tableau = Array("papa", "maman", "tonton", "tata")
    Tableau doit être déclaré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tableau ' as variant
    Mais si le tableau doit être redimensionné, la déclaration doit être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim TableauDesMots() as string 'dans cet exemple
    Ensuite, puisque tu vas chercher les mots dans un tableau Word -> Tables(1), Tableau n'est plus nécessaire. Ce qui devrait donner :
    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
    26
    27
    Sub ChercherTrouver() 
    'Désactiver la mise à jour de l'application pour éviter les mouvements de pages
    Application.ScreenUpdating = False
     
    Dim TableauDesMots() as string, ok As Boolean, i As Integer
     
        DerLigne = ActiveDocument.Tables(1).Rows.Count
        ReDim Preserve TableauDesMots(DerLigne)
        For NoLigne = 1 To DerLigne
            TableauDesMots(NoLigne) = ActiveDocument.Tables(1).Cell(NoLigne, 1)
        Next
     
        For i = 0 To UBound(TableauDesMots)
            Selection.Tables(1).Select
            With Selection.Find
                .Text = TableauDesMots(i)
                ok = .Execute = True
                If ok Then
                    Selection.MoveRight Unit:=wdCell
                    Selection.TypeText Text:="1"
                End If
            End With
        Next
     
    'Réactiver la mise à jour de l'application
    Application.ScreenUpdating = True
    End Sub
    J'espère que ce sera "ok" ce coup-ci
    Tu nous dis
    A+
    NB - Je n'ai pas vérifié le reste du code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enlever une liste de mots d'un document word
    Par volvic54 dans le forum Word
    Réponses: 2
    Dernier message: 01/05/2014, 21h05
  2. Tester si un document word contient une en tête
    Par cooldid dans le forum Langage
    Réponses: 4
    Dernier message: 14/04/2008, 13h03
  3. Importer un document Word dans une table Access
    Par emeraudes dans le forum Access
    Réponses: 7
    Dernier message: 03/06/2006, 10h53
  4. Ouvrir un document word dans une application java
    Par serialkilled dans le forum API standards et tierces
    Réponses: 14
    Dernier message: 02/06/2006, 19h48
  5. insertion document word dans une page
    Par maysa dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2006, 10h07

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