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.