vbs et manipulation de word - VB/VBA/VBS - Programmation
Marsh Posté le 29-06-2005 à 21:41:22
Bonjour, 
 
Essaye éventuellement ceci : 
 
Const wdReplaceAll = 2 
path = "C:\MonDocument.doc" 
Set objWord = CreateObject("Word.Application" )  
objWord.Documents.Open(path)  
objWord.Visible = True  
With objWord.Selection.Find  
   .ClearFormatting 
   .Text = "Document2"  
   With .Replacement  
      .ClearFormatting 
      .Text = "yessssssss"  
   End With  
   .Execute , , , , , , , , , , wdReplaceAll 
End With 
 
 
pelw
Marsh Posté le 30-06-2005 à 11:07:15
| pelw a écrit : Bonjour,  | 
 
 
 
Donne moi ton adresse, il faut que je vienne chez toi te faire un bisou, tu m'as sauvé alors que j'etais au bord du gouffre, merci beaucouuuuuuuuuuuup!!!  
Honnetement quand jai vu ta réponse j'y ai pas cru en plus. 
Poue etre un peu plus sérieux, pourrais tu m'expliquer cette ligne  
.Execute , , , , , , , , , , wdReplaceAll  
je ne comprends pas cette hidtoire de virgule!!! 
Et aussi pourquoi tu remplaces wdreplaceall par 2??? 
 
En tous les cas merci beaucoup, j'aurais jamais trouvé seul!! 
 
Marsh Posté le 30-06-2005 à 16:37:33
| pelw a écrit : Bonjour,  | 
 
 
 
J'ai fini par comprendre tout seul qu'en fait les "," definissent des champs vide et que wdReplaceAll est le dernier parametres et qu'en vbs il faut mettre "2" pour "replace all" 
Bon alors maintenant j'ai avancé grace a toi mais je bute sur exactement le meme probleme, sauf que la c'est avec la boite de dialogue "enregistrer sous" que je veux afficher a l'ouverture de mon word 
j'ai trouver ce script : 
Dim dlg As Word.Dialog 
    dlg = ThisApplication.Dialogs.Item( _ 
        Word.WdWordDialog.wdDialogFileNew) 
    dlg.Show() 
 
Mais encore une fois ca bloque sur les parametres de Item que vbs ne reconnait pas, j'imgine qu'il faut le remplacer par un autre parametre (adapté au langage vbs), mais je ne le trouve pas sur le web, tu aurais un lien pour que j'arrete de t'embeter, ou juste une solution pour passer ce nouveau probleme? 
ps : ceci est censé affiché la boite de dialogue nouveau document mais bon j'imagine que c'est la meme chose pour "SaveAs"
Marsh Posté le 30-06-2005 à 23:43:13
Bonjour, 
 
Essaye ceci : 
 
Const wdDialogFileSaveAs = 84 
path = "C:\MonDocument.doc"  
Set objWord = CreateObject("Word.Application" )   
objWord.Documents.Open(path)   
objWord.Visible = True 
objWord.Dialogs(wdDialogFileSaveAs).Show 
 
 
pelw
Marsh Posté le 01-07-2005 à 11:08:46
| pelw a écrit : Bonjour,  | 
 
 
J'applaudis encore des deux mains ca marche impecable. 
J'ai encore pas mal de chose a faire avec word et je ne voudrais pas trop te deranger, j'imagine que le "84" n'etais pas inscrit au fin fond de ta memoire, donc si tes sources ne sont pas confidentiels j'aimerais bien les voir, surtout le tableau qui convertit les commandes macro en vbscript. 
En tous les cas merci beaucoup pour les aides que tu m'as apporté jusqu'ici
Marsh Posté le 04-07-2005 à 20:26:34
Bonsoir, 
 
Tu pourras trouver toutes les constantes Word dans... Word. Pour cela, procéder comme suit : 
 
. Ouvrir Word 
. Faire Alt+F11 pour aller dans l'éditeur VBA 
. Faire F2 pour afficher l'explorateur d'objets 
. Dans la liste de droite (celle intitulée Membres de '<globales>') tu trouveras, entre autres choses, toutes les constantes Word 
. En sélectionnant p.ex. la constante wdDialogFileSaveAs, sa valeur (84) apparaîtra dans la zone de texte, sous la liste 
 
Si tu as d'autres questions, n'hésite pas. 
 
 
pelw
Marsh Posté le 05-07-2005 à 17:03:15
Tu m'as dit de ne pas hesiter alors je vais oser te demander encore quelque chose du meme type : 
 
Il faut que maintenant j'arrive a ouvrir entete et pied page (pour y remplacer du text ensuite) 
 
Mais ce coup si j'ai pas trouver de script model qui est pres de matcher, je sais juste qu'il faut simuler les actions "view" puis "header and footer" mais je ne vois pas comment faire.   
 
Comme je commence a connaitre tes capacités, je te remercie par avance de ta reponse  
 
 
Cordialement julien
Marsh Posté le 05-07-2005 à 19:04:07
Bonjour, 
 
Peut-être comme ceci : 
 
| Code : 
 | 
 
 
pelw
Marsh Posté le 06-07-2005 à 11:55:33
| pelw a écrit : Bonjour,  
   | 
 
 
 
Salut merci encore ca marche bien, j'ai fait legerement autrement car je devais modifier plusieurs champ qui sont dans un tableau. Voici comment j'ai fait, ca tourne nikel : 
 
| pelw a écrit :   | 
 
 
A bientot pour d'autres questions  
 
Marsh Posté le 12-07-2005 à 15:14:58
bonjour il y avait longtemps car j'ai du bosser sur autre chose mais la je regalere sur la meme chose... 
J'ai essayer de suivre tes instructions mais je me perds tellement c vaste!!! 
 
Je cherche a changr toujorus du texte plus dans les entetes mais dans les "text box". Ce sont les box que tu as dans la barre d'outils "dessin" que tu peux deplacer n'importe ou dans la page... 
 
Encore plus vicieux je vient d'aprendre que tu pouvais faire des textbox dans les pied ou en tete de page qui ne sont pas accessible sans entrer dans ceux ci... Enfin maintenant que j'arrive a ouvrir les entete ca devrait pas poser de probleme.
Marsh Posté le 12-07-2005 à 15:33:24
| pelw a écrit : Bonjour,  
   | 
 
 
 
apparement ca serai celui la 
Const wdDialogFormatDrawingObjectTabTextbox = 1200005 (&H124F85) 
    Member of Word.WdWordDialogTab 
 
mais comment ca marche???   
 
Marsh Posté le 13-07-2005 à 21:48:39
Bonjour, 
 
Apparemment la méthode traditionnelle de "rechercher/remplacer" ne fonctionne pas pour les "text box", lorsqu'elle est lancée depuis VBS. Voici donc une autre façon de faire : 
 
| Code : 
 | 
 
 
pelw 
Marsh Posté le 15-07-2005 à 11:46:27
| pelw a écrit : Bonjour,  
   | 
 
 
 
J'ai fait des testes avec des "titi" un peu partout dans mon word.  
Dans le document meme il ne remplace pas le "tit" mais c'est normal au vu de ton code et c pas grave vu que tu m'a deja dit comment faire. 
Pareil pour les entetes et pied de page mais ca aussi ca m'a l'air d'etre normal. 
En fait il devrait uniquement remplacer le text dans les textbox qui appartiennent ou pas a des entetes et pied de page. 
Je constate que le text est bien remplacer lorsqu'il appartient a une entete ou pied de page, mais pas lorsque la zone de texte est independante. Etonnant!!! 
Au vu du code je dirais que le probleme se situe dans ce case : 
Case msoTextBox 
  
   With objShape.TextFrame.TextRange  
      .Text = Replace(.Text, "titi", "toto" )  
   End With  
 
J'avoue etre un peu semer par ton niveau et je ne comprends pas trop ce qu'est "objshape" vu que tu ne le defini pas... 
 
Je vais chercher de mon coté, essayé de trouver une solution mais j'espere que tes lumieres reviendront bientot vers ce forum. 
 
Merci pelw 
Marsh Posté le 15-07-2005 à 13:30:01
Voici mon code complet qui permet d'ouvrir word et remplacer tous les champs comptenu dans un tableau pour d'aurte champs comptenu dans une autre colonne de ce meme tableau : 
 
Set objWord = CreateObject("Word.Application" ) 
 	Const wdSeekMainDocument = 0  
 	Const wdPrintView = 3  
 	Const wdSeekCurrentPageHeader = 9  
 	Const wdSeekCurrentPageFooter = 10  
 	Const wdDialogFileSaveAs = 84  
 	Const wdReplaceAll = 2 
 	Const msoCanvas = 20  
 	Const msoTextBox = 17  
 	Const wdHeaderFooterPrimary = 1  
''''''''''''''''''''''''''traitement des documents un par un 
 	For j=0 to compteur -1 
   document_a_sauvegarder = tab_a_sauvegarder(j) 
''''''''''''''''''en fait ici j'ouvre un doc vbs qui stocks des varaibles, je l'execute pour remplir ses variables (mais pas utile pour notre cas) 
   r = path_ville & "\" & fiche_a_generer & ".vbs" 
   Set f=fso.OpenTextFile(r,1) 
   Do while f.AtEndOfStream = false 
   	lecture_vbs = lecture_vbs & f.ReadLine & vbcrlf 
   loop 
   lecture_vbs = modiftextdoc(lecture_vbs) 
   Execute lecture_vbs 
   Set f= Nothing 
   Set doc = objWord.Documents.Add(path_doc & "\" & tab_a_generer(j) & ".doc" ) 
   objWord.Visible = true 
   For i=0 to UBound(tableau) 
''''''''''''''''''''les varibles cotenues dans le tableau sont mise dans tempo 
   	Execute "tempo=" & tableau(i,2) 
   	tempo = modiftextdoc(tempo) 
''''''''''''''''''ici rempacement dans le text word (ca amrche) 
   	With objWord.Selection.Find 
     .ClearFormatting() 
            .Text = "@" & tableau(i,0) & "@" 
            With .Replacement 
             .ClearFormatting() 
             .Text = tempo 
           	End With 
     .Execute , , , , , , , , , , wdReplaceAll  
   	End With 
   Next 
 ''''''''''''''''''remplacement du text dans les entetes et pied de pages (ca marche) 
   With objWord.ActiveWindow.ActivePane.View  
   .Type = wdPrintView  
   .SeekView = wdSeekCurrentPageHeader  
   For i=0 to UBound(tableau) 
   	Execute "tempo=" & tableau(i,2) 
   	tempo = modiftextdoc(tempo) 
   	With objword.Selection.Find 
     .ClearFormatting() 
     .Text = "@" & tableau(i,0) & "@" 
     With .Replacement 
             .ClearFormatting() 
             .Text = tempo 
            End With 
            .Execute , , , , , , , , , , wdReplaceAll  
   	End With   
   Next 
   .SeekView = wdSeekCurrentPageFooter 
   For i=0 to UBound(tableau) 
   	Execute "tempo=" & tableau(i,2) 
   	tempo = modiftextdoc(tempo) 
   	With objword.Selection.Find 
     .ClearFormatting() 
     .Text = "@" & tableau(i,0) & "@" 
     With .Replacement 
             .ClearFormatting() 
             .Text = tempo 
            End With 
            .Execute , , , , , , , , , , wdReplaceAll 
   	End With 
   Next 
   .SeekView = wdSeekMainDocument  
   End With 
   For i=0 to UBound(tableau) 
   	Execute "tempo=" & tableau(i,2) 
   	tempo = modiftextdoc(tempo) 
   Next 
'''''''''''''''remplacement du text dans les textbox cotenu dans les entetes et pied (ca marche que pour les entetes) 
   For Each objShape In objWord.ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes 
   	For i=0 to UBound(tableau) 
     Execute "tempo=" & tableau(i,2) 
     tempo = modiftextdoc(tempo) 
     Select Case objShape.Type  
     Case msoCanvas  
     MsgBox "canvas" 
     	For Each objShItm In objShape.CanvasItems  
       If objShItm.Type = msoTextBox Then  
       	With objShItm.TextFrame.TextRange  
           .Text = Replace(.Text,"@" & tableau(i,0) & "@", tempo)  
       	End With  
       End If  
     	Next 
     Case msoTextBox  
     MsgBox "textbox" 
     	With objShape.TextFrame.TextRange  
       .Text = Replace(.Text,"@" & tableau(i,0) & "@", tempo)  
     	End With  
     End Select 
   	Next 
   Next 
   fiche_a_generer = fso.GetBaseName(fiche_a_generer) 
   doc.SaveAs choix_dossier & "\" & document_a_sauvegarder & ".doc" 
   doc.Close 
 	Next 
 	objword.visible=true 
 	objWord.Quit 
 	Set objWord = Nothing 
 
 
Alors, j'ai pas mis le remplacement dans les textbox directement car ca marche pas. 
J'ai laissé msocanvas meme si je ne sais pas quel option woes il s'agit...  
 
J'espere que tu pourras m'aider parce que je bloque pour le spied de page -> textbox 
et textbox direct... 
Merci
Marsh Posté le 18-07-2005 à 12:40:27
je suis contient que ca demande du temps mais j'aurai vraiment besoin de tes lumieres pelw. 
J'arrive pas a avancer
Marsh Posté le 29-06-2005 à 16:00:53
Bonjour, j'essai a partir d'un fichier vbs de manipuler word. j'arrive a ouvrir word sans probleme mais le probleme se situe au niveau du remplacement de text. j'ai trouver le script suivant sur msdn
objWord.documents.Open(path)
objWord.Visible = true
With objWord.Selection.Find
.ClearFormatting()
.Text = "Document2"
With .Replacement
.ClearFormatting()
.Text = "yessssssss"
End With
.Execute(Replace:=Word.WdReplace.wdReplaceAll)
End With
j'ai defini mon objword au debut du programme :
Set objWord = CreateObject("Word.Application" )
Le probleme se situe a l'execution du vbs, il me genere une erreur sur la ligne
.Execute(Replace:=Word.WdReplace.wdReplaceAll)
Apparement vbs n'aime pas le ":=" qui est spécifique au macro, il me dit qu'il manque une " )" lorsque je lance le vbs.
Si quelqu'un a une idée pour me sortir de se petrin merci par avance de la réponse.