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 :

Parcourir une tableau avec des lignes et des colonnes fusionnées


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Dessinateur d'étude
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Dessinateur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Parcourir une tableau avec des lignes et des colonnes fusionnées
    Bonjour,

    Je me heurte à un problème concernant le parcourt d'un tableau word.

    Voici ce que doit faire ma macro :
    J'ai dans un fichier excel une liste de mot à rechercher dans un fichier word. Si je les trouve dans le fichier word, alors je rajoute un "#" après le mot recherché.

    N'ayant jamais fait de macro word, j'ai commencé petit.
    - Pilotage de word depuis excel
    - Recherche du mot et ajout du "#"

    Après ça, j'ai essayé avec un nouveau fichier se rapprochant du vrai fichier word.
    Petit problème, les mots a recherché sont contenu dans des cellules d'un tableau.
    J'arrive à parcourir un tableau simple et a chercher mon texte et lui rajouter le "#"

    Là où je pêche totalement, c'est que dans mon vrai fichier word, les tableaux contiennent indifféremment des colonnes fusionnées et des lignes fusionnées.
    Un for each sur un tableau ayant des lignes fusionnées plante directement.
    Un for "simple" fonctionne mais plante lorsqu'on arrive sur un ligne ayant une colonne fusionné avec plusieurs lignes.

    Pour m'affranchir de la fusion des colonnes sur une même cellule j'utilise l'instruction Rows. Ça fonctionne mais j'arrive pas à trouver un équivalence pour une fusion de colonne sur plusieurs lignes.


    Ne pouvant pas vous donner le fichier word original, vous trouverez qu'un extrait avec le texte original remplacé. Je n'ai pas modifié la forme du document.
    Nom : macro_word_1.png
Affichages : 1812
Taille : 46,1 KoNom : macro_word_2.png
Affichages : 1679
Taille : 13,2 Ko


    Pour l'instant je n'ai pas fait de liaison avec mon fichier excel pour la recherche de mot.
    Si je veux rechercher le texte "A1-131" contenu sur la deuxième capture, je fais comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        For Each Otbl In DocumentWordInstance.Tables 
     
            For l = 3 To Otbl.Rows.Count Step 1
     
                If InStr(1, Otbl.Rows(l), "A1-131", vbTextCompare) Then
                    Otbl.Cell(l, 2).Range.Font.ColorIndex = wdRed
                    Otbl.Cell(l, 2).Range.Text = Otbl.Cell(l, 2).Range.Text & "#"
                End If
     
            Next l
     
     
        Next Otbl
    Par contre, ce code plante dès qu'il rencontre la ligne ayant une colonne fusionner.


    Existe-il une autre façon de parcourir un tableau en s'affranchissant du problème des fusions ?

    Parcourir mon tableau excel puis parcourir chaque tableau word pour trouver le mot recherché et ajouter "#" me semble très lourd, voyez-vous un autre moyen ?


    Bonne journée

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Anaxode Voir le message
    Bonjour,

    Il vous faut travailler avec l'objet Selection.cells pour vous affranchir des cellules fusionnées.

    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
    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
     
    Option Explicit
     
    Sub RechercheDansTableauWord(ByVal DocEnCours As Document, ByVal ChainesRecherchees As Variant)
     
    Dim CelluleEnCours As Cell
    Dim MesCellules As Cells
    Dim I As Integer, J As Integer, PositionChaine As Integer
    Dim Text1 As String, Text2 As String
     
        With DocEnCours
             For I = 1 To .Tables.Count
                 .Tables(I).Select
                 Set MesCellules = Selection.Cells
                 For Each CelluleEnCours In MesCellules
                     For J = LBound(ChainesRecherchees) To UBound(ChainesRecherchees)
                         PositionChaine = InStr(1, CelluleEnCours.Range.Text, ChainesRecherchees(J), vbTextCompare)
                         If PositionChaine > 0 Then
                            With CelluleEnCours.Range
                                 Text1 = Mid(.Text, 1, PositionChaine + Len(ChainesRecherchees(J)) - 1)
                                 Text2 = Mid(.Text, PositionChaine + Len(ChainesRecherchees(J)))
                                 .Font.ColorIndex = wdRed
                                 .Text = Text1 & "#" & Text2
                            End With
                         End If
                     Next J
                 Next CelluleEnCours
                 Set MesCellules = Nothing
             Next I
        End With
     
    End Sub
     
    Sub TestRechercheDansTableauWord()
     
    Dim DocumentWordInstance As Document
    Dim MesChainesAChercher As Variant
     
        Set DocumentWordInstance = ActiveDocument
        MesChainesAChercher = Array("A1-131", "A1-132")
        With DocumentWordInstance
            If .Tables.Count > 0 Then
               RechercheDansTableauWord DocumentWordInstance, MesChainesAChercher
            End If
        End With
        Set DocumentWordInstance = Nothing
     
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Dessinateur d'étude
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Dessinateur d'étude
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Je vous remercie pour votre réponse.

    Je vais essayer ça le plutôt possible.

    Une autre question, j'imagine que les cellules sont parcourues de gauche à droite et de haut en bas (Ligne 1 vers ligne 10)?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Anaxode Voir le message
    Une autre question, j'imagine que les cellules sont parcourues de gauche à droite et de haut en bas (Ligne 1 vers ligne 10)?
    Oui.

Discussions similaires

  1. Copier Coller avec insertion ligne, masque des lignes vides
    Par ghazalinadou dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 22/08/2017, 10h20
  2. Grand tableau avec 1ère ligne et 1ère colonne fixes
    Par miroufle dans le forum Android
    Réponses: 4
    Dernier message: 21/08/2011, 13h30
  3. tableau avec 1 ligne et 3 colonnes en javascript
    Par lediamant dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2010, 08h32
  4. [XL-2007] Extraire une valeur avec la ligne et la colonne
    Par helkøwsky dans le forum Excel
    Réponses: 6
    Dernier message: 30/04/2009, 11h42
  5. Traitement des lignes [suppression des lignes vides]
    Par turbo_chess dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2007, 09h16

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