[VB] Modifier les propriétés d'un document word depuis appli vb

Modifier les propriétés d'un document word depuis appli vb [VB] - VB/VBA/VBS - Programmation

Marsh Posté le 10-09-2003 à 15:06:45    

Voilà, je souffre depuis hier pour faire une chose aussi ridicule, aussi demande-je votre aide :'(
 
mon programme est simple (sic). il prend des infos de l'utilisateur, puis créé une arborescence de dossiers/fichiers. Les documents word (modèles) ont des propriétés personnalisées qu'il faudra que je modifie après la création.
 
Donc le point sensible, j'ai réussis à copier le fichier word, mais il faut que j'accède au document, puis aux propriétés. J'ai essayé plusieurs techniques après des recherches laborieuses (pas d'aide ni de bouquins au boulot  :pfff: ). Voici ce que cela donne:
 

Code :
  1. Private Sub cmdGenerer_Click()
  2.   Dim Word_Application As Word.Application
  3.   Set Word_Application = New Word.Application
  4.   Dim Word_Documents As Word.Documents
  5.   [...]
  6.   FileCopy "file"
  7.   Set Word_Documents = Word_Application.Documents
  8.   Word_Documents.Open (file)
  9.   Word_Documents.Close
  10.   [...]
  11.   Word_Application.Quit
  12.   Set Word_Application = Nothing
  13.   diaGeneration.Show vbModal
  14.   [...]
  15. End Sub


ca c'est ok, ca fonctionne.
Et maintenant je n'arrive pas à trouver ce que je dois écrire pour accéder aux propriétés. j'ai ce code provenant d'un script vba pour word:
ActiveDocument.BuiltInDocumentProperties.Item("xxx" ) = "test"
mais je ne sais pas comment l'utiliser et je désespère.
 
merci pour votre future aide :'(

Reply

Marsh Posté le 10-09-2003 à 15:06:45   

Reply

Marsh Posté le 10-09-2003 à 15:44:49    

Code :
  1. Word_Documents.ActiveDocument.BuiltInDocumentProperties.Item("xxx" ) = "test"


 
?

Reply

Marsh Posté le 10-09-2003 à 15:45:49    

drasche a écrit :

Code :
  1. Word_Documents.ActiveDocument.BuiltInDocumentProperties.Item("xxx" ) = "test"


 
?


j'essaye ca demain et je te redis :'(

Reply

Marsh Posté le 11-09-2003 à 08:18:50    

ca me fait une erreur sur ".ActiveDocument" avec "method or data member not found" :'(

Reply

Marsh Posté le 11-09-2003 à 09:29:27    

Word_Documents(1).BuiltInDocumentProperties.Item("xxx" ) = "test"


Message édité par Poipoi le 11-09-2003 à 09:30:42

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 09:31:58    

ou
 

Word_Application.ActiveDocument.BuiltInDocumentProperties.Item("xxx" ) = "test"


 
?
 
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 09:38:38    

Poipoi a écrit :

ou

Word_Application.ActiveDocument.BuiltInDocumentProperties.Item("xxx" ) = "test"




haaaaaaaaaaannn... je me suis trompée d'objet dès le début!!
je vais essayer tout ca et je redonne des nouvelles

Reply

Marsh Posté le 11-09-2003 à 10:57:42    

alors effectivement, je m'étais trompée d'objet, et ca marche (presque).
 
Mon problème actuel, c'est que j'arrive à modifier une propriété "par défaut" (ex: title, author, etc), mais je n'arrive pas à modifier une propriété "custom".
 
ca marche:
Word_Application.ActiveDocument.BuiltInDocumentProperties.Item("Title" ) = "Montitre"
 
marche pas:
Word_Application.ActiveDocument.CustomDocumentProperties.Item("xxx" ).Value = "test"
 
j'ai également essayé sans le .value, mais rien à faire, il n'update pas la propriété concernée.
 
Qqun a une idée?

Reply

Marsh Posté le 11-09-2003 à 11:23:00    

CustomDocumentProperties, propriété
 
Renvoie une collection DocumentProperties qui représente toutes les propriétés personnalisées du document spécifié. En lecture seule.
Pour plus d'informations sur le renvoi d'un seul membre d'une collection, consultez Renvoi d'un objet à partir d'une collection.


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 11:24:42    

Poipoi a écrit :

CustomDocumentProperties, propriété
Renvoie une collection DocumentProperties qui représente toutes les propriétés personnalisées du document spécifié. En lecture seule.
Pour plus d'informations sur le renvoi d'un seul membre d'une collection, consultez Renvoi d'un objet à partir d'une collection.


source?
merci :jap:
 
ajout d'un collègue: avec vba pour word ca fonctionne, mais à travers vb rien à faire :/


Message édité par urd-sama le 11-09-2003 à 11:25:50
Reply

Marsh Posté le 11-09-2003 à 11:24:42   

Reply

Marsh Posté le 11-09-2003 à 11:25:03    

Cet exemple montre comment insérer à la fin du document actif une liste de propriétés prédéfinies personnalisées.
 
Set myRange = ActiveDocument.Content
myRange.Collapse Direction:=wdCollapseEnd
For Each prop In ActiveDocument.CustomDocumentProperties
    With myRange
        .InsertParagraphAfter
        .InsertAfter prop.Name & "= "
        .InsertAfter prop.Value
    End With
Next
 
Cet exemple montre comment ajouter à Ventes.doc une propriété prédéfinie personnalisée.
 
thename = InputBox("Veuillez taper votre nom", "Nom" )
Documents("Ventes.doc " ).CustomDocumentProperties.Add _na
    Name:="VotreNom", LinkToContent:=False, Value:=thename, _
        Type:=msoPropertyTypeString


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 11:25:33    

Urd-sama a écrit :


source?
merci :jap:


L'aide...


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 11:27:11    

voir mon edit :/

Reply

Marsh Posté le 11-09-2003 à 11:29:30    

Tiré de l'aide fournie par VB6 (j'C po où il va la chercher)
C bien précisé que C en lecture seule
si tu veux la modif il doit y avoir moyen de la virer et d'en rajouter une (cf exemple)


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 11:30:59    

okay je vais matter tout ca merci
(au fait je fais pas la faignasse pour l'aide, mais je l'ai tout simplement pas sur mon vb6  :cry: )

Reply

Marsh Posté le 11-09-2003 à 11:33:35    

au pire tu peux regarder sur http://msdn.microsoft.com/ (pour peu que tu maîtrises l'anglais évidemment)

Reply

Marsh Posté le 11-09-2003 à 11:34:22    

Urd-sama a écrit :

okay je vais matter tout ca merci
(au fait je fais pas la faignasse pour l'aide, mais je l'ai tout simplement pas sur mon vb6  :cry: )


t'as pas de CD d'office ?
 
on peut pas bosser correctement sans l'aide en ligne  :o


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 11:36:03    

merci :'(

Reply

Marsh Posté le 11-09-2003 à 11:42:13    


ca dit ca:
ActiveDocument.CustomDocumentProperties("Client" ).Value="John Smith"
 
et j'ai effectivement rajouter l'objet devant, et c'est pas ok.
 
mais vous casser pas, je vais étudier ceci à mon retour au boulot demain:
thename = InputBox("Please type your name", "Name" )
Documents("Sales.doc" ).CustomDocumentProperties.Add _
    Name:="YourName", LinkToContent:=False, Value:=thename, _
        Type:=msoPropertyTypeString
je pense que ca doit être la bonne direction


Message édité par urd-sama le 11-09-2003 à 11:42:25
Reply

Marsh Posté le 11-09-2003 à 11:44:41    

Urd-sama a écrit :

alors effectivement, je m'étais trompée d'objet, et ca marche (presque).
 
Mon problème actuel, c'est que j'arrive à modifier une propriété "par défaut" (ex: title, author, etc), mais je n'arrive pas à modifier une propriété "custom".
 
ca marche:
Word_Application.ActiveDocument.BuiltInDocumentProperties.Item("Title" ) = "Montitre"
 
marche pas:
Word_Application.ActiveDocument.CustomDocumentProperties.Item("xxx" ).Value = "test"
 
j'ai également essayé sans le .value, mais rien à faire, il n'update pas la propriété concernée.
 
Qqun a une idée?


ça met koi comme erreur ?
pas d'erreur mais pas de changement ?


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 11-09-2003 à 13:13:25    

Pendant que j'y pense, tu devrais essayer la notation hongroise, c'est bieng :o
 
ça consiste à préfixer (en minuscules) le nom de toute variable par un acronyme représentant le type de ta variable (b pour booléen, s pour single, d pour double, s ou str pour string, obj pour objet, ...). Des fois même il y a un acronyme pour les objets de type courant genre rst pour Recordset. Pour le reste, essayer de faire court, pas employer d'underscore, et mettre une majuscule au début de chaque mot (abrégé si possible) qui constitue la variable.
 
Exemple: Word_Application deviendrait objWordApp. Ca limite aussi la confusion avec le fait que l'underscore est utilisé pour les noms de fonctions répondant aux events (ex: Form_Load).
 
Perso, l'expérience aidant, je limite chaque mot à 3 lettres, et je me suis constitué un dictionnaire de données. Genre pour la notion de document, j'utilise l'acronyme "doc", etc etc...  J'utilise surtout ça dans mes bases de données pour éviter les noms à rallonge :D
 
ooops chuis parti dans mon trip là, désolé :o

Reply

Marsh Posté le 12-09-2003 à 08:21:23    

je reprends tout ca et je teste.
drasche> rassure-toi, d'habitude je fais comme ca, mais là je reprends des exemples et je copie bêtement ;)

Reply

Marsh Posté le 12-09-2003 à 08:43:44    

je suis en train de reprendre ceci:
thename = InputBox("Veuillez taper votre nom", "Nom" )
Documents("Ventes.doc " ).CustomDocumentProperties.Add _na
    Name:="VotreNom", LinkToContent:=False, Value:=thename, _
        Type:=msoPropertyTypeString
 
 
dans cette optique, j'ai déjà voulu afficher la valeur d'une de mes propriétés:
MsgBox Word_Documents("a:/document.dot" ).CustomDocumentProperties.Item("xxx" ).Value
 
j'ai beau essayer toutes les maniclettes, il me met toujours "nom de fichier incorrect". Et d'autre part, c'est bien l'objet document et non application que je dois utiliser?
 
voilà, ma semaine de congé de la semaine prochaine va dépendre de ce truc, alors je retourne m'y coller :'(

Reply

Marsh Posté le 12-09-2003 à 09:15:56    

trop malade pour t'aider


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 12-09-2003 à 09:21:10    

Poipoi a écrit :

trop malade pour t'aider


bon rétablissement :'(

Reply

Marsh Posté le 12-09-2003 à 09:23:40    

Urd-sama a écrit :


bon rétablissement :'(


C l'histoire d'une journée  :ange:  
 
put1 pk je suis au taf  :cry:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 12-09-2003 à 12:08:49    

Urd-sama a écrit :

je suis en train de reprendre ceci:
thename = InputBox("Veuillez taper votre nom", "Nom" )
Documents("Ventes.doc " ).CustomDocumentProperties.Add _na
    Name:="VotreNom", LinkToContent:=False, Value:=thename, _
        Type:=msoPropertyTypeString
 
 
dans cette optique, j'ai déjà voulu afficher la valeur d'une de mes propriétés:
MsgBox Word_Documents("a:/document.dot" ).CustomDocumentProperties.Item("xxx" ).Value
 
j'ai beau essayer toutes les maniclettes, il me met toujours "nom de fichier incorrect". Et d'autre part, c'est bien l'objet document et non application que je dois utiliser?
 
voilà, ma semaine de congé de la semaine prochaine va dépendre de ce truc, alors je retourne m'y coller :'(
 


Il faut que le document soit ouvert
oWordApp.Open("MyDoc.doc" )
par exemple
 
 :hello:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 12-09-2003 à 12:28:52    

d'après ce que je vois, il y a un espace de trop dans le nom "ventes.doc ". S'il te sort nom de fichier incorrect, essaie de lire la propriété Name de ton document, afin de vérifier que ça correspond. Tiens au fait tu n'utilises plus ActiveDocument?

Reply

Marsh Posté le 12-09-2003 à 12:42:14    

il semblerait que ca fonctionne à présent, j'ai laissé tomber à nouveau avec l'objet document.
 
voilà pour que ca fonctionne:

Code :
  1. Private Sub cmdGenerer_Click()
  2.   Dim Word_Application As Word.Application
  3.   Set Word_Application = New Word.Application
  4.   Dim Word_Documents As Word.Documents
  5.   Dim i As Integer
  6.   [...]
  7.   FileCopy file
  8.   Set Word_Documents = Word_Application.Documents
  9.   Word_Documents.Open (file)
  10.   Word_Application.ActiveDocument.CustomDocumentProperties.Item("xxx" ) = "test"
  11.   Word_Application.ActiveDocument.Save
  12.   Word_Documents.Close
  13.   Word_Application.Quit
  14.   Set Word_Application = Nothing
  15. End Sub


1. pas de .value après le item("xxx" )
2. faire un save
3. normalement j'ai une boucle, et il faut faire Word_Application.Quit à chaque fois, sinon je crois que j'avais plusieurs applications word en mémoire et ca fouttait la grosse merde.
 
je crois que cette fois c'est ok, merci beaucoup pour m'avoir aidée. bon accessoirement j'ai d'autres trucs à faire, mais je pense pas y arriver aujourd'hui, donc la semaine de vacances est sucrée :'(
 
par exemple j'ai un combobox que je mets en style dropdown list (pour qu'on puisse pas entrer qqch manuellement). Et de cette façon je ne trouve pas comment mettre une valeur par défaut (la propriété text est le nom du combobox en lecture seule). enfin je vais encore chercher un peu
 
snif :'(

Reply

Marsh Posté le 12-09-2003 à 12:48:00    

pour le combobox, tu dois toujours passer par la propriété ListIndex: -1 pour rien de sélectionné, et une valeur de 0..ListCount-1 pour la positionner.

Reply

Marsh Posté le 12-09-2003 à 13:30:11    

ca marche  :love:  
c'est tellement con que je devrais avoir honte, mais merci  :cry:  :cry:

Reply

Marsh Posté le 12-09-2003 à 13:38:20    

n'empêche qu'une boucle sur une séquence instancier-désinstancier Word, c'est pas glop. Garde ton code qui marche de côté et essaie de débugger ce qui va pas avec toutes ces instances de Word :/
 
D'après ce que je vois dans mon code:
 

Code :
  1. ' Fermer le document courant
  2. Call objWord.ActiveDocument.Close(0)  ' wdDoNotSaveChanges
  3. ' Fermer Word
  4. Call objWord.Quit(0) ' wdDoNotSaveChanges
  5. Set objWord = Nothing


 
Les vrais paramètres (de type Enum) sont en commentaires mais c'est bien leur valeur correspondante qu'on utilise, c'est juste qu'on référence pas Word dans le projet. Je les ai mis dans mon code pour que ce soit plus clair ;)

Reply

Marsh Posté le 12-09-2003 à 13:43:10    

dakord, je finis déjà le reste et j'essayerai ca à la rentrée (j'ai franchement pas envie aujourd'hui  :fou: )
merci beaucoup :jap:

Reply

Marsh Posté le 12-09-2003 à 15:24:59    

au fait...
pk t'avais besoin de ça ? je suis sûr kil y avait mieux ;)


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 12-09-2003 à 15:39:32    

Poipoi a écrit :

au fait...
pk t'avais besoin de ça ? je suis sûr kil y avait mieux ;)


paske je suis obligée

Reply

Marsh Posté le 12-09-2003 à 15:45:23    

Urd-sama a écrit :


paske je suis obligée


 :lol:  
 
C pas vraiment la réponse que j'attendais ;)
 
Il y a bien un but ? ou juste le faire pour le faire ?  :D


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 12-09-2003 à 15:53:04    

Poipoi a écrit :


 :lol:  
C pas vraiment la réponse que j'attendais ;)
Il y a bien un but ? ou juste le faire pour le faire ?  :D  


si j'étais mauvaise langue, je dirais "faire un programme à la con qui servira à rien, juste pour montrer qu'on sait en faire"
mais vu que je suis pas mauvaise langue (sic) je dirai simplement qu'on le fait pour épater la galerie (c'est pas mieux en fait, mais bon).

Reply

Marsh Posté le 12-09-2003 à 16:00:44    

Urd-sama a écrit :


si j'étais mauvaise langue, je dirais "faire un programme à la con qui servira à rien, juste pour montrer qu'on sait en faire"
mais vu que je suis pas mauvaise langue (sic) je dirai simplement qu'on le fait pour épater la galerie (c'est pas mieux en fait, mais bon).


ça épate des gens ça ? :heink:


---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 12-09-2003 à 16:05:10    

Poipoi a écrit :


ça épate des gens ça ? :heink:  


je suis dans une boite ou les gens font leurs pages web avec word

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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