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 16/08/2011, 19h29   #1
Invité de passage
 
Inscription : mai 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 3
Points : 0
Points : 0
Par défaut répliquer un texte à plusieurs endroits ( sans signets si possible ! )

Bonjour,

L'objectif est le suivant :
  • un document excel qui sert de proposition commerciale financière
  • un document word qui permet de décrire la proposition financière

1er étape : Je remplis mon document excel. Je rempli les cellules :
NomClient (qui doit être répéter plusieurs fois dans le document word)
NomProjet
Chargé d'Affaires etc...

Je voudrais réutiliser le contenu de la cellule pour réinsérer dans mon word et le générer à partir d'un document type. J'ai essayé les signets mais il déforme mon document word et cela ne marche pas très bien. J'ai épluché le net, j'ai entendu parler de Autotext, de publipostage.. mais je ne vois pas comment le mettre en oeuvre. Le publipostage me demande une liste de destinataires etc...

J'aimerai réalisé cela au travers d'une macro. Je possède Word et Excel 2010. Voici le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub Export()
 
'-- ouverture d'un document word
 
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
 
    Set WordApp = CreateObject("Word.Application") '-- ouvre une session Word
    WordApp.Visible = True
    WordApp.WordBasic.DisableAutoMacros 1
    WordApp.Activate
    Set WordDoc = WordApp.Documents.Open("C:\Users\Desktop\DocProposition.docx", ReadOnly:=True)
 
' ControleSiWordOuvert
 
Dim ChampP As String
Dim ChampC As String
Dim ChampA As String
Dim ChampAM As String
 
' Variable NomClient
ChampC = Sheets("Etape 2 - Récapitulatif").Range("B10")
 
 
' Variable NomProjet
ChampP = Sheets("Etape 2 - Récapitulatif").Range("B15")
 
 
' Variable Chargé d'affaire
ChampA = Sheets("Etape 2 - Récapitulatif").Range("F12")
 
 
 
' Insertion des signets
RemplirSignet "NomClient", ChampC, WordDoc
RemplirSignet "NomProjet", ChampP, WordDoc
RemplirSignet "ChargeAffaire", ChampA, WordDoc
 
WordDoc.Fields.Update
 
Set WordApp = Nothing
 
End Sub
Voici la fonction RemplirSignet

Code :
1
2
3
4
5
6
7
8
9
10
11
Public Sub RemplirSignet(S As String, T As String, WordDoc2 As Word.Document)
' Remplit le signet S avec le texte T sans détruire S
On Error GoTo rien
Dim Place As Long
Place = WordDoc2.Bookmarks(S).Range.Start
WordDoc2.Bookmarks(S).Range.Text = T
WordDoc2.Bookmarks.Add Name:=S, _
    Range:=WordDoc2.Range(Place, Place + Len(T))
rien:
 
End Sub
choupinie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2011, 19h54   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
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 324
Points : 29 225
Points : 29 225
Salut,

Peut-être un peu de lecture ?

http://heureuxoli.developpez.com/off...cument-tiroir/
http://heureuxoli.developpez.com/off...ipostage/#L8-C

Je pense que tu devrais trouver une ébauche de solution ?

On devrait pouvoir l'affiner à ton cas par la suite.

Il y a pour la réplication une possiblilité avec StyleRef qui est un simple champ faisant référene à un style particulier.
__________________
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 17/08/2011, 11h10   #3
Invité de passage
 
Inscription : mai 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 3
Points : 0
Points : 0
J'ai lu la partie publipostage. Mais cela me le fait avec l'assistant word moi ce que j'aimerai

C quand je lance ma macro, c'est que cela se fait à ce moment là en code.
-> Ouvrir le fichier word de référence
-> Faire les modifications
-> Faire un Save As sous un autre nom...

Pour Style Ref, j'ai entendu parler mais je comprends pas cmt ca marche. Style Ref c'est plus sur la forme du texte et un style spécifique pas sur du contenu ??
choupinie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 16h48   #4
Invité de passage
 
Inscription : mai 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 3
Points : 0
Points : 0
Je pense comprendre pk les histoires de signets et renvois ne peuvent fonctionner.

Code :
WordDoc2.Range(Place, Place + Len(T))
Quand on fait une mise en place spéciale, ( typiquement page de garde etc... ), il y a déplacement du signet à la mauvaise place, bref du coup ca déplace tt et ca modifie tt. Un vrai bordel !

Il faut mettre signet et renvoi sur une page uniforme ( avec la même mise en page ). Sinon il faut multiplier les signets.

Si vous avez d'autres solutions avec exemples ca m'intéresse ! Car je trouve pas ca propre les signets !
choupinie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 17h46   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
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 324
Points : 29 225
Points : 29 225
Salut,

J'ai rien compris à ce que tu as compris.

On adresse un signet en passant par la collection Bookmarks

ActiveDocument.Bookmarks(1).Range.text = "Mon texte"

Point de bordel, le texte est envoyé à la place du signet ou juste derrière suivant la méthode que l'on a utilisée pour insérer le signet.

Pour RefStyle, c'est très simple, on crée ou on utilise un style existant, que ce soit un style de caractère ou un style de paragraphe.

On ajoute un champ ctrl + F9 dans lequel on insère STYLEREF "MonStyle" suivi de F9 pour mettre à jour.
C'est la dernière occurrence du style qui est utilisée.

Je pense que tu n'as pas lu le tuto que j'ai donné en lien, on y indique aussi comment publiposter en VBA sur des signets.
http://heureuxoli.developpez.com/off...ipostage/#L7-G
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h44.


 
 
 
 
Partenaires

Hébergement Web