OVH Cloud OVH Cloud

suite publipostage pour Eric

2 réponses
Avatar
yannick
Bonjour,

Ok pour ma table tempo mailing pour mon publipostage ok, le seul hic, c’est
que si dans ma table mailing je n’ai que chpNom1, chpPrenom1, chpEmploi1,
chpNom2, chpPrenom2, chpEmploi2, (normal si pour ce N°formation j’en ai 2)
alors que dans mon publipostage j’ai ce code :
Private Sub Commande0_Click()
Call publipostage
'On Error Resume Next
Dim W_App As Object
Set W_App = CreateObject("Word.Application")
Dim Db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Set Db = CurrentDb


Set rst = Db.OpenRecordset("Mailing")

If rst.BOF Then GoTo Exit_Sub
With W_App
.Visible = True
Do Until rst.EOF
.Documents.Open ("C:\appli\DOC FORMATION\Conventions\convention
type.doc")
.ActiveDocument.Bookmarks("RS").Select
.Selection.InsertAfter rst.Fields("RS")
.ActiveDocument.Bookmarks("ADR1").Select
.Selection.InsertAfter Nz(rst.Fields("ADR1"), "")
.ActiveDocument.Bookmarks("ADR2").Select
.Selection.InsertAfter Nz(rst.Fields("ADR2"), "")
.ActiveDocument.Bookmarks("cp").Select
.Selection.InsertAfter Nz(rst.Fields("CP"), "")
.ActiveDocument.Bookmarks("ville").Select
.Selection.InsertAfter Nz(rst.Fields("Ville"), "")
.ActiveDocument.Bookmarks("IntituleF").Select
.Selection.InsertAfter Nz(rst.Fields("LibelleF"), "")
.ActiveDocument.Bookmarks("nom1").Select
.Selection.InsertAfter Nz(rst.Fields("chpNom1"), "")
.ActiveDocument.Bookmarks("prenom1").Select
.Selection.InsertAfter Nz(rst.Fields("chpPrenom1"), "")
.ActiveDocument.Bookmarks("fonction1").Select
.Selection.InsertAfter Nz(rst.Fields("chpEmploi1"), "")
.ActiveDocument.Bookmarks("nom2").Select
.Selection.InsertAfter Nz(rst.Fields("chpNom2"), "")
.ActiveDocument.Bookmarks("prenom2").Select
.Selection.InsertAfter Nz(rst.Fields("chpPrenom2"), "")
.ActiveDocument.Bookmarks("fonction2").Select
.Selection.InsertAfter Nz(rst.Fields("chpEmploi2"), "")
.ActiveDocument.Bookmarks("nom3").Select
.Selection.InsertAfter Nz(rst.Fields("chpNom3"), "")
.ActiveDocument.Bookmarks("prenom3").Select
.Selection.InsertAfter Nz(rst.Fields("chpPrenom3"), "")
.ActiveDocument.Bookmarks("fonction3").Select
.Selection.InsertAfter Nz(rst.Fields("chpEmploi3"), "")
.ActiveDocument.Bookmarks("nom4").Select
.Selection.InsertAfter Nz(rst.Fields("chpNom4"), "")
.ActiveDocument.Bookmarks("prenom4").Select
.Selection.InsertAfter Nz(rst.Fields("chpPrenom4"), "")
.ActiveDocument.Bookmarks("fonction4").Select
.Selection.InsertAfter Nz(rst.Fields("chpEmploi4"), "")
.ActiveDocument.Bookmarks("nom5").Select
.Selection.InsertAfter Nz(rst.Fields("chpNom5"), "")
.ActiveDocument.Bookmarks("prenom5").Select
.Selection.InsertAfter Nz(rst.Fields("chpPrenom5"), "")
.ActiveDocument.Bookmarks("fonction5").Select
.Selection.InsertAfter Nz(rst.Fields("chpEmploi5"), "")

.ActiveDocument.PrintPreview: Stop
.ActiveDocument.PrintOut False
.ActiveDocument.Close wdDoNotSaveChanges
rst.MoveNext
Loop
End With
Exit_Sub:
rst.Close
Set rst = Nothing
Set Db = Nothing
W_App.Quit
Set W_App = Nothing
End Sub



Je vais avoir un message d’erreur car chpNom3 ……… n’existe pas dans ce
moment la
Dois-je faire un boucle ou un sotie lorsque chpNom3 n’existe pas ?
Peux tu m’aiguiller ?

Je te remercie.

@+

Yannick

2 réponses

Avatar
Eric
Bonjour Yannick,

0 - Yannick, tu personnalises trop tes messages, ca risque d'en décourager
plus d'un, croyant qu'il s'agit d'un post personnel. Tu perds donc en
efficacité et tu te prives du savoir des autres.

1 - La solution, tu l'as dans ton code, enlèves l'apostrophe devant la
ligne On Error Resume Next, ainsi si les champs n'existent pas dans le
recordset tu passes à l'instruction suivante. Je pense que tu as mis dans
ton document Word le nb de signets correspondant au maximum de
participants, donc je ne vois pas d'autre solution. Le Resume Next va
"shunter" les instructions générant les erreurs. Ca peut être dangereux si
d'autres erreurs différentes de l'absence d'attributs dans le recordset
existent.
Je viens de faire un test avec ton code pour la partie WORD, ma procédure
créant la table Mailing et 2 participants seulement sur une lettre
contenant les signets nom1, prenom1, nom2, prenom2, nom3, prenom3, nom4,
prenom4 et ca marche, bien que je n'ai pas dans mon recordset la plupart
des champs que tu as mentionnés dans la partie Word.

2 - Une solution "plus élégante", peut-être, serait de créer les signets
dans Word en fonction du nb de champs de participant retourné par le
recordset. Dans ma procédure la variable *cpt* te donne le nombre de
couples Nom/Prénom à renseigner. N'étant pas spécialiste dans ce domaine,
je passe la main à d'autres. Ce qui me ramène au Point 0.

PS : si tu adoptes la solution 1 et si problème, envoies moi en bd zippée,
tes 3 tables, ta requête et ton document Word ( en
remplaçant libre par free)

--
A+
Eric

Conseils MPFA: http://users.skynet.be/mpfa/
Avatar
yannick
ok cela fonctionne j'ai pris la solution 1
Pour l'instant pas de probleme, je te remercie et bon noël à toi
@+
Yannick




Bonjour Yannick,

0 - Yannick, tu personnalises trop tes messages, ca risque d'en décourager
plus d'un, croyant qu'il s'agit d'un post personnel. Tu perds donc en
efficacité et tu te prives du savoir des autres.

1 - La solution, tu l'as dans ton code, enlèves l'apostrophe devant la
ligne On Error Resume Next, ainsi si les champs n'existent pas dans le
recordset tu passes à l'instruction suivante. Je pense que tu as mis dans
ton document Word le nb de signets correspondant au maximum de
participants, donc je ne vois pas d'autre solution. Le Resume Next va
"shunter" les instructions générant les erreurs. Ca peut être dangereux si
d'autres erreurs différentes de l'absence d'attributs dans le recordset
existent.
Je viens de faire un test avec ton code pour la partie WORD, ma procédure
créant la table Mailing et 2 participants seulement sur une lettre
contenant les signets nom1, prenom1, nom2, prenom2, nom3, prenom3, nom4,
prenom4 et ca marche, bien que je n'ai pas dans mon recordset la plupart
des champs que tu as mentionnés dans la partie Word.

2 - Une solution "plus élégante", peut-être, serait de créer les signets
dans Word en fonction du nb de champs de participant retourné par le
recordset. Dans ma procédure la variable *cpt* te donne le nombre de
couples Nom/Prénom à renseigner. N'étant pas spécialiste dans ce domaine,
je passe la main à d'autres. Ce qui me ramène au Point 0.

PS : si tu adoptes la solution 1 et si problème, envoies moi en bd zippée,
tes 3 tables, ta requête et ton document Word ( en
remplaçant libre par free)

--
A+
Eric

Conseils MPFA: http://users.skynet.be/mpfa/