Macro publipostage
Bonjour à tous .
Bien que ce genre de sujet n’est pas nouveau
Je viens chercher une aide , malgré nombre de recherches .
Donc: un formulaire pour une BDD ..
Je recherche une macro afin de publiposter après chaque nouvelle entrée dans la BDD.
J’ai tenté avec l’enregistreur de macro mais, soit je publipostage toutes les lignes de la BDD , soit la 1ère ligne lorsque je précise ligne active!! Alors que la dernière entrée et plus bas dans la BDD !!
Si quelqu'un connaît la manip ?
D’avance merci
Bonjour
Je pense qu'il faut travaillé sur la propriété "lastrecord" et firstrecord
il suffit d'indiquer dans ce cas l'enregistrement a traité dans la base de donnée est ta dernière ligne uniquement...
Voici une partie de code que j'ai mis en place pour faire un publipostage par classe d'élèves...
il te montre comment firstrecord et lastrecord fonctionne... a adapter en conséquence...
For i = 2 To Sheets(1).Range("A65536").End(xlUp).Row 'on va boucler sur toutes les classes
'détermine le nombre d'elèves présents dans la classe en cours de traitement
nblig = Application.WorksheetFunction.CountIf(Range("G:G"), Sheets(1).Range("A" & i))
'calcul la ligne de fin du fichier BDD correspondant a la classe en cours de traitement
fin = debut + nblig - 1
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Spécifie la fusion vers un nouveau document
.Destination = wdSendToNewDocument
'suppression des lignes vides
.SuppressBlankLines = True
'impose le debut et la fin des enregistrements
With .DataSource
.FirstRecord = debut - 1 '-1 car la base de données ne tient pas compte de l'entete par rapport a mon calcul sur le fichier xlsm
.LastRecord = fin - 1 '-1 car la base de données ne tient pas compte de l'entete par rapport a mon calcul sur le fichier xlsm
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
'mise en mémoire du nom du fichier a sauvegarder
nom_fichier = cheminW & Sheets(1).Range("A" & i) & ".pdf"
With appWord.ActiveDocument
'export du fichier au format pdf
.ExportAsFixedFormat (nom_fichier), wdExportFormatPDF
'fermeture du fichier fusionné sans enregister le docx
.Close False
End With
'mise a jour de la ligne début pour traiter la classe suivante
debut = fin + 1
Next i
Fred
Bien le bonjour Fred,
Un grand merci pour cet intérêt porté à mon sujet.
Et quelle réactivité ..
Je vais m’intéresser à ta proposition et voire pour adapter.
C’est étrange ce fonctionnement que j’obtiens, mais bon, je vais essayer de comprendre avec ce que tu as exposé..
Merci bien
Je reviendrai pour la suite, et avec le résultat obtenu.
Bon après midi
Re
Sinon fournit un fichier test et je regarderais ce que je peux faire..Fred
Pour info, a l'ouverture du doc publipostage type, je ferme XL.
Quand je tente d'adapter ton code il me met des erreurs au niveau du worksheetfunction.
Voici un code que j'utilise, il ne me convient pas tel que ,comme expliqué et
Je ne sais pas encore si j'imprimerai directement après publipostage ou non.
Private Sub btpublipo2_Click()
'
' publipo2 Macro
'
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\ mon fichier.xlsm", ConfirmConversions:= _
False, ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
Connection:= _
"Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\mon fichier.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engine Type=37;Jet OLEDB:Databas" _
, SQLStatement:="SELECT * FROM `BDD$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=False
End With
End Sub
Bonjour
si tu veux que le dernier enregistrement, essai ceci :
With .DataSource
.FirstRecord = wdDefaultLastRecord
.LastRecord = wdDefaultLastRecord
End With
sinon je le répète fournit des fichiers de travail (anonymiser si nécessaire...)
Fred
Bonjour,
j'ai essayer ton code, qui au final, édite la première ligne vide en fait.
Voila un extrait du fichier et le code avec des infos bidons.
Avec le N° en haut a gauche du doc type, tu pourras voir quelle est la ligne qui est publipostée.
espérant que cela suffise pour la compréhension
Merci
Re bonjour
ci joint un essai...
la problèmatique est que dans ton fichier BDD ton tableau avait 4 lignes vides... donc 1ere chose a faire supprimer ces lignes vides ....
ensuite j''ai corrigé le code du publipostage en mettant
.FirstRecord = ActiveDocument.MailMerge.DataSource.RecordCount
.LastRecord = ActiveDocument.MailMerge.DataSource.RecordCount
etant donner que le document word ouvert est déjà la source du publipostage avec déjà la connexion à la BDD inutile de la refaire par macro...
Fred
Bonsoir,
Parfait,
La correction est efficace .
Je tiens compte de ce que tu as expliqué et serais vigilant avec cette BDD.
Pas évidente ces propriétés last et first
Merci pour tes interventions.
j'en profite pour te souhaiter à toi et à ton entourage :
De très Bonnes Fêtes de Fin d'Année
Bonsoir.
N'oublie pas... de clôturer le sujet... si le problème est résolu
Bonnes fêtes aussi à toi et tes proches
Fred