Macro publipostage Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Marec
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 19 novembre 2019
Version d'Excel : Office365

Message par Marec » 22 décembre 2019, 13:55

Bonjour à tous .
8[]

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
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 2'059
Appréciations reçues : 37
Inscrit le : 13 mai 2014
Version d'Excel : O365Pro-2019-2011MAC
Version de Calc : 6.3

Message par fred2406 » 22 décembre 2019, 14:32

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
Je ne réponds pas aux M.P. non sollicités.
Ne pas oublier :
:btres:
Fred :O-O:
M
Marec
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 19 novembre 2019
Version d'Excel : Office365

Message par Marec » 22 décembre 2019, 15:05

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
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 2'059
Appréciations reçues : 37
Inscrit le : 13 mai 2014
Version d'Excel : O365Pro-2019-2011MAC
Version de Calc : 6.3

Message par fred2406 » 22 décembre 2019, 15:15

Re
Sinon fournit un fichier test et je regarderais ce que je peux faire..Fred
Je ne réponds pas aux M.P. non sollicités.
Ne pas oublier :
:btres:
Fred :O-O:
M
Marec
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 19 novembre 2019
Version d'Excel : Office365

Message par Marec » 22 décembre 2019, 17:55

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
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 2'059
Appréciations reçues : 37
Inscrit le : 13 mai 2014
Version d'Excel : O365Pro-2019-2011MAC
Version de Calc : 6.3

Message par fred2406 » 23 décembre 2019, 11:17

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
Je ne réponds pas aux M.P. non sollicités.
Ne pas oublier :
:btres:
Fred :O-O:
M
Marec
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 19 novembre 2019
Version d'Excel : Office365

Message par Marec » 23 décembre 2019, 14:48

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
rjs poste.xlsm
(160.54 Kio) Téléchargé 4 fois
publi2.docm
(23.88 Kio) Téléchargé 4 fois
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 2'059
Appréciations reçues : 37
Inscrit le : 13 mai 2014
Version d'Excel : O365Pro-2019-2011MAC
Version de Calc : 6.3

Message par fred2406 » 23 décembre 2019, 16:33

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
publi2.docm
(23.65 Kio) Téléchargé 8 fois
rjs poste.xlsm
(160.28 Kio) Téléchargé 6 fois
Je ne réponds pas aux M.P. non sollicités.
Ne pas oublier :
:btres:
Fred :O-O:
M
Marec
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 19 novembre 2019
Version d'Excel : Office365

Message par Marec » 23 décembre 2019, 20:10

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
Avatar du membre
fred2406
Membre impliqué
Membre impliqué
Messages : 2'059
Appréciations reçues : 37
Inscrit le : 13 mai 2014
Version d'Excel : O365Pro-2019-2011MAC
Version de Calc : 6.3

Message par fred2406 » 23 décembre 2019, 21:26

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
Je ne réponds pas aux M.P. non sollicités.
Ne pas oublier :
:btres:
Fred :O-O:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message