Bonjour à tous

J'ai une macro Excel qui m'extrait des données (du texte et chiffres) de quelques cellules bien précises a partir d'un tableau Word vers Excel

Ce tabeau est repéré dans le fichier Word a l'aide de son titre qui est une phrase juste au dessus du tableau : "Produits logiciel",

j'ai deux types de fichiers Word :

Le premièr est comme ceci :

j'ai le titre du tableau : Produits Logiciel (cette phrase apparait une seule fois dans ce fichier Word)
Puis juste au dessous j'ai le le Tableau dans lequel l'extraction de quelques cellules se passe bien

Un autre fichier Word qui a

j'ai le titre du tableau : Produits Logiciel
Puis juste au dessous le Tableau
mais après ce tabelau vers la fin du fichier Word on retrouve encore une fois la phrase Produits Logiciel dans un paragraphe

Le problème dans ce le 2éme type de fichier, l'extraction se bloque car il trouve deux fois la phrase dans le fichier Word

Ce que je veux c'est de faire un test pour que la recherche de la phrase Produits Logiciel s'arrete a la première trouvée car c'est celle la qui se trouve au dessus du tableau a extraire

J'espèe que je me suis bien expliqué sinon n'hésiter a me poser plus de questions

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
Set rng = WDoc.Range
'Set rng = ActiveDocument.Range                         'Plage de recherche
   Do
      With rng.Find
         .ClearFormatting
         .Text = "Produits Logiciel"                   ' Texte à rechercher (se trouvant avant la table)
         .Execute
      End With
      If rng.Find.Found Then
         rng.Select
         rng.MoveStart Unit:=wdTable
         rng.Goto What:=wdGoToTable, Which:=wdGoToNext, Count:=1
 
'Selectionne le tableau trouvé pour extraire les données
    Set WTable = rng.Tables(1)
 
'********************** Os + Version *************************
   ' -- Boucle sur les fichiers
         For Each C In WTable.Range.Cells
            If InStr(1, WorksheetFunction.Clean(C), "Système d’exploitation") > 0 Then
               j = C.Row.Index + 1
               GoTo ContinueC
            End If
         Next C
ContinueC:
      i = ii
      Do
        ws.Cells(i, 2) = WorksheetFunction.Clean(WTable.Cell(j, 1).Range.Text)
        ws.Cells(i, 3) = WorksheetFunction.Clean(WTable.Cell(j, 2).Range.Text)
         j = j + 1
         i = i + 1
      Loop Until (InStr(1, WorksheetFunction.Clean(WTable.Cell(j, 1).Range.Text), "Base de données") > 0)

Merciii