Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
901 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Publipostage Word en PDF avec base de données Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Publipostage Word en PDF avec base de données Excel

n°2271015
klimero44
Posté le 07-12-2015 à 23:45:10  profilanswer
 

Bonjour,
 
J'ai un publipostage Word avec une base de données Excel.
 
Le but est de générer autant de fichier PDF par page Word (en gros 500 pages de publipo à générer en 500 fichiers PDF).
 
Le but est d'envoyer par mail par destinataire un fichier PDF.
 
J'ai repris le code VBA :
 

Code :
  1. Sub ExportPDF()
  2. Dim NbPage As Integer
  3. Application.ScreenUpdating = False
  4. NbPage = ActiveDocument.Windows(1).Panes(1).Pages.Count 'Compte le nombre de page dans le document
  5. 'Dans cette section, modifier le paramètre "OutputFileName" pour changer le répertoire de sortie.
  6. 'Il est important de laisser la variable I dans le nom du fichier pour garder un numéro de chrono.
  7. For i = 1 To NbPage
  8. ActiveDocument.ExportAsFixedFormat OutputFileName:= _
  9. "C:\Users\xxx\Desktop\Publipostage\03122015\test\" & i & ".pdf", ExportFormat:= _
  10. wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
  11. wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
  12. wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
  13. CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
  14. BitmapMissingFonts:=True, UseISO19005_1:=False
  15. Next
  16. Application.ScreenUpdating = True
  17. MsgBox "Export terminé"
  18. End Sub


 
Cela fonctionne à merveille.
 
Seulement, il ressort 1.pdf, 2.pdf, etc....
 
Difficile de retrouver ses petits pour les envois PDF en PJ !
 
L'idée est d'intégrer à la place des chiffres le n°contrat + Nom du client (qu'on retrouve dans la base Excel)  
 
J'ai pensé intégrer les champs "n°contrat et Nom du client" en en-tête de mon publipostage et modifier le code :
 

Code :
  1. For i = 1 To NbPage

par

Code :
  1. For i = 1 To SelectDocument.Words(2).Select

Mais il me mets "erreur"....
 
Je cherche sinon à ce que Word copie mon en-tête de page et "colle".pdf
 
Je galère, je sèche, je m'en arrache les cheveux !
 
Merci d'avance !

mood
Publicité
Posté le 07-12-2015 à 23:45:10  profilanswer
 

n°2271032
TotalRecal​l
Posté le 08-12-2015 à 09:43:07  profilanswer
 

Je ne connais pas VBA mais vérifie ceci : l'erreur est t-elle sur l'appel à SelectDocument.Words(2).Select ou sur la valeur renvoyée qui n'est pas un nom de fichier acceptable ?
En séparant la récupération de la valeur et l'affectation tu pourras mieux contrôler ce qui se passe.
 
Tu ne pourrais pas plutôt mettre tes infos dans une des Propriétés du document ou qqch comme ça ? (moins hasardeux qu'aller taper au pif dans l'entête).
 
Dans tous les cas je pense que pour en faire un nom de fichier tu devrais filtrer les caractères qui ne s'y prêtent pas et vérifier un minimum ce qu'il s'apprête à utiliser comme nom...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
n°2271066
Chelmi18
Posté le 08-12-2015 à 13:09:25  profilanswer
 

Bonjour,
 
Je pense que tu n'as pas bien compris le principe du publipostage : Dans ton Word tu ne dois pas avoir autant de pages que de destinataires !!!
 
Le but est justement de remplir le même document (d'une à 2 pages) avec des infos dynamiques issues d'une base (Excel par exemple).
 
Cela se fait directement au sein des champs de fusion de Word et tu n'as nullement besoin de passer par du VBA pour çà.
 
Ou alors le besoin n'est pas le même ...  
 
En tout état de cause, ce n'est pas le  

Code :
  1. For i = 1 To NbPage


qu'il faut changer mais bien la partie nommage du document

Code :
  1. " & i & ".pdf"


 
Sauf que pour çà il va te falloir ouvrir le document Excel dans ta macro, aller y lire les informations désirées, les mettre en forme, etc ... Bref tout ce que Word sait faire en automatique via ses fonctions de publipostage !
 
Bon courage !

n°2271075
klimero44
Posté le 08-12-2015 à 13:49:02  profilanswer
 

Bonjour Chelmi18 et Totalrecall,
 
Merci pour vos réponses.
 
En effet, je suis d'accord avec toi Chelmi concernant le publipostage. Mais le besoin n'est pas le même (je pense).
 
Une fois le modèle envoyé, lorsque tu valides ton publipo, Word créé sous le même fichier 500 pages.
L'idée est que la macro crée un pdf par page (et la macro fonctionne très bien pour ça).
Seulement, à la sortie, j'ai "1.pdf", "2.pdf", etc... jusqu'à "500.pdf".
Ensuite, j'envoi mes pdf à chaque destinataire concerné.
 
Pour m'y retrouver, je voudrais modifier les chiffres par "n°contrat et société".
 
En effet, c'est surement le code

Code :
  1. " & i & ".pdf"


 
que je devrais modifier....
 
Je pense que si j'insère les champs sur les courriers a un endroit (en 1ère ligne par exemple), je lance le publipo et ensuite, une fois les 500 pages publiés, je pourrais dire à la macro qu'il nomme les fichiers non pas "1.pdf"... mais "n°contrat société".pdf.
 
Je suis désolé si mes explications paraissent complexes mais ce n'est pas simple a expliquer !
 
Merci d'avance.
 
Klimero

n°2271088
Chelmi18
Posté le 08-12-2015 à 15:19:51  profilanswer
 

OK, je saisis mieux.
 
Le plus simple serait en effet de passer par un champ de fusion dédié dont tu lirais le contenu dans ta macro.
 
As-tu essayé d'exploiter la piste ActiveDocument.Fields(i).Code.Text où i représente ta page ?
Ou plus largement l'objet Field (champ de fusion) dans un document ?


Message édité par Chelmi18 le 08-12-2015 à 15:21:40
n°2271090
klimero44
Posté le 08-12-2015 à 15:27:18  profilanswer
 

J'ai essayé plusieurs pistes (à force je ne sais plus trop...)
Cela fait plusieurs semaines que je suis dessus tous les soirs et WE.... :-/
 
en effet, l'idée serait que i="n°contrat nom entreprise"
 
Je continue mes recherches (encore et encore !) lol
 
Merci !

n°2271092
Chelmi18
Posté le 08-12-2015 à 15:35:13  profilanswer
 

Non, ce ne serait pas i = n° de contrat mais un champ de fusion nommé TOTO dédié sur chaque paqe n° i CONTENANT le n° de contrat.

n°2271094
Chelmi18
Posté le 08-12-2015 à 15:39:10  profilanswer
 

Par contre, je viens de voir un truc : Après la fusion, les champs ne sont plus accessibles sous leur nom !!!
Le document résultant est un simple document avec du contenu texte classique.
 
Du coup, ca devient compliqué d’accéder à ta donnée n° de contrat après coup !
 
J'en reviens donc à mon idée initiale d'aller directement construire grâce à dans Excel le nom du fichier résultat que tu souhaites à partir du n° de page.
Il te faudra faire le lien entre la ligne Excel à lire et le n° de page de Word.


Message édité par Chelmi18 le 08-12-2015 à 15:41:12
n°2271095
klimero44
Posté le 08-12-2015 à 15:43:47  profilanswer
 

C'est exactement ce que je me disais !!!
 
Par contre je me demandais :
Si j'insère les champs concernés en haut de la page (caché en police blanche et petite police (par exemple),
est-ce que je peux demander dans ma macro un truc du genre :
i = "prendre les 2 premiers mots de la page"  
 
Ce serait top si ça pouvait être ça... !

n°2271096
Chelmi18
Posté le 08-12-2015 à 16:05:08  profilanswer
 

Dans ce cas, il va falloir que tu joues avec les objets Page, Sections et Paragraphs, mais je te souhaites bien du courage puisque tous ces objets sont communs à l'ensemble du document.
 
Pour faire simple, tu ne peux pas dire Paragraphs(1) de la Page(25) !  
 
Il va falloir identifier chaque numéro du 1er paragraphe de chaque page par une chaine spécifique par exemple puis faire des Find et/ou Range.Selection ...
 
Bref, ca me parait un peu compliqué ...
 
Je me tournerais plutôt vers une relecture de l'Excel par la macro Word pour aller y chercher l'info que tu désires....

mood
Publicité
Posté le 08-12-2015 à 16:05:08  profilanswer
 

n°2271101
klimero44
Posté le 08-12-2015 à 16:36:16  profilanswer
 

Merci Chelmi18 !
 
Je suis un peu dépité... J'espérais ne pas arriver à autant de complications.....
 
L'idée de la relecture d'Excel n'est pas mauvaise. On fait tellement de publipostage pour les entreprises avec des bases Excel à droite à gauche que je ne peux pas m'amuser à changer le chemin du répertoire d'Excel dans la macro...  :??:  
 
Ce que je trouve étonnant c'est que je me dis que je ne suis certainement pas le seul à envoyer des publipostages en PJ !  :pt1cable:  
 
Lorsque tu parles de "sections", cela sous-entend que je peux mettre mes 2 champs dans une section et faire un truc du genre :
i="section" ?
 
Ca y est... Je me suis arraché mon dernier cheveux ! lol

n°2271155
Chelmi18
Posté le 09-12-2015 à 09:01:46  profilanswer
 

Garde tes cheveux, on va bien finir par y arriver. :lol:

n°2271163
Chelmi18
Posté le 09-12-2015 à 09:50:07  profilanswer
 

Bon, voilà une ébauche de solution.
 
Attention, celle-ci peut être un peu dangereuse et suppose plusieurs pré-requis indispensables au bon fonctionnement !
 
1. Chaque page doit comporter 1 et 1 seule occurrence du texte "email=" suivi UNIQUEMENT de l'adresse email du destinataire (par exemple "email=toto@serveur.fr" sans espace et sans les guillemets).
Si ce n'est pas le cas libre à toi de modifier ce texte d’identification par une suite de caractères uniques et d'adapter la macro en conséquence (lignes 6 pour le texte et ligne 11 pour la longueur)
 
2. La macro mémorise chaque email dans un tableau correspondant au nombre de pages puis SUPPRIME la ligne en question (passage en one shot donc).
 
Dis-moi ce que tu en pense et n'hésite pas à poser des questions si des lignes ne te semblent pas claires :
 
A ajouter AVANT ta boucle sur le nombre de pages :
 

Code :
  1. Dim listeMails() As String
  2.     Dim z As Long
  3.     z = 0
  4.     Set myRange = ActiveDocument.Content
  5.     myRange.Find.Text = "email="
  6.     Do While myRange.Find.Execute = True
  7.         ReDim Preserve listeMails(z)
  8.         myRange.Expand Unit:=wdSentence
  9.         listeMails(z) = Right(myRange, Len(myRange) - 6)
  10.         myRange.Delete
  11.         z = z + 1
  12.     Loop


 
Puis dans ta boucle, avant la sauvegarde en PDF, l'adresse mail est récupérée sous ce nom :

Code :
  1. listeMails(i - 1)


n°2271167
klimero44
Posté le 09-12-2015 à 10:37:39  profilanswer
 

Ta macro me parait canon !
 
J'essaie d'éplucher ton code.
 
Je dois l'insérer dans ma macro actuelle ?
 
Je l'ai lancé mais il continue à me mettre "1.pdf", etc....
 
J'ai sûrement loupé un truc... !

n°2271171
Chelmi18
Posté le 09-12-2015 à 10:55:50  profilanswer
 

Oui, tu dois la mettre dans ta macro et tu dois adapter ton code existant de sauvegarde.
 
Dans ta ligne 13 ci-dessous

Code :
  1. "C:\Users\xxx\Desktop\Publipostage\03122015\test\" & i & ".pdf", ExportFormat:= _


remplacer

Code :
  1. & i &


par  

Code :
  1. & listeMails(i - 1) &


n°2271189
klimero44
Posté le 09-12-2015 à 11:45:01  profilanswer
 

Purée ! Je pète un cable !
 
Il me met : "erreur execution 9 "l'indice n'appartient pas à la sélection".
 
Voilà le code
 

Code :
  1. Sub ExportPDF()
  2. Dim NbPage As Integer
  3. Application.ScreenUpdating = False
  4. NbPage = ActiveDocument.Windows(1).Panes(1).Pages.Count 'Compte le nombre de page dans le document
  5. Dim listeMails() As String
  6.     Dim z As Long
  7.     z = 0
  8.     Set myRange = ActiveDocument.Content
  9.     myRange.Find.Text = "email="
  10.     Do While myRange.Find.Execute = True
  11.         ReDim Preserve listeMails(z)
  12.         myRange.Expand Unit:=wdSentence
  13.         listeMails(z) = Right(myRange, Len(myRange) - 6)
  14.         myRange.Delete
  15.         z = z + 1
  16.     Loop
  17. 'Dans cette section, modifier le paramètre "OutputFileName" pour changer le répertoire de sortie.
  18. 'Il est important de laisser la variable I dans le nom du fichier pour garder un numéro de chrono.
  19. For i = 1 To NbPage
  20. ActiveDocument.ExportAsFixedFormat OutputFileName:= _
  21. "C:\Users\xxx\Desktop\Publipostage\03122015\test\" & listeMails(i - 1) & ".pdf", ExportFormat:= _
  22. wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
  23. wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
  24. wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
  25. CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
  26. BitmapMissingFonts:=True, UseISO19005_1:=False
  27. Next
  28. Application.ScreenUpdating = True
  29. MsgBox "Export terminé"
  30. End Sub


 
Désolé Chelmi18 décidemment, tu as affaire à un noob en VBA !


Message édité par klimero44 le 14-12-2015 à 12:18:23
n°2271193
klimero44
Posté le 09-12-2015 à 12:00:01  profilanswer
 

J'ai revu mon document Word en rajoutant email=blabla@bla.fr
 
En executant la macro, il me supprime toute la ligne du mail ! Pas mal ! lol
 
En plus il me met : "erreur d'execution Nom de fichier incorrect" et le fichier Word plante complètement !
 
Grrrrr...... Je vais me pendre et je reviens ! lol


Message édité par klimero44 le 09-12-2015 à 12:03:54
n°2271205
Chelmi18
Posté le 09-12-2015 à 13:15:55  profilanswer
 

Pour l'erreur "erreur execution 9 "l'indice n'appartient pas à la sélection" c'est sans doute que tu n'as pas une correspondance exacte entre le nombre de pages et le nombre de mails trouvés (trop de l'un ou de l'autre).
Vérifie que le compteur en fin de chargement de tableau (indice z) correspond bien au nombre de page - 1 (puisque le tableau commence à 0 et les pages à 1).
 
Pour la seconde erreur "erreur d'execution Nom de fichier incorrect", tu dois avoir une adresse mail qui contient un caractère interdit pour nommer le fichier. C'est vrai que je n'avais pas pensé à ce cas, mais certains caractères ne peuvent pas être utilisés dans les noms de fichiers Windows.
Il s'agit de :
    < (less than)
    > (greater than)
    : (colon)
    " (double quote)
    / (forward slash)
    \ (backslash)
    | (vertical bar or pipe)
    ? (question mark)
    * (asterisk)
 
Si tu as ce type de caractère dans les adresses mails, il va falloir les gérer par un Replace.
 
Dans la partie où tu alimentes le tableau (entre les lignes 16 et 17) ajoutes une instruction par caractère interdit : par exemple listeMails(z) = Replace(listeMails(z), "<", "" ) pour remplacer le caractère par "rien" (deux " accolées).
Tu également le remplacer par un autre caractère comme "-" ou " ".
Ça va donner quelque chose comme ça :
 

Code :
  1. listeMails(z) = Right(myRange, Len(myRange) - 6)
  2. listeMails(z) = Replace(listeMails(z), "<", "" )
  3. listeMails(z) = Replace(listeMails(z), ">", "" )


... etc... pour chacun des caractères interdits jusqu'à

Code :
  1. listeMails(z) = Replace(listeMails(z), "*", "" )
  2. myRange.Delete


 
Sinon, il va falloir passer au débogage pas à pas en affichant les variables locales pour suivre l'exécution du code ...


Message édité par Chelmi18 le 09-12-2015 à 13:17:18
n°2271213
kiki29
Posté le 09-12-2015 à 14:16:51  profilanswer
 

Salut, @klimero44 : va voir une possibilité de réponse sur ton post initial


---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
n°2271234
klimero44
Posté le 09-12-2015 à 14:42:08  profilanswer
 

Merci Chelmi18 pour tes codes supplémentaires. Je vais étudier ça à tête reposée... !
 
Salut Kiki, Quel post initial (j'avoue, j'en ai posté pas mal pour ce sujet.. ! )?

n°2271264
kiki29
Posté le 09-12-2015 à 16:38:05  profilanswer
 
n°2271269
klimero44
Posté le 09-12-2015 à 16:52:42  profilanswer
 

Oui, merci Kiki !
 
En effet, j'avais prévu de te répondre justement !
 
Au fait, par rapport au résultat souhaité, ce n'est pas tout à fait ce que j'espérais ! lol
 
J'ai tenté ton code, mais je ne voudrais pas que mon fichier retourne sur Excel puisque mon publipo lancé, il n'y a pas de lien avec la base d'Excel.
 
Mais merci Kiki ! :-)

n°2271300
klimero44
Posté le 09-12-2015 à 21:32:54  profilanswer
 

Hey !
 
J'ai peut-être trouvé un truc tout bête pour mon histoire de code !
 

Code :
  1. Sub nom()
  2. Dim nom
  3. nom = ActiveDocument.Paragraphs(12).Range.Words(5)
  4. ActiveDocument.SaveAs FileName:= "c:\" & nom & ".doc
  5. End Sub


 
que j'ai chopé ici : http://www.faqword.com/index.php/w [...] un-fichier
 
Si j'arrive à combiner ce code pour ma macro.... Je pourrais peut-être arriver à dormir et récupérer mes cheveux ?


Message édité par klimero44 le 09-12-2015 à 21:33:42
n°2271302
klimero44
Posté le 09-12-2015 à 21:54:27  profilanswer
 

Bon, j'ai réussi à travailler un peu sur le code... J'ai trouvé un bout du problème.
 
Mais il me créé la dernière page de mon fichier qui fait 500 pages et le nom du pdf se nomme le 1er mot de la 1ère page...
 
Voilà le code :
 
Sub ExportPDF()
    Dim NbPage As Integer
    Application.ScreenUpdating = False
    NbPage = ActiveDocument.Windows(1).Panes(1).Pages.Count
    nom = ActiveDocument.Paragraphs(1).Range.Words(1)
    For i = 1 To NbPage
    ActiveDocument.ExportAsFixedFormat OutputFileName:= _
    "C:\Users\xxx\Desktop\pj\" & nom & ".pdf", ExportFormat:= _
    wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
    wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
    wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
    CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
    BitmapMissingFonts:=True, UseISO19005_1:=False
    Next
    Application.ScreenUpdating = True
    MsgBox "Export terminé"
    End Sub
 
 
Je vais bien y arriver bon sang !

Message cité 1 fois
Message édité par klimero44 le 09-12-2015 à 22:07:19
n°2271304
kiki29
Posté le 09-12-2015 à 22:14:12  profilanswer
 

Ok pour moi c'est terminé, le jour où tu sauras ce que tu veux.


Message édité par kiki29 le 09-12-2015 à 22:14:26

---------------
Myanmar 90/91 : http://gadaud.gerard.free.fr/publi [...] index.html
n°2271307
klimero44
Posté le 09-12-2015 à 22:24:33  profilanswer
 

Désolé Kiki ! Ce n'était pas le but !
Tu m'as beaucoup aidé ! Je t'en remercie infiniment !
Je me suis rendu compte que l'on s'est écarté de mon problème de départ. Mon soucis vient de Word et non d'Excel
Mais je conserve tes macros ! J'en aurais sûrement besoin prochainement quand mon patron va me tomber dessus... !
Merci encore Kiki29  ;)


Message édité par klimero44 le 09-12-2015 à 23:01:47
n°2271320
Chelmi18
Posté le 10-12-2015 à 08:49:08  profilanswer
 

klimero44 a écrit :


Mais il me créé la dernière page de mon fichier qui fait 500 pages et le nom du pdf se nomme le 1er mot de la 1ère page...


 
C'est normal, Word ne sait pas gérer le contexte de "Pages" au sens où nous le voyons, ce ne sont que des paramètres de mise en page.
Les objets manipulables par Word sont les Sections, les Paragraphs etc ...
 
Donc Paragraphs(1) est le tout 1er de l'ensemble du document. C'est ce que je te disais un peu plus tôt, dans mon post du 08-12-2015 à 16:05:08 :
 

Citation :

Dans ce cas, il va falloir que tu joues avec les objets Page, Sections et Paragraphs, mais je te souhaites bien du courage puisque tous ces objets sont communs à l'ensemble du document.
Pour faire simple, tu ne peux pas dire Paragraphs(1) de la Page(25) !  


 
Si tu veux en savoir plus, un peu de lecture très instructive (en anglais) : http://shaunakelly.com/word/word-d [...] model.html


Message édité par Chelmi18 le 10-12-2015 à 08:50:34
n°2271326
klimero44
Posté le 10-12-2015 à 10:28:47  profilanswer
 

Ah... J'espérais pouvoir échapper à ces codes...
Je m'y replonge.. !
 
Merci Chemi18 !

n°2271384
klimero44
Posté le 10-12-2015 à 21:40:09  profilanswer
 

Bon... Je m'y replonge...
 
Ta page est en effet très instructive ! Je suis en train de l'éplucher depuis tout à l'heure...
J'avoue, je suis nul en anglais et nul en VBA ! lol !
 
Bon... Mais je m'accroche....
J'en ai un peu marre de passer mes soirées et WE sur ce code...
 
Pour le moment je fais mes essais sur 3 pages de publipo. C'est mieux que 500 ! lol
 
Alors je pensais à un code du genre :
 

Code :
  1. Sub ExportPDF()
  2.     Dim NbPage As Integer
  3.     nom = ActiveDocument.Paragraphs(1).Range.Words(1)
  4.     For i = 1 To NbPage
  5.     ActiveDocument.ExportAsFixedFormat OutputFileName:= _
  6.     "C:\Users\xxx\Desktop\pj\" & nom & ".pdf", ExportFormat:= _
  7.     wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
  8.     wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
  9.     wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
  10.     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
  11.     BitmapMissingFonts:=True, UseISO19005_1:=False
  12.     Next
  13.    
  14.    
  15.     nom = ActiveDocument.Pages(2).Paragraphs(1).Range.Words(1)
  16.     For i = 1 To NbPage
  17.     ActiveDocument.ExportAsFixedFormat OutputFileName:= _
  18.     "C:\Users\xxx\Desktop\pj\" & nom & ".pdf", ExportFormat:= _
  19.     wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
  20.     wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
  21.     wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
  22.     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
  23.     BitmapMissingFonts:=True, UseISO19005_1:=False
  24.     Next
  25.    
  26.    
  27.    
  28.     nom = ActiveDocument.Pages(3).Paragraphs(1).Range.Words(1)
  29.     For i = 1 To NbPage
  30.     ActiveDocument.ExportAsFixedFormat OutputFileName:= _
  31.     "C:\Users\xxx\Desktop\pj\" & nom & ".pdf", ExportFormat:= _
  32.     wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
  33.     wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
  34.     wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
  35.     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
  36.     BitmapMissingFonts:=True, UseISO19005_1:=False
  37.     Next
  38.     Application.ScreenUpdating = True
  39.     MsgBox "Export terminé"
  40.     End Sub


 
La différence entre ces 3 codes est juste "pages(x)" qui change.
 
L'idée est qu'il aille chercher le 1er mot de chaque page et qu'il en fasse un pdf.
 
Allez courage !!

n°2271392
Chelmi18
Posté le 11-12-2015 à 08:48:23  profilanswer
 

Pourquoi tu cherches encore une solution détournée ?
 
Mon code donné plus haut (le 09-12-2015 à 09:50:07) ne fonctionne pas ?

n°2271501
klimero44
Posté le 13-12-2015 à 23:02:12  profilanswer
 

Bonsoir,
Je ne cherche pas une solution détournée Chelmi. Je ne voulais pas t'embéter encore plus.
En effet, lorsque j'ai collé ton code et appuyé sur "lecture", voila le message :
Erreur d'execution '-2147467259 (80004005)' : Nom de fichier incorrect
En cliquant sur débogage, il me met en surbrillance :
 

Code :
  1. ActiveDocument.ExportAsFixedFormat OutputFileName:= _
  2.     "C:\Users\xxx\Desktop\pj\" & listeMails(i - 1) & ".pdf", ExportFormat:= _
  3.     wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
  4.     wdExportOptimizeForPrint, Range:=wdExportFromTo, From:=i, To:=i, Item:= _
  5.     wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
  6.     CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
  7.     BitmapMissingFonts:=True, UseISO19005_1:=False


 
De plus, comme prévu il me shoot l'adresse mail dans Word et Word plante complètement...
Je n'ai pas de caractère interdit. J'ai juste pris des adresses mails "bidons" (ex : dupont@dupont.fr)
 
Du coup, en continuant mes recherches sur le net, j'ai trouvé d'autres codes mais aussi sans résultat... :cry:


Message édité par klimero44 le 13-12-2015 à 23:05:06
n°2271502
klimero44
Posté le 13-12-2015 à 23:16:51  profilanswer
 

J'ai pensé que "@" est un caractère interdit alors, j'ai refais des tests avec comme adresse mails : 123456 (les n°contrats)
Ce refait pareil. Ca rebeug... :-\


Message édité par klimero44 le 13-12-2015 à 23:17:21
n°2271515
Chelmi18
Posté le 14-12-2015 à 08:45:51  profilanswer
 

Non, le @ est bien autorisé.
 
Mais que contient listeMails(i-1) quand ca plante ? Combien vaut i ? Et combien de pages as-tu ?
 
Commence peut-être par afficher ce que tu as mémorisé dans la liste listeMails et vérifie que ca colle avec ce que tu attends en nombre et en contenu.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Publipostage Word en PDF avec base de données Excel

 

Sujets relatifs
Screener marché boursiers ( Macro Excel )Excel : Code macro pour aller chercher les données d'un autre fichier
sed : remplacer valeurs batch sur 2 gigas de données[SQL] Select un nbre max de données = selectionner une ligne sur n.
Recherche de données excel sur 2 tableaux à la fois[Résolu] Rechercher une valeur dans une page
Base de donnée partagée entre iPad et PC.[Excel] De l'art de représenter un graphique de répartition !
Plus de sujets relatifs à : Publipostage Word en PDF avec base de données Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR