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 dexploitation") > 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![]()
Partager