Probleme controle Word via Excel

Probleme controle Word via Excel - VB/VBA/VBS - Programmation

Marsh Posté le 27-08-2008 à 16:12:54    

Bonjour
 
je souhaiterai pouvoir controler un Objet dans deux fonctions differentes:
 
 

Code :
  1. Call Wd
  2. Call FillWord ( ?????)
  3. Function Wd() As Object
  4. Set Wd = New Word.Application
  5. Wd.Visible = True
  6. Wd.Documents.Open Filename:="S:\OPTION\TRS Template.doc" ' open template
  7. Wd.Selection.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=10 'go to line10
  8. End Function


 
 
je souhaiterai que la fonction FillWord permette d ecrire une phrase dans l'objet cree par la fonction Wd
 
 
 
merci de votre aide
 

Reply

Marsh Posté le 27-08-2008 à 16:12:54   

Reply

Marsh Posté le 27-08-2008 à 17:00:25    

up

Reply

Marsh Posté le 28-08-2008 à 00:30:31    

1) Erreur sur la ligne 1. "Call wd" n'est pas bon en soit avec une fonction qui rend donc le fichier word
 
2) La fonction FillWord (et je suppose que ça a plutôt l'air de devoir être un "sub" ) est appelée par comment?
 
sinon un truc du style

Code :
  1. Dim word_obj as Word.Application
  2. Set word_obj = wd()
  3. Call FillWord(wd,"totototo" )
  4. Sub FillWord(wd as Word.Application, msg as string)
  5. wd.selection.range.insertbefore(msg)
  6. End Sub


 
Je ne suis pas expert en VBA word, donc je ne suis pas sur que insertbefore soit la meilleur méthode, mais ça doit marcher

Reply

Marsh Posté le 28-08-2008 à 09:22:27    

bon, je n ai pas ete assez clair:
 
ce que je veux faire exactement
 
-Appeler une fonction qui ouvre une session word et qui ouvre le fichier C:\fichier.doc
-Appeler une fonction qui modifie le contenu de fichier.doc
-Sauver le nouveau fichier cree sous le nom: C:\fichierNEW.doc
 
En gros, je n arrive pas a recuperer la session word ouverte lors de la premiere fonction. Je sais comment faire le reste.

Reply

Marsh Posté le 28-08-2008 à 16:00:13    

up

Reply

Marsh Posté le 28-08-2008 à 19:20:37    

up

Reply

Marsh Posté le 29-08-2008 à 00:52:08    

Le code que j'ai fourni ne t'aide en rien?
 
Sinon, je n'ai toujours pas compris ce que tu appelles "appeler une fonction" : qui (ou quoi) appelle la(es) fonction(s) en question

Reply

Marsh Posté le 29-08-2008 à 08:50:31    

dreameddeath a écrit :

Le code que j'ai fourni ne t'aide en rien?
 
Sinon, je n'ai toujours pas compris ce que tu appelles "appeler une fonction" : qui (ou quoi) appelle la(es) fonction(s) en question


 
Ben, avoir une procedure principale qui lance les fonctions en utilisant: Call Fonction1

Reply

Marsh Posté le 29-08-2008 à 13:57:02    

up

Reply

Marsh Posté le 30-08-2008 à 15:56:27    

up

Reply

Marsh Posté le 30-08-2008 à 15:56:27   

Reply

Marsh Posté le 31-08-2008 à 13:05:06    

up

Reply

Marsh Posté le 31-08-2008 à 14:28:49    

+1 avec dreameddeath
 
faudrait peut être utilise
 

Code :
  1. Public wd As Application


 
et mets tout tes codes pour y voir plus clair


Message édité par 86vomito33 le 31-08-2008 à 14:29:02
Reply

Marsh Posté le 01-09-2008 à 01:16:03    

Code :
  1. Sub ExportPayer()
  2. Call CopyExcel
  3. Call PasteExcel_Sheets_P_vs_R
  4. Call Doc_Payer
  5. Call PrintPDF(Wd)
  6. End Sub
  7. Sub CopyExcel()
  8. Sheets("TRS" ).Select
  9. Range("A1:B45" ).Select
  10. Selection.Copy
  11. End Sub
  12. Sub PasteExcel_Sheets_P_vs_R()
  13. Sheets("P vs R" ).Select
  14. Range("A1" ).Select
  15. Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  16. Sheets("P vs R" ).Select
  17. Range("A1:B45" ).Select
  18. Selection.Copy
  19. Sheets("TRS" ).Activate
  20. End Sub
  21. Sub Doc_Payer()
  22. Dim Wd As Object
  23. Set Wd = New Word.Application
  24. Wd.Visible = True
  25. Set DocWord = Wd.Documents.Open("C:\Documents and Settings\Administrateur\Mes documents\TRS\TRS_Template.doc", ReadOnly:=True)
  26. ' Fermeture de Word 'Wd.Application.Quit
  27. Wd.Selection.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=10, Name:="" 'go to line10
  28. Wd.Selection.Paste
  29. 'Wd.ActiveDocument.SaveAs Filename:=Get_Path & "\" & "LCM TC TRS " & Sheets("TRS" ).Range("Bloomberg_ticker" ) & Duration & " [" & _
  30. SNP & " vs " & SNR & "]" & ".doc"
  31. Wd.ActiveDocument.SaveAs Filename:="C:\Documents and Settings\Administrateur\Mes documents\TRS" & "\" & "LCM TC TRS " & Sheets("TRS" ).Range("Bloomberg_ticker" ) & Duration & " [" & _
  32. SNP & " vs " & SNR & "]" & ".doc"
  33. End Sub
  34. Sub PrintIT(Wd As Object)
  35.     ActivePrinter = "Brother HL-2030 series"
  36.     Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _
  37.         wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
  38.         ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
  39.         False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
  40.         PrintZoomPaperHeight:=0
  41. End Sub


 
 
En gros, je veux une fonction PrintIT pouvant utiliser l'application word crée précedemment
 
merci de votre aide


Message édité par Moundir le 01-09-2008 à 01:23:46
Reply

Marsh Posté le 01-09-2008 à 09:59:23    

quest ce que cela donne comme ca ?
 
modifie les textes en rouge
et a mon avis la ligne 27 n'est pas bonne
 

Code :
  1. Public wd As Application
  2. Sub ExportPayer()
  3. Call CopyPasteExcel_Sheets_P_vs_R
  4. Call Doc_Payer
  5. Call PrintPDF(wd)
  6. End Sub
  7. Sub CopyPasteExcel_Sheets_P_vs_R()
  8. Sheets("TRS" ).Range("A1:B45" ).Copy (Sheets("P vs R" ).Range("A1" ))
  9. Sheets("P vs R" ).Select
  10. Range("A1:B45" ).Select
  11. Selection.Copy
  12. Sheets("TRS" ).Activate
  13. End Sub
  14. Sub Doc_Payer()
  15. Dim wd As Object
  16. Set wd = CreateObject("Word.Application" )
  17. wd.Visible = True
  18. Set DocWord = wd.Documents.Open("C:\test\TRS_Template.doc", ReadOnly:=True)
  19. ' Fermeture de Word 'Wd.Application.Quit
  20. wd.Selection.GoTo What:=wdGoToLine, Which:=wdGoToFirst, Count:=10, Name:="" 'go to line10
  21. wd.Selection.Paste
  22. 'Wd.ActiveDocument.SaveAs Filename:=Get_Path & "\" & "LCM TC TRS " & Sheets("TRS" ).Range("Bloomberg_ticker" ) & Duration & " [" & _
  23. SNP & " vs " & SNR & "]" & ".doc"
  24. wd.ActiveDocument.SaveAs Filename:="C:\test\TRS" & "\" & "LCM TC TRS " & Sheets("TRS" ).Range("Bloomberg_ticker" ) & Duration & " [" & snp & " vs " & snr & "]" & ".doc"
  25. End Sub
  26. Sub PrintPDF(wd As Object)
  27.     ActivePrinter = "Brother HL-2030 series"
  28.     Application.PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
  29.         wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
  30.         ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
  31.         False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
  32.         PrintZoomPaperHeight:=0
  33. End Sub


Message édité par 86vomito33 le 01-09-2008 à 10:03:38
Reply

Marsh Posté le 01-09-2008 à 11:28:13    

Non, ça marche très bien.
 
Le seul truc que je veux, c'est d'utiliser Wd dans la fonction PrintPDF

Reply

Marsh Posté le 02-09-2008 à 16:48:22    

Simple alors  
 

Code :
  1. Sub PrintPDF(wd As Word.Application)
  2.     wd.ActivePrinter = "Brother HL-2030 series"
  3.     wd.PrintOut Filename:="", Range:=wdPrintAllDocument, Item:= _
  4.         wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _
  5.         ManualDuplexPrint:=False, Collate:=True, Background:=True, PrintToFile:= _
  6.         False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _
  7.         PrintZoomPaperHeight:=0
  8. End Sub


 
ça devrait largement suffire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed