Si tu veux gagner en vitesse d'exécution, tu dois préparer le document et lui attacher la source de données, pour le publipostage, il suffit alors d'ouvrir le document et le tour est joué, c'est plus rapide et plus facile.
Mais ç reste une question de goût.
Si c'est pour faire du publipostage traditionnel, il vaut mieux le faire au départ du doc et pas de Access.
http://heureuxoli.developpez.com/off...ipostage/#L4-C
Si tu sauvegarde le document avant de terminer le publipostage, tu as un document principal de fusion.
L'ouvrir et lancer la commande mailmerge.execute suffit.
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 !
alors je vai d'explique mon projet
je crée un programme sous access pour la gestion d'une entreprise de Maitre d'oeuvre. Ils sont ISO et donc ils doivent respecte des régles. Ils doivent tous utilisé les doc type ( les dernieres). Access me permet grace au stockage de donnée d'évite la resaisie + la gestion de documents lourd ( reunion de chantier, situation, Appel d'offre..). Donc chacun ouvre access et clique sur une impression d'une lettre (ici exemple Lettre confirmation d'intêret.doc) On réalise le publipostage de access a word et tout cela doit être pour utilisateur super simple et transparent. Et a la fin du publipostage ils doivent pouvoir modifier le courrier et ensuite l'enregistre comme si c'etait une lettre sans publipostage ( car il ne faut plus de lien avec access car on pourrai modifier des données dans access qui ne doivent pas être modifier quand on reouvre le fichier enregistre).
Le code que j"utilise au début grace a un SEUL client de l'utilisateur réalisé le publipostage et crée un nouveau fichier word avec comme défaut ne m'actualise pas l'image.
par rapport a ce que je vien de d'explique tu me conseil quoi? ( je te demande sa car peux être qu'il y a des solutions plus simple ou plus fluide mais il faut que je puisse avoir la gestion de la mise a jour de l'image et ce avec n'importe qu'elle version de word)
Pour Word, l'utilisation de modèles est plus facile que de tout faire en Access.
Au lieu d'ouvrir un document effectuer le publipostage, ajouter la source de données, fermer le document sans faire de sauvegarde.
Le simple fait d'ouvrir un modèle Word élimine l'étape de fermeture du document, puisque c'est d'office un nouveau document qui est généré.
Les modèles de document sont beaucoup plus facile à mettre en place, on peut les mettre sur un répertoire en lecture seule situé sur le réseau.
Il est également possible d'effectuer certaines action lors de l'ouverture d'un modèle.
Maintenant, pourquoi utilises-tu de publipostage, sachant que selon ce que tu explique tu ne vas avoir qu'un seul document à la fois et pas un grand nombre.
Si c'est pour un seul document, il est beaucoup plus facile d'utiliser une méthode avec des signets.
Si une méthode avec modèle est utilisée, les .dot fonctionnent aussi avec 2007. Une gestion centralisée des modèle est plus fluide, un seul document pour tout le monde et la mise à jour est plus transparente.
Un des problèmes que je rencontre, c'est la distribution d'une application Access sur les postes. Lorsque j'installe une mise à jour, je dois le faire en plusieurs fois, certains pc n'étant pas on, je dois attendre qu'ils soient allumés.
Mais c'est toujours une question de goût.
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 !
alors pour ma part pour les mise a jour j'ai crée sur le serveur un dossier ou l'on trouve la derniere version de ma base + tout les fichiers que je souhaite joindre.
A l'ouverture de ma base je réalise un teste sur la version de la base. si une version est trourve j'avertir l'utilisateur et je copier le nouveau fichier VBS qui me fera la mise a jour et ensuite la base se ferme et le vbs prend la suite
voila mon code :
et le code du vbs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Private Sub Form_Open(Cancel As Integer) If VersionNo - NoVersion <> 0 Then 'mise a jour du fichier vbs avant copier de la nouvelle base Dim oFSO As Scripting.FileSystemObject Dim source As String, destination As String Set oFSO = New Scripting.FileSystemObject source = "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\mise_a_jour_auto.vbs" destination = "C:\access_pc3d\mise_a_jour_auto.vbs" oFSO.CopyFile source, destination, True MsgBox "Une mise à jour de la base est disponible merci de cliquer sur ok la base va se mettre à jour" Shell "wscript " & "C:\access_pc3d\mise_a_jour_auto.vbs" & """" Application.Quit Else Set rsAlwaysOpen = CurrentDb.OpenRecordset("tbldummy") End If End Sub
Comme tu peux voir a la fin du fichier VBS il me reouvre access. Comme sa c'est les utilisateur qui font les mise a jour quand ils ce connécte. Moi je ne fait la mise a jour que sur le serveur c'est plus simple. Tu en pense quoi??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 '#################################################################### '# Permet l'installation d'une bdd d'un réseau vers user connectés # '#################################################################### 'pause avant le lancement WScript.Sleep 3000 'instance Set fso = CreateObject("Scripting.FileSystemObject") Set net = CreateObject("Wscript.Network") Set WshShell = WScript.CreateObject("WScript.Shell") 'Test si fichier éxistant sur serveur. If fso.FileExists ("\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\saisie base 3d.mdb") Then destination = "C:\access_pc3d\" 'del dossier sauvegarde Dim oFSO,oFld Set oFSO = CreateObject("Scripting.FileSystemObject") set oFld = oFSO.GetFolder(destination) 'Parcours et efface tous les sous répertoires For Each oSubFld in oFld.SubFolders oSubFld.Delete false Next 'Parcours et efface tous les fichiers directement sous le répertoire For Each oFile in oFld.Files oFile.Delete False Next 'création du =dossier de sauvegarde Dim racine racine = "C:\access_pc3d\" Set FSO = CreateObject("Scripting.FileSystemObject") fso.CreateFolder(racine & "\doc\") 'Copie du Fichier du serveur vers le pc utilisateurs fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\saisie base 3d.mdb","C:\access_pc3d\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\Sécurité.mdw","C:\access_pc3d\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\modification base.txt","C:\access_pc3d\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\evenement_ribbon.XML","C:\access_pc3d\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\publipostage.mdb","C:\access_pc3d\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\mise_a_jour_auto.vbs","C:\access_pc3d\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\doc\Acte d'engagement.doc","C:\access_pc3d\doc\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\doc\Actions à mener avant démarrage travaux.doc","C:\access_pc3d\doc\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\doc\Procedure de gestion des fins de chantier.doc","C:\access_pc3d\doc\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\doc\Lettre confirmation d'intêret.doc","C:\access_pc3d\doc\" fso.CopyFile "\\Srv_3dmanager\3D_Informatique\ACCESBASE3D\mise a jour base\doc\Tenue des réunions de chantier.doc","C:\access_pc3d\doc\" msgbox "mise à jour terminée" WshShell.Run """C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE"" ""C:\access_pc3d\saisie base 3d.mdb"" /WRKGRP ""C:\access_pc3d\Sécurité.mdw""" Else 'Avertissement si fichier non éxistant msgbox "Problème rencontré lors de la connexion au serveur.", vbExclamation, "Mise à Jour" End If
Alors pour mon probléme de mise a jour de l'image pour le publipostage.
Je souhaite donc sur tes conseil prendre le type modele DOT peux du m'aide pour le code du publipostage. Je te redit ce que je souhaite :
- l'utilisateur clique sur un bouton sous access.
- le modele s'ouvre réalise le publipostage avec la mise a jour de l'image bien sur.
- l'utlisateur pourra aprés modifier le texte et enfin quand il fermera il pourra enregistre cette lettre qui devient indépendant par rapport access.
Peux tu m'envoi le fichier que j'avai joint plus haut pour comprendre mes erreur car je n'arrive pas a le faire merci.
et dis moi ce que tu en pense de ma maniere de faire les mise a jour, pourquoi tu ne fait pas pareil pour toi?
Malheureusement, les fichiers sont à la maison.
Je n'ai touché qu'au code du bouton et l'intégralité du code est dans mon post.
Par exemple, je n'utilise pas de constante pour le fichier, mais une variable qui prend en compte l'endroit où se situe la DB.
Je suppose que l'utilisateur utilise un formulaire pour déterminer les données qui seront utilisées pour la génération du document ?
Dans ce cas, on peut facilement envoyer les données du formulaire dans le document sans publipostage, ce qui apporte une plus grande vitesse d'exécution.
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 !
je préfere garde le publipostage car toute les données ne sont par forcement dans le même formulaire.
J'ai repris ton code mais j'ai encore des probléme :
il m'ouvre un document1 avec la publication non réalise avec les champ visible «NOM_OPERATION» ....
et il m'ouvre un deuxiéme document "lettres types1" avec les champ en code ouvert et non publie pourtant j'ai bien pris ton code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
44
45
46 DoCmd.RunCommand acCmdRefresh DoCmd.SetWarnings False DoCmd.RunSQL "DELETE entreprise.* FROM entreprise IN 'C:\access_pc3d\publipostage.mdb';" DoCmd.RunSQL "INSERT INTO entreprise ( NUM_OPERATION, NOM_OPERATION, VILLE_OPERATION, DATE_CONTACT_DCE, NOM_ENTREPRISE, ADRESSE_ENTREPRISE, ADRESSEBIS_ENTREPRISE, VILLE_ENTREPRISE, CP_ENTREPRISE, NOM3D, ADRESSE3D, VILLE3D, CP3D, TEL3D, FAX3D, LOGO ) IN 'C:\access_pc3d\publipostage.mdb' SELECT OPERATION.NUM_OPERATION, OPERATION.NOM_OPERATION, OPERATION.VILLE_OPERATION, OPERATION.DATE_CONTACT_DCE, INTERVENANT_EXT.NOM_INTERVENANT_EXT, INTERVENANT_EXT.ADRESSE_INTERVENANT_EXT, INTERVENANT_EXT.ADRESSEBIS_NTERVENANT_EXT, INTERVENANT_EXT.VILLE_INTERVENANT_EXT, INTERVENANT_EXT.CP_INTERVENANT_EXT, SOCIETE.NOM3D, SOCIETE.ADRESSE3D, SOCIETE.VILLE3D, SOCIETE.CP3D, SOCIETE.TEL3D, SOCIETE.FAX3D, SOCIETE.LOGO FROM SOCIETE INNER JOIN (INTERVENANT_EXT INNER JOIN OPERATION ON INTERVENANT_EXT.NUM_INTERVENANT_EXT = OPERATION.NUM_INTERV_PROMOTEUR) ON SOCIETE.NUM_SOCIETE_3D = OPERATION.NUM_SOCIETE_3D WHERE (((OPERATION.NUM_OPERATION)=[Forms]![Fiche Contact DCE]![NUM_OPERATION]));" DoCmd.SetWarnings True Dim DOC_WORD As String Dim oDoc As Object DOC_WORD = CurrentProject.Path & "\doc\Lettre confirmation d'intêret.dot" Dim oSel As Object ' Variable pour gérer l'objet Word Dim wdApp As Object 'ici ' Passer à la partie Publipostage Set wdApp = CreateObject("Word.Application") 'ici With wdApp ' Word est visible pendant les tests .Visible = True ' Ouvrir la lettre type .Documents.Add (DOC_WORD) ' Lier la lettre type à la source de données Access .activeDocument.MailMerge.OpenDataSource _ Name:=CurrentProject.Path & "\publipostage.mdb", _ SQLStatement:="SELECT * FROM [entreprise]" ' La fusion doit se faire dans un nouveau document .activeDocument.MailMerge.destination = wdSendToNewDocument ' Exécuter la fusion .activeDocument.MailMerge.Execute Set oDoc = wdApp.activeDocument .activeDocument.Fields.Update ' Redonner le focus à la lettre type et fermer sans enregistrer '.Documents.Open DOC_WORD '.ActiveDocument.Close wdDoNotSaveChanges End With Debug.Print oDoc.Name oDoc.Activate Set oSel = oDoc.content With oSel .Fields.Update .Fields.ToggleShowCodes End With wdApp.Visible = True 'Set wdApp = Nothing Exit Sub
ok merci pour la base
je l'ai ouvert clique sur le bonton pour lance le publipostage et la j'ai le même résultat deux document word ouvert "document1" et "lettres types1" ( avec le même probléme vu plus haut image non change et code des cham publie visible.
Je poséde office 2007 et vista le probléme est la??
J'ai travaillé sur 2007 et XP, le document1 ne pose pas de problème.
Par contre, ce qui est surprenant c'est que l'image est bien actualisée chez moi.
Le chemin de l'image est-il correct, parce que il me semble que pour l'image je l'avais mis en dur.
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 !
j'ai bien modifier le chemin de l'image et j'ai bien laisse les " "
Donc probléme du a vista??
Non, je ne pense pas.
Une dernière vérification
Bouton Office
Options Word
Options Avancées
Affichage
Afficher les codes de champs plutôt que leur valeur ne doit pas être coché !
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 !
ok vérification faite et la case n'est pas coche
je vien de teste sous un ordi windows Xp et office 2007 même probleme
Désolé,
J'ai pas de solution, je ne parviens pas à reproduire le problème, chez moi tout fonctionne.
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 !
Essaie de faire un essai avec un simple publipostage et une image comme renseigné dans les contributions pour voir !
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager