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

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    septembre 2013
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : septembre 2013
    Messages : 1
    Points : 1
    Points
    1

    Par défaut Recupérer le "titre" d'un tableau word dans excel

    Bonjour,

    Dans le but d'automatiser le traitement d'un fichier word contenant des tableaux je souhaiterai récupérer le "titre" de chaque tableau du document word dans excel via vba.

    Pour l'instant je récupère les tableaux sans problèmes.

    Le titre correspond à une phrase précédant le tableau. Et c'est cette partie que je n'arrive pas à récupérer.

    Les phrases que je souhaite récupérer respectent toutes le même format

    Exemple:

    Phrase précédant le tableau 1.
    Tableau1

    Phrase précédant le tableau 2.
    Tableau2

    Phrase précédant le tableau 3.

    Text blabla inutile....
    Tableau3

    D'avance merci

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    3 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 3 937
    Points : 10 043
    Points
    10 043
    Billets dans le blog
    27

    Par défaut

    Citation Envoyé par jf1476 Voir le message
    Dans le but d'automatiser le traitement d'un fichier word contenant des tableaux je souhaiterai récupérer le "titre" de chaque tableau du document word dans excel via vba.
    Pour l'instant je récupère les tableaux sans problèmes.
    Le titre correspond à une phrase précédant le tableau. Et c'est cette partie que je n'arrive pas à récupérer.
    Bonjour,

    Si vous avez la main sur le document Word, une solution assez simple serait de faire correspondre ces titres à des signets aux noms explicites. Ex: TitreTable1, ....
    Ensuite, avec une variable Bookmark, il suffit de balayer la collection des signets du document et de récupérer leur contenu avec un ".range.text" suivant leur nom.

    Cordialement.

    Autre solution sans les signets avec cette fonction :

    Ce code ne fonctionne sous cette forme que dans un document Word. Voir plus bas pour activer cette fonction depuis Excel.

    A tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Function ContenuTitre(ByVal TableEnCours As Table) As String
     
             ContenuTitre = ""
             TableEnCours.Select
             Selection.MoveUp Unit:=wdLine, Count:=1
             With Selection
                  .HomeKey Unit:=wdLine
                  .EndKey Unit:=wdLine, Extend:=wdExtend
                  ContenuTitre = .Range.Text
             End With
     
    End Function
    Et pour l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub TestContenuTitre()
     
    Dim I As Integer
     
        With ActiveDocument
             For I = 1 To .Tables.Count
                 MsgBox ContenuTitre(ActiveDocument.Tables(I))
             Next I
        End With
     
    End Sub
    Ce code a été réalisé à partir de la FAQ VBA Word faq/?page=VBA#vba_divers_selection, notamment le paragraphe développé par bidou.


    Si le code est lancé directement depuis Excel, il faut bien sur ajouter la référence Microsoft Word et modifier le code ci-dessus :

    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
     
    Function ContenuTitre(ByVal DocumentEnCours As Word.Document, ByVal TableEnCours As Word.Table) As String
     
    Dim SelectionEnCours As Word.Selection
     
        With DocumentEnCours
             ContenuTitre = ""
             TableEnCours.Select
             Set SelectionEnCours = Word.Selection
             SelectionEnCours.MoveUp Unit:=wdLine, Count:=1
             With SelectionEnCours
                  .HomeKey Unit:=wdLine
                  .EndKey Unit:=wdLine, Extend:=wdExtend
                  ContenuTitre = .Range.Text
             End With
             Set SelectionEnCours = Nothing
        End With
     
    End Function

    Cordialement.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    juin 2007
    Messages
    13 270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2007
    Messages : 13 270
    Points : 27 188
    Points
    27 188

    Par défaut

    Tu aurais du mettre cette demande dans la rubrique de macro Word.
    Le VBA Word n'est pas trop ma tasse de thé, ce qui explique que le code suivant ne soit peut-être pas très propre.

    En supposant que dans la variable DocWd se trouve la référence à ton document Word, la macro suivante va placer dans la colonne A le contenu de toutes les lignes se trouvant juste avant un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Tableau As Table
    Dim Deb As Long, Fin As Long
    Dim Lig As Long
     
    Lig = 1
    For Each Tableau In DocWd.Tables
       Fin = Tableau.Range.Start - 1
       Deb = DocWd.Range(Fin - 1).Paragraphs(1).Range.Start
       Cells(Lig,1).Value = DocWd.Range(Deb, Fin).Text
       Lig = Lig + 1
    Next Tableau
    Mais je ne vois pas comment éliminer le "Text blabla inutile....".
    Si aucune spécificité (je parle d'une règle claire et précise) ne permet de distinguer ce blabla, je ne vois pas comment le distinguer du titre utile à récupérer.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Expert éminent

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

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 787
    Points : 9 926
    Points
    9 926
    Billets dans le blog
    31

    Par défaut

    Bonjour,

    Si ton document doit être utilisé plusieurs fois, tu dois faire d'abord un petit effort. Ceci étant dit, je ne sais pas si cela peut marcher avec Word 97.

    Tu ouvres ton document dans Word, et tu copies ton "titre" dans la propriété "Titre" (Title en VBA) de ton tableau. (Pour les nouveaux documents, il suffit de se discipliner et de le faire au fur et à la mesure.)

    Ensuite, cela devrait se faire les yeux fermés. (Si la macro est écrite dans Excel, ajouter la référence et adapter les objets).

    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
    Sub trouvelestitres()
        dim letitre as string
        'Au lieu d'un tableau, on peut les metttre
        'directement dans une cellule d'Excel
        dim LesTitres(activedocument.tables.count)
        dim i as integer
        i=1
        For each unetable in activedocument.tables()
              letitre = unetable.title
              lestitres(i) = letitre
              i=i+1
        next
    end sub
    Au pire tu pourras modifier un peu ce code, pour y ajouter la copie de tes titres en te basant sur les autres codes fournis, et remplir la propriété Title de tes tableaux.
    À 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.

Discussions similaires

  1. [WD-2002] Cellules décalées si copie tableau word dans excel
    Par Boubas1 dans le forum Word
    Réponses: 1
    Dernier message: 11/04/2009, 00h25

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