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
    Candidat au Club
    Index Word - Modification de la mise en page et ajout de données
    Bonjour,

    Dans un document généalogique créé sous Word 2007 et que je souhaite enrichir et améliorer, il existe un tableau récapitulatif Word comprenant plus de 5000 lignes avec nom, prénom, branche de rattachement, année de naissance mais le numéro de page dans lequel la personne apparait dans le document ne figure malheureusement pas dans ce tableau.
    J'ai conservé ce tableau récapitulatif et j'ai créé en plus un index Word en marquant les 5000 entrées (ce qui a été un peu fastidieux) mais cet index ne m'indique que nom, prénom, numéro(s) de page.

    Ma question est la suivante : comment pourrais-je procéder pour fusionner les données du tableau récapitulatif et de l'index ?

    J'ai dans l'idée que le numéro de page se rattachant à un individu pourrait être extrait de l'index via une instruction VBA et être ensuite ajouté au tableau récapitulatif, mais j'ai beau chercher la syntaxe d'une telle instruction, je ne trouve pas...

    Merci de l'aide que vous pourriez m'apporter

  2. #2
    Expert éminent sénior
    Citation Envoyé par chdns Voir le message

    Bonjour,

    Avez-vous un exemple simplifié à mettre en ligne ?
    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
    Candidat au Club
    Merci de votre coopération

    Voici un extrait du document sur lequel je travaille et dans lequel, idéalement, je souhaiterais ajouter au tableau récapitulatif de la page 3 une colonne où figureraient les numéros de page (ceux qui sont identifiés dans l'index de la même page 3).

    Cordialement

  4. #4
    Expert éminent sénior
    Citation Envoyé par chdns Voir le message


    En transformant votre document en .docm, la macro ci-dessous récupère les noms, prénoms, numéro de page dans une matrice. Il vous faudra ensuite réaliser deux boucles imbriquées sur votre tableau et sur la matrice pour comparer les couples colonne 1 + colonne 2 avec les noms prénoms de la matrice. Le numéro de page correspond à l'indice 2 de la matrice.
    De mon point de vue, il vous faudra peut-être compléter les cellules vides de la colonne Nom pour simplifier le code. La police des noms pourrait être de la même couleur que cellule du fond de cellule.
    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
     
    Sub RepererLesIndex()
     
    Dim I As Long, J As Long, IndexMatrice As Long
    Dim Contenu As String, ContenuNom As String, ContenuPrenoms As String, ListeDesPrenoms As Variant, PageDocument As String
    Dim MatriceNomsPrenoms() As Variant
     
        With ActiveDocument
     
            IndexMatrice = 0
            For I = 1 To .Indexes(2).Range.Paragraphs.Count
                Contenu = .Indexes(2).Range.Paragraphs(I).Range.Text
                If UBound(Split(Contenu, ":")) > 0 Then
                   ContenuNom = Split(Contenu, ":")(0)
                   ContenuPrenoms = Trim(Split(Contenu, ":")(1))
     
                   If UBound(Split(ContenuPrenoms, ";")) = 0 Then
                      ReDim Preserve MatriceNomsPrenoms(2, IndexMatrice)
                      MatriceNomsPrenoms(0, IndexMatrice) = Trim(ContenuNom)
                      MatriceNomsPrenoms(1, IndexMatrice) = Trim(Split(ContenuPrenoms, ",")(0))
                      PageDocument = Split(ContenuPrenoms, ",")(1)
                      MatriceNomsPrenoms(2, IndexMatrice) = Mid(PageDocument, 1, Len(PageDocument) - 1)
                      IndexMatrice = IndexMatrice + 1
                   Else
                      ListeDesPrenoms = Split(ContenuPrenoms, ";")
                      For J = LBound(ListeDesPrenoms) To UBound(ListeDesPrenoms)
                          ReDim Preserve MatriceNomsPrenoms(2, IndexMatrice)
                          MatriceNomsPrenoms(0, IndexMatrice) = Trim(ContenuNom)
                          MatriceNomsPrenoms(1, IndexMatrice) = Split(ListeDesPrenoms(J), ",")(0)
                          PageDocument = Split(ListeDesPrenoms(J), ",")(1)
                          MatriceNomsPrenoms(2, IndexMatrice) = PageDocument
                          IndexMatrice = IndexMatrice + 1
                      Next J
                      MatriceNomsPrenoms(2, IndexMatrice - 1) = Mid(PageDocument, 1, Len(PageDocument) - 2)
                   End If
                End If
            Next I
            ' Restitution de la matrice
            For IndexMatrice = LBound(MatriceNomsPrenoms, 2) To UBound(MatriceNomsPrenoms, 2)
              Debug.Print IndexMatrice & " - " & MatriceNomsPrenoms(0, IndexMatrice) & " - " & MatriceNomsPrenoms(1, IndexMatrice) & " - " & MatriceNomsPrenoms(2, IndexMatrice)
            Next IndexMatrice
     
        End With
     
    End Sub
    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

  5. #5
    Candidat au Club
    Je vous remercie infiniment de votre implication dans la résolution de mon problème, résolution qui n'était manifestement pas à ma portée car j'aurais été bien incapable de produire
    le programme VBA que vous avez eu la gentillesse de me proposer.

    Votre réactivité et votre professionnalisme sont remarquables ; je vous en suis très reconnaissant.

    Merci encore

    Très cordialement

  6. #6
    Expert éminent sénior
    Citation Envoyé par chdns Voir le message

    Pour la suite, une solution de contournement consiste à copier coller votre tableau dans Excel, puis de décharger la matrice dans un onglet du fichier Excel et de récupérer les numéros de page à partir d'une fonction RechercheV, et enfin de remettre le tableau Excel corrigé dans votre document Word.
    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

  7. #7
    Expert éminent sénior
    Citation Envoyé par chdns Voir le message

    Le fichier joint est un exemple du transfert de la matrice sur un fichier Excel.
    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

###raw>template_hook.ano_emploi###