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 22/01/2007, 16h19   #1
Membre régulier
 
Inscription : octobre 2006
Messages : 148
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 148
Points : 75
Points : 75
Par défaut Publipostage Access vers Word

Bonjour a tous !

Je viens vous demander de l'aide car je galère un peu à mettre en place un publipostage d'Access vers Word, malgré le forum ou la faq ou autre ...

J'ai donc créé un document word "publipostage.doc" avec des champs de fusion.
j'ai une base access avec un formulaire avec plusieurs choix, etc.

Mon publipostage ce fait via la sélection dans une requête
(le code n'est qu'en phase test)

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
 
Dim Wapp As New Word.Application
Dim db As DAO.Database
Dim rs As DAO.Recordset
 
Set db = CurrentDb()
Set rs = db.OpenRecordset("Select libelleintitule, nom from intitule, personne " & _
            "Where intitule.numintitule = personne.numintitule")
 
With Wapp
    .Visible = True
 
    Do Until rs.EOF
        .Documents.Open ("d:\adresse\publipostage.doc")
        .ActiveDocument.MailMerge.Fields(1).Select
        .Selection = rs!libelleintitule
 
        .ActiveDocument.MailMerge.Fields(2).Select
        .Selection = rs!nom
 
        .ActiveDocument.PrintOut False
        .ActiveDocument.Close wdDoNotSaveChanges
 
        rs.MoveNext
        DoEvents
    Loop
 
End With
 
Set Wapp = Nothing

cela fonctionne relativement bien, mais mon problème c'est que :

1. L'utilisatrice aimerait visualiser tous les documents avant de tout imprimer, mais dans mon code, ca imprime un a un les documents sans pouvoir les visualiser.

2. J'ai jamais travaillé avec access et word ensemble, donc je connais pas trop les termes à utiliser


Dans l'absolue, ce que j'aimerai, c'est que, si j'ai 50 noms, que ca ouvre qu'un seul document word avec les 50 pages à la suite, pour pouvoir avoir un aperçu global avant d'imprimer !


Merci pour votre aide !!!
popo68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 17h09   #2
Membre régulier
 
Inscription : octobre 2006
Messages : 148
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 148
Points : 75
Points : 75
Bon a force de chercher, j'ai trouvé ca qui marche mieux :

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
 
Dim wapp As New Word.Application
Dim db As DAO.Database
Dim rs As DAO.Recordset
 
Set db = CurrentDb()
 
SqL = "Select libelleintitule, nom from intitule, personne " & _
            "Where intitule.numintitule = personne.numintitule"
 
Set rs = db.OpenRecordset(SqL)
 
With wapp
    .Documents.Open "d:\adresse\publipostage.doc"
    .ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    .ActiveDocument.MailMerge.OpenDataSource "d:\adresse\publipostage.mdb", wdOpenFormatAuto, False, False, False, False, _
        "", "", False, "", "", "Provider=Microsoft.jet.OLEDB.4.0; source=d:\adresse\publipostage.mdb;Mode=Read;Extended Properties="""";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locki" _
        , SqL, "", False, wdMergeSubTypeAccess
    .Visible = True
    .ActiveDocument.MailMerge.DataSource.QueryString = SqL
    .ActiveDocument.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord
    .ActiveDocument.MailMerge.DataSource.LastRecord = wdDefaultLastRecord
    .ActiveDocument.MailMerge.Execute True
 
End With
 
Set wapp = Nothing
popo68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 17h35   #3
Membre régulier
 
Inscription : octobre 2006
Messages : 148
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 148
Points : 75
Points : 75
Question encore :

pourquoi d'après mon code, il m'ouvre le document, et après il en ouvre un deuxième identique pour faire le publipostage ?


par contre dans mon fichier word, j'ai des champs de fusion que je remplie avec mon recordset. est-il possible de remplir d'autre champs de fusion avec des variables ?

exemple :

J'ai un champs de fusion "REF" et j'aimerais lui attribué une variable vba (ex '1456'), car ce champs est pareil sur toutes les lettres !

Merci !!!!
popo68 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2007, 18h05   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Je réponds à ça :
Citation:
J'ai un champs de fusion "REF" et j'aimerais lui attribué une variable vba (ex '1456'), car ce champs est pareil sur toutes les lettres !
Comme ça, a priori, ton champ doit être renseigné dans ta base de données. Ce que tu pourrais peut-être faire, avant de lancer l'impression du document, c'est de faire une recherche de la ligne dans laquelle tu souhaites insérer ta référence (un mot, un N° de ligne...)
Pour ton premier problème "Visualiser le document avant de l'imprimer", ton premier code me semblait parfait en remplaçant la ligne "printout" par
Code :
    ActiveDocument.PrintPreview
Ensuite, si une correction était nécessaire, tu interrogeais l'utilisateur quant à l'impression par l'intermédiaire d'un msgbox.
Nécessite de relancer la fusion pour les seules fiches corrigées, les corrections ne pouvant se faire en cours de macro.
Juste une idée
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2007, 08h59   #5
Membre régulier
 
Inscription : octobre 2006
Messages : 148
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 148
Points : 75
Points : 75
Merci pour ta réponse !

Mais j'ai laissé tombé le premier code. Le problème, c'est que si je mets un -printpreview- , il va le lancer pour chaque document, si j'ai 50 pages, j'aurais une preview pour les 50, 1 à 1 ... trop contraignant pour l'utilisateur.
-> L'avantage du deuxième code donc ^^


Par contre, la nuit porte conseil dit-on, pour résumer par un exemple j'ai :
sur mon premier doc :
- N° 1495 Dupont henry
- N° 1495 Meyer Roger
- N° 1495 etc ...

Donc j'effectue un publipostage avec les infos de ma base, mais aussi avec des renseignements, comme le numéro, saisie dans un formulaire.

Je me suis demandé si le plus simple n'étais pas de tout enregistrer dans une table temporaire (les champs des tables de ma base + les infos saisies dans un formulaire), et seulement après effectuer un publipostage à partir de cette table ?
popo68 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 00h22.


 
 
 
 
Partenaires

Hébergement Web