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

6rjs-poste.xlsm (160.54 Ko)
6publi2.docm (23.88 Ko)

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

21publi2.docm (23.65 Ko)
16rjs-poste.xlsm (160.28 Ko)

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

Rechercher des sujets similaires à "macro publipostage"