Bonjour,
Après une recherche infructueuse sur le forum, je vous soulève mon
problème. Le fichier Word que j'utilise contient de nombreux paragraphes et
de nombreux tableaux. Mon but est de connaître l'indice du 1er tableau d'un
chapitre dont le nom est une chaîne de caractères particulière.
Dans cette optique je recherche d'abord la chaîne de caractère, supposons
qu'elle corresponde à la constante cChaineATrouver. Cela correspond au 1er
traitement de ma routine. A noter que je vérifie la longueur de la chaîne
pour éviter de récupérer la chaîne qui se trouve dans le sommaire (car
cette chaîne est censée être un titre).
Une fois ce prétraitement effectué, si la chaîne est présente dans le
document, mon idée est alors de comparer chaque paragraphe à la première
cellule de chaque tableau du document. S'il y a concordance, j'ai trouvé le
tableau recherché.
Cependant, cette méthode possède quelques inconvénients :
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 Public Sub MaFonction(ByRef oDoc as Word.Document) Dim Para as Word.Paragraph Dim ParaTrouve as Boolean Dim i, j, k as Long ' Récupération du bon chapitre ParaTrouve = False For Each Para In oDoc Then If InStr(Para.Range.Text, cChaineATrouver) Then ParaTrouve = True Exit For End If Next ' Récupération du tableau If ParaTrouve = True Then For j = i + 1 to oDoc.Paragraphs.Count - i For k = 1 to oDoc.Tables.Count If oDoc.Paragraphs(j).Range.Text = oDoc.Tables(k).Cell(1,1).Range.Text Then ' J'ai trouvé mon tableau, il a pour indice "k" j = oDoc.Paragraphs.Count - i Exit For End If Next k Next i End If
- Je ne teste que la 1ère cellule du tableau. Si elle est vide, je risque
de la confondre avec un paragraphe vide et je récupère alors un mauvais
tableau
- Le temps d'exécution lorsque le fichier possède plus de 10000 paragraphes
est beaucoup trop long
- La méthode semble quand même bien lourde...
Comment faire pour améliorer ma fonction ? Me suis-je dès le départ mal
orienté ?
En passant, j'ai aussi eu un autre problème en utilisant la propriété Find.
Si j'écris
Le document reste entièrement sélectionné et a = False
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Dim a as Boolean oDoc.Content.Select With Selection.Find .ClearFormatting .MatchWholeWord = False .MatchCase = False .Text = cChaineATrouver a = .Execute End With
Alors que si j'écris
a = True mais aucun texte n'est sélectionné. N'est-ce pas pourtant le but
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Dim a as Boolean With oDoc.Content.Find .ClearFormatting .MatchWholeWord = False .MatchCase = False .Text = cChaineATrouver a = .Execute End With
de la manoeuvre ?
Je m'excuse de la longueur de mon message, j'espère avoir été assez clair
et que vous trouverez une solution à mon problème. Merci d'avance.
Partager