Recherche et selection dans un doc word

Signaler
Messages postés
63
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
4 mai 2007
-
Messages postés
27
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
19 septembre 2005
-
Bonjour,



Je voudrais réaliser une petite macro sous excel, qui va aller
parcourir un fichier .doc word, et rechercher un tableau dans ce
document, pour en copier les données, et les recoller dans une feuille
de mon tableau excel.

Seulement, je ne sais pas du tout comment je dois m'y prendre.

Je ne sais pas comment je fais pour faire une recherche dans un doc
word a partir de excel, je ne sais pas comment je fais un copier depuis
word a excel.

Est ce que je dois construire mon tableau dans le fichier word d'une
facon spécifique pour que je puisse le repérere (il peut y avoir
plusieurs tableaux dans le .Doc)....



Bref, je ne sais meme pas si c'est possible.



Pourriez vous maider SVp.



D'avance merci.



NéoPhenix

7 réponses

Messages postés
27
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
19 septembre 2005

Salut;

Le plus simple serait que ton tableau Word récupère ses données d'une base de données externe type Access ensuite tu connectes ta feuille Excel à cette base de données et tu récupères tes infos.

<-Blub->
Messages postés
63
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
4 mai 2007

Oui, mais je ne peux pas...



Les données sont entrées directement au sein d'un tableau dans le document Word...



Que faire alors ?!?!



thanks
Messages postés
27
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
19 septembre 2005

Salut;



Voilà un bout de code qui devrait t'aider (c'est ta macro à insérer dans ton document Excel,
pour qu'elle fonctionne correctement, tu dois ajouter la référence "Microsoft Word xx.x Object Library" à ton projet):



'Déclaration des variables nécessaires pour la suite
Dim docActive As Document
Dim Tableau As Table
Dim LigneTable As Cell
Dim ColonneTable As Cell
Dim Int_Tableau, Int_Ligne, Int_Colonne As Integer

'Ouvre l'application Word
Set MonWord = CreateObject("Word.Application")


'Ouvre le document Word contenant le(s) tableau(x)
MonWord.Documents.Open Filename:="D:\Temp\Test.doc"


'Affiche à l'écran le document Word
MonWord.Application.Visible = True


'Recherche de tous les tableaux existants sur le document Word
For Int_Tableau = 1 To MonWord.ActiveDocument.Tables.Count
Set Tableau = MonWord.ActiveDocument.Tables(Int_Tableau)

'Dans le tableau en cours, scrute les lignes une à une
For Int_Ligne = 1 To Tableau.Range.Rows.Count

'Dans la ligne en cours, scrute les colonnes une à une
For Int_Colonne = 1 To Tableau.Range.Columns.Count
'Affecte à une cellule de la feuille Excel la valeur récupérée dans le tableau Word
Worksheets(Int_Tableau).Cells(Int_Ligne, Int_Colonne).Value = Tableau.Cell(Int_Ligne, Int_Colonne).Range.Text


'Incrémente l'indice des colonnes
Int_NbColonnes = Int_Colonne + 1


'Passe à la colonne suivante si on ne se trouve pas à la fin des colonnes
Next


'Incrémente l'indice des lignes
Int_Ligne = Int_Ligne + 1


'Passe à la ligne suivante si on ne se trouve pas à la fin des lignes
Next


'Incrémente l'indice des tableaux
Int_Tableau = Int_Tableau + 1


'Passe au tableau suivant si on ne se trouve pas à la fin des tableaux
Next

D'après les essais que j'ai faits, le texte récupéré est à retravailler pour éliminer les caractères de formatage de texte de Word.

Voilà, A++

<-Blub->
Messages postés
63
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
4 mai 2007

Merci beaucoup Blub !!



Une ou deux petites modif dans ton code:

j'ai enlevé les

'Incrémente l'indice des lignes
Int_Ligne = Int_Ligne + 1

(Idem pour colonne et tableau)
car le NEXT me fait déjà l'incrementation de la ligne. Et comme j'ai des données à chaque ligne, il ne faut pas que j'en saute.

En tt cas, merci beaucoup !!!

Apres....j'avoue que si quelqu'un sais faire un traitement sur un tableau pour virer les caractere indesirables....je suis hyper preneur !!!
Messages postés
27
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
19 septembre 2005

Bah oui en fait...désolé pour les doubles incrémentations!!



Le moyen pour le traitement des chaînes récupérées, c'est peut-être de trouver un autre format de récupération sous Word, genre un .Value au lieu d'un .Text, je sais pas trop. Essaye leur aide...



<-Blub->
Messages postés
63
Date d'inscription
samedi 9 avril 2005
Statut
Membre
Dernière intervention
4 mai 2007

En fait....

j'ai toujours un petit ptroblème....

Disons que la première cellule de mon tableau (sous word) est en fait
une cellule fusionnée qui fait la taille de toutes les autres cellules
du tableau.

En gros, a la premiere ligne, j'ai que une cellule, et aux autres, j'en ai 4.



n'est il pas possible de modifier le

For Int_Colonne = 1 To Tableau.Range.Columns.Count par un compteur qui serait adapté a chaque lignes....je ne vois pas comment
le savez vous ?

merci
Messages postés
27
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
19 septembre 2005

Si toutes les premières lignes de tous tes tableaux ne sont que des titres et ne t'intéressent pas, saute-les en faisant commencer ton compteur Int_Ligne à 2.



Si tous tes tableaux ne sont pas identiques, teste chacune des lignes en faisant :


...

'Dans le tableau en cours, scrute les lignes une à une
For Int_Ligne = 1 To Tableau.Range.Rows.Count

'Teste la ligne en cours pour savoir si elle comporte plus d'une colonne
If Tableau.Range.Columns.Count=1 Then
'Dans la ligne en cours, scrute les colonnes une à une
For Int_Colonne = 1 To Tableau.Range.Columns.Count
'Affecte à une cellule de la feuille Excel la valeur récupérée dans le tableau Word
Worksheets(Int_Tableau).Cells(Int_Ligne, Int_Colonne).Value = Tableau.Cell(Int_Ligne, Int_Colonne).Range.Text

...

<-Blub->