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

Macros et VBA Excel Discussion :

Parser une multitude de fichiers Word dans un tableau Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Parser une multitude de fichiers Word dans un tableau Excel
    Bonjour,

    Tout d'abord merci à ceux et celles qui me viendront en aide.
    Je précise que je n'ai de compétences VBA qu'à la compréhension et la lecture du code .

    Je vous expose donc mon problème :
    J'ai un répertoire avec un gros millier de documents .doc et il m'est demandé de les mettre dans un Excel.

    Tous ces documents sont formatés de manière que :
    - La première page est une page de garde
    - Les suivantes sont des annexes séparées par des sauts de pages.

    A l'aide de différents posts sur le forum, j'ai repéré quelques morceaux de codes qui m'ont inspiré dans mes recherches, notamment les suivants issus de ce post:
    [S]
    Citation Envoyé par SilkyRoad Voir le message
    bonjour

    Boucler sur les paragraphes d'un document Word et les supprimer s'ils débutent par le mot "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
    Option Compare Text
    Sub supprimerParagraphe()
    Dim WordApp As Word.Application
    Dim WordDoc As Word.document
    Dim cible As Paragraph
     
    Set WordApp = New Word.Application
    WordApp.Visible = True
     
    Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\Doc1.doc")
    WordDoc.bookmarks("\StartOfDoc").Select
     
    For Each cible In WordDoc.Paragraphs
    cible.Range.Select
    If Trim(cible.Range.Words(1)) = "Test" Then cible.Range.Delete
    Next cible
    End Sub
    Un autre exemple qui supprime les paragraphes de façon conditionnelle

    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
    Sub supprimerParagraphes_Conditionnel()
    'boucle sur les 3 premiers paragraphes du document Word :
    'si la cellule A1<>1 alors suppression du paragraphe 1
    'si la cellule A2<>1 alors suppression du paragraphe 2
    'si la cellule A3<>1 alors suppression du paragraphe 3
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim i As Integer
     
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open("C:\monDocument.doc")
     
    For i = 3 To 1 Step -1
    If Cells(i, 1) <> 1 Then _
    WordDoc.Paragraphs.Item(i).Range.Delete
    Next i
    End Sub
    Extraire les phrases / lignes de plusieurs documents Word
    ************************************************

    Chaque ligne est importée dans une colonne différente du classeur

    la macro Excel boucle sur tous les documents Word (fermés) pour
    ouvrir les fichiers
    transferer chaque phrase/ligne dans une colonne differente du classeur
    puis refermer le document


    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
    Sub importLignesDocumentWord()
    Dim Fichier As String, Direction As String
    Dim wordApp As Word.Application
    Dim wordDoc As Word.Document
    Dim i As Byte
    Dim j As Integer
     
    Application.ScreenUpdating = False
     
    Direction = ThisWorkbook.Path
    Fichier = Dir(Direction & "\*.doc")
    Do While Fichier <> "" 'boucle sur tous les fichiers .doc du repertoire
     
    Set wordApp = CreateObject("Word.Application")
    wordApp.Visible = False
    Set wordDoc = wordApp.Documents.Open(Direction & "\" & Fichier) 'ouverture documents word
    j = j + 1
    For i = 1 To wordDoc.Sentences.Count 'boucle sur les phrases/lignes de chaque document
    Cells(j, i) = _
    Application.WorksheetFunction.Substitute(wordDoc.Sentences(i).Text, Chr(13), "")
    Next i
     
    wordDoc.Close False 'fermeture documents word
    wordApp.Quit
    Set wordDoc = Nothing
    Set wordApp = Nothing
    Fichier = Dir
     
    Loop
    End Sub
    Mon objectif est donc :
    - pour chacun des fichiers, de générer une ligne dans un excel.
    - Pour la première page (page de garde) remplir les colonnes suivant les phrases comme l'indique SilkyRoad.
    - Pour les pages suivantes, remplir les colonnes avec le contenu que se trouve entre deux sauts de pages, suivant l'idée de SilkyRoad.

    Je suis donc preneur de toutes pistes afin d'avancer.

    Cdlt,
    Merci d'avance

    Aerial

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Points : 414
    Points
    414
    Par défaut Lister les .doc d'un répertoire dans une feuille Excel en VBA
    Bonjour Aerial,

    Citation Envoyé par Aerial Voir le message
    pour chacun des fichiers, de générer une ligne dans un excel.
    Vous pouvez immédiatement démarrer le projet en définissant ses constantes nommées.

    Répondez en décrivant chaque constante. Où trouvez les documents Word ?
    A partir de quelle ligne et dans quelle colonne on va renseigner la feuille Excel ?
    Pour y mettre quoi ? Le nom du document ? Son chemin complet ? Son nombre de lignes ? De pages ? L'auteur ? Sa date ?

    1. Démarrez avec la maquette DocName() et surtout ses constantes

    Ouvrir Excel. Une feuille vide apparaît.
    Ouvrir le Visual Basic Editeur par Alt+F11, c-a-d :
    Excel menu "Outils" > "Macro" > "Visual Basic Editeur" (VBE)

    Cliquez sur le VBE menu "Insérer" > "Module".
    Dans la fenêtre propriétés du Module1, renommer "Module1" en "ModDoc"
    Dans la fenêtre d'Edition de ModDoc, copier-coller :
    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
    Option Explicit
    Public Const pathDoc = "\*.doc" ' Chemin relatif des documents Word dans le répertoire du .xls
     
    Public Const indSheetDoc = 1    ' Feuille "Document"
    Public Const rowName = 2        ' Première ligne pour inscrire le nom du document
    Public Const colName = 1        ' Colonne des noms de document
     
    Function DocName() As Integer
    Dim fileName As String, indRow As Integer, nbrDoc As Integer
     
        fileName = Dir(ThisWorkbook.Path + pathDoc)
        indRow = rowName
        nbrDoc = 0
        While fileName <> ""
            Cells(indRow, colName) = fileName
            indRow = indRow + 1
            nbrDoc = nbrDoc + 1
            fileName = Dir
        Wend
        Debug.Print "Nombre de documents traités : " & nbrDoc
        DocName = nbrDoc
    End Function
    Sauvegardez le projet dans DocMngt.xls

    2. Testez DocName() maintenant

    Copier deux documents Word .doc dans le même répertoire que DocMngt.xls

    Dans la fenêtre d'Exécution immédiate (Ctlr+G) du VBE, copier-coller et valider par ENTER :
    Nombre de documents traités : 2
    2
    La fonction DocName() a retourné le nombre de documents traités. Soit 2 s'il y a deux documents Word .doc dans le même répertoire que DocMngt.xls

    Dans la feuille de calcul "Feuil1" renommée en "Document" dans DocMngt.xls,
    DocName() a écrit en A2 le nom du premier document Word et en A3 le nom du second .doc.

    Si ce n'est pas ce qui est attendu, mieux décrire les spécifications de votre projet en s'aidant de la définition de constantes en VBA que vous pouvez commenter. Etablir ce qui est attendu avec un niveau de description analogue à cette maquette. Comparez comment une seule ligne de votre spécification a pu générer les quatre chapitres de cet article.

    3. Adaptez DocName() selon votre contexte

    Si vous choisissez de définir où trouver les .doc par un chemin absolu en remplaçant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const pathDoc = "\*.doc" ' Chemin relatif des documents Word dans le répertoire du .xls
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Const pathDoc = "C:\MesDocuments\*.doc" ' Chemin absolu des documents Word
    Adaptez le chemin à votre répertoire de documents contenant une copie de quelques .doc pour le test de la maquette.

    Il faudra changer le code pour récupérer chaque nom de document :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        fileName = Dir(ThisWorkbook.Path + pathDoc)
    peut devenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        fileName = Dir(pathDoc)
    4. Définir le projet avec précision

    Après avoir réussi cette étape volontairement la plus simple possible, définir avec le même niveau de précision ce que l'on veut extraire de la page de garde et où dans la feuille Excel on veut traiter ces informations.

    Définir dans votre réponse de nouvelles constantes de rangée, de colonne, et éventuellement un nouveau n° de feuille si on doit ranger ces informations dans une nouvelle feuille.
    Idem pour la gestion des annexes. Définir avec précision en donnant un exemple minimal ce qu'il y a à extraire sans divulguer un contenu sensible.

    Une seule ligne de description n'est pas suffisante, car à partir de :

    Citation Envoyé par Aerial Voir le message
    - Pour les pages suivantes, remplir les colonnes avec le contenu qui se trouve entre deux sauts de page
    Si on doit recopier le contenu des pages suivantes, hors la page de garde, dans des colonnes (notez l'imprécision à résoudre par des constantes) comme il y a "un gros millier de documents .doc", on risque de faire exploser la ou les feuilles Excel si on ne spécifie pas le possible contenu à extraire, s'il faut extraire certains mots clés, s'il y a des tables, des mises en forme particulière (bold, italic, color), des schémas ou des images, des notes de bas de page, des hyperliens, etc.
    Dans chaque cas, précisez ce qu'il convient de faire pour simplifier le problème.
    ___________

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

Discussions similaires

  1. [XL-2010] Transfert de tableau word dans variable tableau excel et sanitisation
    Par Bragu Demon dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/02/2015, 14h59
  2. [PowerShell] copier des donner d'un fichier txt dans un tableau excel
    Par jihed-hajji dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 15/01/2013, 14h54
  3. Comment extraire les données d'un fichier txt dans un tableau excel
    Par mirage23 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/11/2012, 09h16
  4. Réponses: 2
    Dernier message: 07/11/2008, 16h48
  5. Inserer un fichier word dans un tableau word
    Par Homer091 dans le forum VBA Word
    Réponses: 2
    Dernier message: 15/05/2008, 18h17

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