Imprimer le dernier enregistrement publipostage VBA Excel
Bonjour
je reviens vers vous aujourd’hui car je ne sais pas comment m'y prendre et si c'est possible!
Je souhaiterais effectuer un publipostage vers Word de données contenues dans mon fichier excel, en cliquant sur un bouton me imprimer
que le dernier enregistrement. le code pour le moment me imprime tous les enregistrements; voici le code:
Private Sub CommandButton5_Click()
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String
NomBase = "\\192.168.0.107\Google Drive\partage\POINTAGESVS\Nouveau dossier (2)\SIDALI.xlsm"
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("\\192.168.0.107\Google Drive\partage\POINTAGESVS\Nouveau dossier (2)\contrat.docx")
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xlsm)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [contrat$]"
'Spécifie la fusion vers l'imprimante
.Destination = wdSendToPrinter
.suppressBlankLines = True
'Prend en compte l'ensemble des enregistrements
With DataSource
.ActiveRecord = i - 1
End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub
Merci par avance de votre aide
Macro EXCEL pour publipostage avec ligne active
Je rencontre une grande difficulté pour réaliser une macro consistant à exécuter un publipostage à partir d'un fichier excel, et ce uniquement concernant la ligne active (selectionnée).
Je dispose une base de donnée excel, et d'un fichier word dont le publipostage et les champs sont déjà créés
Voici ma macro, qui fonctionne, mais en IMPRIMANT toutes les lignes!
Je souhaiterais imprimer que la dernier ligne enregistrer
Private Sub CommandButton5_Click()
'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String
Dim lstrw As Long
NomBase = "C:\Users\SIDALI\Desktop\Nouveau dossier (2)\SIDALI.xlsm"
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
'Ouverture du document principal Word
Set docWord = appWord.Documents.Open("C:\Users\SIDALI\Desktop\Nouveau dossier (2)\contrat.docx")
'fonctionnalité de publipostage pour le document spécifié
With docWord.MailMerge
'Ouvre la base de données
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xlsm)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [contrat$]"
[u] 'Spécifie la fusion vers l'imprimante
.Destination = wdSendToPrinter
.suppressBlankLines = True
'Prend en compte l'ensemble des enregistrements
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
[/u] End With
'Exécute l'opération de publipostage
.Execute Pause:=False
End With
Application.ScreenUpdating = True
'Fermeture du document Word
docWord.Close False
appWord.Quit
End Sub
merci
Bonjour SIDALIADEM,
C'est facile, il suffit de récupérer le n° de contrat de la dernière ligne ou celui de la ligne sélectionnée pour l'inclure dans la clause Where de la requête Sql, comme ceci :
Dim lg As Long, num_contrat As Long, Entete As String
With Sheets("contrat")
lg = .Cells(Rows.Count, 1).End(xlUp).Row
' ou bien: lg = Selection.Row ' pour avoir la ligne sélectionnée
num_contrat = .Cells(lg, "A")
Entete = .Range("A1").Value
End With
' ...
SQLStatement = "SELECT * FROM [contrat$] WHERE " & Entete & " = " & num_contrat
' ...
Pierre
merci pierrep56 je vais essayer