Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 18h56   #1
Membre du Club
 
Inscription : novembre 2007
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 80
Points : 52
Points : 52
Par défaut Modifier un "INCLUDETEXT" depuis une application

Bonjour,

J'ai un document word (.doc pas .docx) qui contient plusieurs balises
{ INCLUDETEXT "xxxx" \!}.

Avec "xxxx" qui est un chemin en dur vers un fichier à inclure.

Je voudrai modifier ce chemin xxxx pour le remplacer par un autre (NOTE: je dois laisser le .doc d'origine intact à cause de problèmes de déploiement).

Donc je me demandais comment depuis Delphi ou VBA je pouvais :

1) ouvrir le .doc
2) changer le xxxx en yyyy
3) forcer word à appliquer les modifications (donc a inclure dans le ActiveDocument les sous documents yyyy)
4) sauver le document ainsi "mergé" dans un autre .doc

Je suis preneur de tout bout de code pour faire ça [points 2 et 3 surtout] même dans un autre langage car je ne trouve rien à ce sujet sur le net.

[NOTE: entre temps j'ai un peu avancé :

Je peux accéder au code par ActiveDocument.Fields.Item(i).Code, qui me renvoie bien le INCLUDETEXT complet.

Par contre si j'essaie d'affecter une chaine de caractère à ce .Code (pour le modifier) j'ai une erreur EOleSysError qui m'indique que le type ne colle pas.
Je me doute que ça n'est pas aussi simple donc je cherche toujours de l'aide ]
pragmatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 20h22   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

On récupère et modifie le contenu d'un champ avec la propriété Code de ce champ.

Code :
ActiveDocument.Fields(1).Code
On peut faire un traitement sur le contenu pour éliminer du traitement ce qui doit l'être.

Code :
1
2
3
4
If Left(ActiveDocument.Fields(1).Code, 13) = " INCLUDETEXT" Then
   ActiveDocument.Fields(1).Code = " INCLUDETEXT " & Chr(34) & "  C:\\Temp\\yyyy.doc " & Chr(34)
End If
ActiveDocument.Fields(1).Update
On ouvre un document avec la commande

Code :
Documents.Open("Monchemin de document")
On sauvegarde avec

Code :
ActiveDocument.SaveAs "Mon chemin de sauvegarde"
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 22h51   #3
Membre du Club
 
Inscription : novembre 2007
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 80
Points : 52
Points : 52
Merci pour le tuyau c'est un bon début mais il doit y avoir une différence en Delphi car si j'arrive bien à lire le contenu du .Code , je ne peux pas le changer j'ai toujours une erreur OLE qui me dit que je n'utilise pas le bon type de valeur.

J'ai essayé une chaine de caractère en direct, un OleVariant mais rien n'y fait
pragmatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 22h56   #4
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

Code est un range,

Essaye un string sur la propriété suivante
Code :
ActiveDocument.Fields(1).Code.Text
Citation:
ActiveDocument.Fields(1).Code = " INCLUDETEXT " & Chr(34) & " C:\\Temp\\yyyy.doc " & Chr(34)
Tu es sûr que cela passe directement Olivier?
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 23h06   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut Christophe,

Tu as raison, dans mon test, j'ai utilisé son cast pour avoir la donnée.

Il faut utiliser .Text pour le modifier.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 23h35   #6
Membre du Club
 
Inscription : novembre 2007
Messages : 80
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 80
Points : 52
Points : 52
Exact merci les champions !
Je venais de trouver la solution mais vous m'avez devancé
pragmatique est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h01.


 
 
 
 
Partenaires

Hébergement Web