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 :

tester si un paragraphe contient un tableau


Sujet :

VBA Word

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut tester si un paragraphe contient un tableau
    Bonjour,

    aujourd'hui je suis face à une difficulté que je n'arrive pas à résoudre directement sur les forums.
    je parcours tous les paragraphes d'un document word, et j'ai besoin de savoir si un d'entre eux serait un tableau, comme le style de paragraphe ne me renseigne pas, j'ai cherché un peu et j'ai trouvé deux methodes mais aucune ne me donne satisfaxction

    1 compter les tables dans un paragraphe :

    documents.paragraphe(i).range.select
    selection.tables.count

    ça me renvoie toujours 0

    2_ verifier l'état du paragraphe

    is_table = selection.information(wdwithinTable)

    me renvoie toujours false

    la seule méthode qui me donne un indication juste est de comparer la position du paragraphe avec celle des tables, mais cette méthode est trés longue et plutôt "éléphantaire".
    comme mon document est géant il faut que je trouve une méthode plus élégante

    merci pour la réponse si quelqu'un a une bonne idée.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Un paragraphe ne contient jamais de tableau.

    Explique nous ce que tu souhaites faire ?
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    je parcours un doc word paragraphes par paragraphes
    j'en récolte les infos comme le titre et le contenu que je filtre et que je traite dans un fichier excel qui va nous servir de base de donnée.

    dans certains paragraphes les données sous placées dans un tableau, il faut donc que je puisse faire le lien entre le titre du paragraphe principal et le tableau qui contient les données.

    comme tu dis il y a une distinction entre la gestion des paragraphes et des tableau je suis bien embeté pour tracer le tableau sur le titre du paragraphe. c'est l'objet de ma question :
    comment tester si un paragraphe contient un tableau et par là récuperer l'index du tableau qui va me permettre d'en extraire les données.

    la seule méthode que j'ai pu évaluer est de comparer la position du paragraphe et celle du tableau.

    cette méthode a le désavantage d'être trop lourde et prend trop de temps,
    les documents que je dois traiter comportent à peu prés 40 000 paragraphes
    et 10 000 tableaux.

    c'est pour ça qu'on me demande de faire une routine.

    merci pour ta réponse

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Les paragraphes ne contiennent pas de tableau.
    On pourrait comparer les tableaux à des shapes, ils sont ancrés à un paragraphe, mais ne sont pas contenu dans ce paragraphe. Ils peuvent être ancrés à un paragraphe et être affiché devant un autre.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    donc mon pb est insoluble

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Insoluble, non, mais tu vas avoir une usine à gaz.

    Il faut sélectionner une portion contenue entre deux titres pour en extraire les tableaux, mais tu vas avoir des temps de traitement énormes.

    Ou alors travailler en deux temps.

    Mais je n'ai pas de piste plus précise.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    bon j'ai compris je vais faire avec le positionnement, et si les gars râlent je leur dirai de mettre des balises dans les doc pour faciliter le boulot d'analyse.

    je deleste cette discussion

    merci

    à +

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,
    si tu peux mettre des signets, c'est plus facile.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Expert confirmé
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Par défaut
    Salut Patnel,

    Peux-tu mettre un fichier d'exemple (avec que quelques paragraphes du style 50 et que quelques tables du style 5) si ton document n'est pas confidentiel évidemment et ta macro de parcours des paragraphes et des tableaux ?

    Peux-tu nous préciser ce que tu veux faire avec les tableaux, car s'il s'agit de ne rien faire ou des les supprimer, tu vas simplifier énormément ton problème ?

    J'ai déjà parcouru des documents comme tu l'indiques pour y supprimer des paragraphes qui ne correspondaient pas à ce que l'on voulait retenir et j'ai utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    selection.information(wdwithinTable)
    mais pas toujours, je reconnais car certains comportements de Word sont assez bizarres avec les tableaux.

    @+

  10. #10
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    pour sepia je donne je qu'en final j'ai fait ,

    en plus j'ai trouvé une solution assez élégante qui correspond à ce que je cherchais

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    Sub traite_gtdb()
    ' déclarations
    Dim TDS_file As Object
    Dim M_objdoc As Word.Document
     
    Set le_Dossier = ThisWorkbook.Sheets("Tests")
    ' instance de word
    Set TDS_file = New Word.Application
     
    'f_TDS = ThisWorkbook.Path & "\doc_testa\" & "CDS_05_005266 rev12.doc"
    f_TDS = ThisWorkbook.Path & "\doc_testa\" & "GTDB.doc"
    ' ouvrir le fichier GTDB
    'TDS_file.Visible = True
    On Error Resume Next
    Set M_objdoc = TDS_file.Documents.Open(f_TDS)
     
    'initialisation
    le_Dossier.Cells.Clear
    le_Dossier.Cells(1, 1).Value = "Numero Test"
    le_Dossier.Cells(1, 2).Value = "TITRE"
    le_Dossier.Cells(1, 3).Value = "OVERVIEW"
    le_Dossier.Cells(1, 4).Value = "PARAMETRE"
    le_Dossier.Cells(1, 5).Value = "I/O"
    le_Dossier.Cells(1, 6).Value = "FORMAT"
    le_Dossier.Cells(1, 7).Value = "USE"
    le_Dossier.Cells(1, 8).Value = "N° Diagram"
     
     
        With Columns("G:G")
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlTop
            .WrapText = True
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
        End With
     
     
        With Columns("C:C")
            .HorizontalAlignment = xlGeneral
            .VerticalAlignment = xlTop
            .WrapText = True
            .Orientation = 0
            .AddIndent = False
            .ShrinkToFit = False
            .MergeCells = False
        End With
     
    i_tab = 0
    i_diag = 0
    T_deb = Time
    Ln = 2
    N_para = M_objdoc.Paragraphs.Count
     
    ' analyse du document
        For i_para = 1 To N_para ' voir 2278
     
        le_style = M_objdoc.Paragraphs(i_para).Style
     
     
    le_texte = M_objdoc.Paragraphs(i_para).Range.Text
     
            ' definition des filtres
     
    ' traitement titre 3 : nom et n° du test
    pos = InStr(le_style, "Titre 3;H3")
     
    If pos > 0 Then
    Ln = Ln + 1
    pos = InStr(le_texte, ": FF")
    titre_test = Left(le_texte, pos - 1)
    posi = Len(le_texte) - pos - 1
    num_test = Right(le_texte, posi)
     
    le_Dossier.Activate
    le_Dossier.Cells(Ln, 1).Value = num_test '"Numero Test"
    le_Dossier.Cells(Ln, 2).Value = titre_test '"TITRE"
     
    pos = 0
    End If
     
            ' titre 4 overview
     
    pos_T = InStr(le_style, "Titre 4")
    pos_l = InStr(le_texte, "Overview")
     
    If pos_T > 0 And pos_l > 0 Then
        descri_test = M_objdoc.Paragraphs(i_para + 2).Range.Text
        le_Dossier.Cells(Ln, 3).Value = descri_test
        pos_l = 0
    End If
     
              ' tableau
     pos = InStr(le_texte, "List of used variables")
    If pos > 0 Then tab_val = True
     
    is_tab = M_objdoc.Paragraphs(i_para).Range.Tables.Count
     If is_tab > 0 And tab_val = True Then
     n_l = M_objdoc.Paragraphs(i_para).Range.Tables(1).Rows.Count
     
        For lg = 2 To n_l
        Nom = M_objdoc.Paragraphs(i_para).Range.Tables(1).Cell(lg, 2)
     
        famil = M_objdoc.Paragraphs(i_para).Range.Tables(1).Cell(lg, 3)
        forma = M_objdoc.Paragraphs(i_para).Range.Tables(1).Cell(lg, 4)
        desc = M_objdoc.Paragraphs(i_para).Range.Tables(1).Cell(lg, 5)
     
        le_Dossier.Cells(Ln, "D").Value = Nom
         le_Dossier.Cells(Ln, "E").Value = famil
          le_Dossier.Cells(Ln, "F").Value = forma
           le_Dossier.Cells(Ln, "G").Value = desc
           Ln = Ln + 1
        Next lg
      tab_val = False
      'i_para = i_para + Ln * 5
     End If
     
                ' diagram
     
    pos_l = InStr(le_texte, "diagram")
    If pos_l > 1 Then
     
    'Is_diag = M_objdoc.Paragraphs(i_para).Shapes.Count
     
    End If
     
    'fin de l'analyse
        Next i_para
    fin:
    T_fin = Time
     
    duree = T_fin - T_deb
    le_temps = Format(duree, "h:m:s")
     
     
     
    M_objdoc.Close
     
    'Quitter l'application Word créée
    TDS_file.Quit
    'Un peu de ménage
    Set TDS_file = Nothing
    Set M_objdoc = Nothing
     
     MsgBox le_temps
     
    End Sub
    je ne donne pas le corps du texte car il est confidentiel
    on voit bien la méthode pour savoir si un paragraphe contient un tableau et comment récupérer les données des différents tableaux.

    voilà je repasse la discussion en résolue car la solution est interessante

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

Discussions similaires

  1. Tester si un paragraphe se trouve dans un tableau.
    Par laurent_diep dans le forum VBA Word
    Réponses: 5
    Dernier message: 23/05/2009, 15h07
  2. tester si un textaera contient une entrée!
    Par JauB dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/03/2008, 22h41
  3. Tester si une variable contient une regex valide
    Par iblis dans le forum Langage
    Réponses: 6
    Dernier message: 10/08/2007, 00h04
  4. tester Si une chaine contient la 2eme chaine
    Par MyWork dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/04/2007, 12h49
  5. Tester si un contrôle est un tableau de contrôles...
    Par sozie9372 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 11/08/2005, 10h04

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