kennylux
Messages postés13Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention19 janvier 2006
-
5 janv. 2006 à 10:44
kennylux
Messages postés13Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention19 janvier 2006
-
19 janv. 2006 à 14:56
Bonjour à tous,
Dans le cadre de mon travail, je suis amené à récupérer des données excel dans un document word, nayant jamais exécuté ce genre de travail, je sollicite votre aide.
Je vais essayer de vous décrire le travail à effectuer:
J'ai donc un document word déjà rédigé, je voudrais que pour chaque personnes(les noms et coordonnées sont récupérés dans le fichier excel) les données correspondant à ce nom soient insérées dans un tableau(déjà établi lui aussi). Lorsque un deuxième nom est trouvé, les données correspondant à ce nom sont récupérées dans un autre tableau identique au premier et ainsi de suite, avec au-dessus de chaque tableau, le nom de la personne, date,...
Voilà, j'espère que j'ai été clair sinon n'hésitez pas à me poser des questions.
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 5 janv. 2006 à 15:21
Bonjour et happy new year
Ce serait pas mal en effet, si tu pouvais essayer d'être un plus clair. Tu as des tableaux sur Excel et sur Word ou uniquement sur Word? Il faudrait que tu précises également comment sont présentées les données dans Excel. Tu veux présenter tes données dans Word, Ok, mais de quelle façon? Je suppose que les noms de champs (titres de colonnes)sur Excel sont les mêmes noms de champ dans Word.Un peu plus de détails, please.
kennylux
Messages postés13Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention19 janvier 2006 5 janv. 2006 à 15:46
Voici à quoi ressemble mes documents word, je dois donc récupérer les noms et les données qui correspondent à ce nom dans un fichier excel pour les insérer dans le tableau, le fichier excel est d'un type tout à fait normal(colonne, champs),les champs dans excel ne portenpas les mêmes noms, je ne peux malheureusement pas le coller ici car il contient des données que l'on ne peut pas communiquer(sous peine de sanction.
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 6 janv. 2006 à 11:09
Bonjour,
Je comprends que tu ne puisses pas communiquer les infos d'Excel mais si j'ai bien compris (j'espère), tu récupères une info sur Excel eu tu l'insère dans Word de la façon suivante: Date:champ(info) Excel Type: champ (info) Excel Habilité jusqu'au: champ (info) Excel.
Si c'est bien ça, je pense qu'il s'agit d'un publipostage à automatiser: par exemple,ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="nom du champ ou de la donnée Excel". Cette donnée sera insérée dans Date: . Ensuite Selection.MoveDown Unit:=wdLine, Count:=2 et ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:="" à insérer dans Type: . Par contre, je t'avoue que je ne comprends pas trop les instructions du type If End If. Est ce que tu veux insérer les infos sur Word à partie d'Excel selon une condition? Est-ce que par hasard tu ne pourrais pas céer un fichier Excel fictif mais ayant la même présentation?
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 9 janv. 2006 à 13:51
Bonjour,
Malheureusement, il n'y a pas encore assez d'informations. Je vais te répondre mais il y a de fortes chances pour que ne fonctionne pas parfaitement, d'autant plus que tu devras compléter cette macro. Tout d'abord, tes données sur Excel doivent être présentées sous forme d'un tableau qui va devenir ainsi une source de données. Il ne doit y avaoir aucun espace avant ce tableau. Tu fermes ton document Excel et tu ouvres ton document Word.
Tu vas dans Outils/Nouvelle macro. Tu arrêtes la macro tout de suite. tu fais Outils/macro, tu sélectionne ta macro et tu fais Exécuter paa à pas et tu colles la macro suivante si tu travailles avec Word 2003:
Sub Macro ()
'Sub insérer des données de ton document Excel qui s'appelle (nom de ton fichier)dans mon document Word actif (ouvert) grâce à un publipostage
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\Documents and Settings\Administrateur\Mes documents\Nom de ton fichier.xls", _
LinkToSource:=True, _
Connection:="", SQLStatement:="", SQLStatement1 _:="", SubType:=wdMergeSubTypeOther 'Autres éléments (en fait les champs qui se trouvent dans Excel et qui sont à insérer dans Word
Selection.MoveDown Unit:=wdLine, Count:=3 'Quand tu ouvres ton document Word, le curseur se trouve automatiquement sur la première ligne c'est-à-dire <!--[if !supportEmptyParas]--> <!--[endif]-->. Tu dois l'amener sur la ligne Date:, soit la troisième ligne. Tu dois donc descendre le curseur de trois lignes.
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"QC_2_Janvier_2005" ' Sur cette troisième ligne, tu dois insérer ton premier champ qui se trouve dans la colonne Excel. J'ai inséré QC-2 Janvier 2005 si j'ai bien compris.
Selection.MoveDown Unit:=wdLine, Count:=1 'Tu descends le curseur d'une ligne pour arriver à la ligne Type :
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"Tu dois taper ici le nom du cham souhaité, c'est-à-dire le titre de colonne Excel"
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End Sub
Sur Word 97, tu dois saisir le code suivant:
Sub Macro ()
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"\\Tu dois taper ici le chemin de ton fichier Excel\Nom de ton fichier Excel.xls", _
LinkToSource:=True,
Connection:="Feuille de calcul entière", SQLStatement:="", SQLStatement1 _
:=""
ActiveDocument.MailMerge.EditMainDocument
Selection.MoveDown Unit:=wdLine, Count:=3 'Quand tu ouvres ton document Word, le curseur se trouve automatiquement sur la première ligne c'est-à-dire <!--[if !supportEmptyParas]--> <!--[endif]-->. Tu dois l'amener sur la ligne Date:, soit la troisième ligne. Tu dois donc descendre le curseur de trois lignes.
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"QC_2_Janvier_2005" ' Sur cette troisième ligne, tu dois insérer ton premier champ qui se trouve dans la colonne Excel
Selection.MoveDown Unit:=wdLine, Count:=1 'Tu descends le curseur d'une ligne pour arriver à la ligne Type :
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"Tu dois taper ici le nom du cham souhaité, c'est-à-dire le titre de colonne Excel"
End Sub
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 12 janv. 2006 à 08:28
Bonjour,
Merci de 'indiquer le code final auquel tu est arrivé parce que comme tu l'as compris pour l'instant, il est incomplet. A propos, Selection.MoveDown Unit:=wdLine, Count:=2 et non 1 'Tu descends le curseur de 2 lignes pour arriver à la ligne Type puis qu'il y a dans ton tableau 2 sauts de ligne après Date.
kennylux
Messages postés13Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention19 janvier 2006 17 janv. 2006 à 09:23
Salut,
C'est à nouveau moi, je me suis penché sur le problème, mais n'étant pas doué pour la programmation je ne m'en sorts pas.
J'ai essayé de faire une boucle pour que à chaque fois que la cellule C(à partir de C2) n'est pas vide, il insère les données correspondants au nom se trouvant dans cette cellule, et depuis quand j'exécute la macro il n'affiche plus rien. Je te colle mon code et je te remercie d'avance pour ton aide.
Si qqun d'autre a une solution, tts vos aides sont les bienvenues, car comme vous pouvez le conatater je n'ai aucune expérience en vba.
Sub test2()
'ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\test.xls", _
LinkToSource:=True, _
Connection:="Feuille de calcul entière", SQLStatement:="", SQLStatement1 _
:=""
For Each c In Range("B10", Range("B10").End(xIDown))
If c <> "" Then
ActiveDocument.MailMerge.EditMainDocument
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
("C2")
Selection.MoveDown Unit:=wdLine, Count:=1 'Quand on ouvre le document Word, le curseur se trouve automatiquement sur la première ligne c'est-à-dire <!--[if !supportEmptyParas]--> <!--[endif]-->. il faut l'amener sur la ligne Date:, soit la troisième ligne. il faut donc descendre le curseur de trois lignes.
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"NOMS" ' Sur cette troisième ligne, il faut insérer le premier champ qui se trouve dans la colonne Excel
Selection.MoveDown Unit:=wdLine, Count:=2 'on descend le curseur d'une ligne pour arriver à la ligne Type :
ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
"B1"
c = c + 1
End If
End Sub
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 17 janv. 2006 à 12:59
Bonjour,
Je n'ai pas trop le temps de regarder en détail pour l'instant mais je peux dores et déjà tedire que ta macro ne peut pas fonctioner parce qu'il y a deux débuts de macro: en effet il y a Sub test et Private Sub. Il ne peut y avoir qu'un seul Sub en début de macro. Ensuite tu as mis
'ActiveDocument.MailMerge.MainDocumentType wdFormLetters. Or tout ce qui commence par ' est écrit automatiquement en vert et n'est pas lue par le système mais constitue simplement un commentaire pour toi ou pour tout autre utilisateur. Autrement dit, ce n'est pas un instruction et c'est facultatif.Or c'est bel et bien une instruction. Tu dois écrire 'ActiveDocument.MailMerge.MainDocumentType wdFormLetters sans l'apostrophe.
Je pense qu'il doit manquer un morceau d'instruction.
Visiblement tu bosses avec Word 97. Tu peux me le confirmer?
kennylux
Messages postés13Date d'inscriptionjeudi 5 janvier 2006StatutMembreDernière intervention19 janvier 2006 17 janv. 2006 à 13:11
Oui, c'est bien word 97.
Je te remercie encore pour tes réponses si rapides.
Quand tu auras le temps de regarder plus en détail, tiens moi aucourant, en attendant j'essaye d'avancer avec les informations que je trouve sur le net
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 17 janv. 2006 à 13:55
A propos ActiveDocument.MailMerge.MainDocumentType = wdFormLetters ne peut pas être avant Private Sub car par définition Private Sub est ta première instruction sauf si tu gardes bien Sub Test() mais alors tu supprimes bien Private Sub. Dans les deux cas ActiveDocument.MailMerge.MainDocumentType = wdFormLetters ne peut être une première instruction. Par ailleurs Worksheet s'applique à une macro Excel. Or puisque tu insères tes éléments dans Word,c'est une macro Word que tu dois saisir. Je te confirme qu'il manque un morceau. J'essaierai de voir plus en détail quand j'aurai du temps.
cs_ZANUS
Messages postés126Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 février 2007 19 janv. 2006 à 12:43
Bonjour,
C'est stupide mais je ne sais pas comment coller un tableau sur ce site. Quand je copie sur Excel et Word et colle tes tableaux ici, le quadrillage disparaît et le contenu est en vrac. Peux-tu me dire comment faire afin que je puisse te guider dans ta macro?