Ah oui j’avais fait une erreur
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR01’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
strCheminDoc = « F:INTRODUCTIONCTIBR02.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR02FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR02’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR02’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
Set wdApp = Nothing
End Sub
En fait oui chaque fusion se fait à partir CTIBRxy ou CTxy.
En fait l’objectif est que la secrétaire est juste à remplir un tableau en choisissant le code du courrier correspondant pour chaque client. Puis ensuite qu’elle appuie sur un bouton et que les différents type de courrier sortent. Personnalisée bien sur !
gds10 > Ce n’est pas une bonne idée de copier/coller le code pour le répéter : cela crée du code redondant et donc moins évolutif. Une procédure paramétrée sera plus pratique. Pour situer :
Il s’agit bien de fusionner des enregistrements de la table INTRO qui ont un code CTIBRxy vers un document qui s’appellera CTIBRxyFUSION.doc ?
Toutes les fusions partent de CTIBR01 ? (ce ne serait pas au contraire CTIBRxy ?)
Merci beaucoup,
Ça marche pour le 1er.
Mais si je simule CTIBR01 est vide alors il me sort bien le message.
Et si ensuite pour le 2ème courrier CTIBR02 il y a des données, il ne poursuit pas la commande.
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR01’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
Exit Sub
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR02FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR02’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR02’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
Exit Sub
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
Bonjour,
Alors pour résumer, j’ai créé un publipostage ACCESS / WORD pour une sortie de courrier automatique.
J’ai 8 courriers différents, et à chaque fois seul 1 ou plusieurs serviront.
J’ai mis ce code dans un bouton d’action :
Code :
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
Set wdApp = Nothing
End Sub
Cela fonctionne très bien, à part quand il n’existe par encore une ligne pour un type de courrier, et du coup ça bug, à partir de cette ligne vide.
Auriez vous une solution ? Je pensais peut être mettre une fonction IF ??
Et bien depuis tout à l’heure j’ai réfléchi…et en fait il faudrait que je puisse ajouter une condition qui dirait que si le fichier n’existe pas dans ma table ACCESS je passe à l’autre fichier.
Voilà ma commande mis dans le click du bouton
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
Set wdApp = Nothing
End Sub
J’ai créé un publipostage ACCESS / WORD pour une sortie de courrier automatique.
J’ai 8 courriers différents, et à chaque fois seul 1 ou plusieurs serviront.
J’ai mis ce code dans un bouton d’action :
Cela fonctionne très bien, à part quand il n’existe par encore une ligne pour un type de courrier, et du coup ça bug, à partir de cette ligne vide.
J’ai utilisé votre code pour faire un publipostage ACCESS/ Word.
Cela marche très bien, ça ce complique juste quand on plusieurs types de courriers !! En effet, je copie le code pour chaque type de courrier. Cela fonctionne quand des données sont entré pour ce type de courrier, mais si des données ne sont pas encore entré pour ce courrier, alors ça bug. Auriez vous une solution ?
Merci
Vous trouverez ici tout un ensemble de trucs et astuces concernant le logiciel Microsoft Access, de préférence en vrac, comme dans tout grenier qui se respecte !
Et comme le tout est géré sous forme de blog, vous pouvez laisser vos commentaires sur chaque billet. N'hésitez pas !
Ça y est j’ai trouvé la solution.
Merci
Ah oui j’avais fait une erreur
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR01’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
strCheminDoc = « F:INTRODUCTIONCTIBR02.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR02FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR02’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR02’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
Set wdApp = Nothing
End Sub
En fait oui chaque fusion se fait à partir CTIBRxy ou CTxy.
En fait l’objectif est que la secrétaire est juste à remplir un tableau en choisissant le code du courrier correspondant pour chaque client. Puis ensuite qu’elle appuie sur un bouton et que les différents type de courrier sortent. Personnalisée bien sur !
gds10 > Ce n’est pas une bonne idée de copier/coller le code pour le répéter : cela crée du code redondant et donc moins évolutif. Une procédure paramétrée sera plus pratique. Pour situer :
Merci beaucoup,
Ça marche pour le 1er.
Mais si je simule CTIBR01 est vide alors il me sort bien le message.
Et si ensuite pour le 2ème courrier CTIBR02 il y a des données, il ne poursuit pas la commande.
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR01’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
Exit Sub
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR02FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR02’ AND [Courrier envoyé]=’Non' »
If DCount(« * », « INTRO », « [Type de courrier] = ‘CTIBR02’ AND [Courrier envoyé] = ‘Non' ») = 0 Then
MsgBox « Aucune donnée ! », vbInformation
Exit Sub
End If
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
Le problème se pose quand il n’y a aucune ligne dans la table INTRO, par rapport au filtre demandé, c’est bien ça ?
Si c’est le cas, il faudrait effectivement tester le nombre de lignes avant de lancer toute l’opération. Par exemple, après le strSQL = « … » :
Bonjour,
Alors pour résumer, j’ai créé un publipostage ACCESS / WORD pour une sortie de courrier automatique.
J’ai 8 courriers différents, et à chaque fois seul 1 ou plusieurs serviront.
J’ai mis ce code dans un bouton d’action :
Code :
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
Set wdApp = Nothing
End Sub
Cela fonctionne très bien, à part quand il n’existe par encore une ligne pour un type de courrier, et du coup ça bug, à partir de cette ligne vide.
Auriez vous une solution ? Je pensais peut être mettre une fonction IF ??
D’avance merci
Et bien depuis tout à l’heure j’ai réfléchi…et en fait il faudrait que je puisse ajouter une condition qui dirait que si le fichier n’existe pas dans ma table ACCESS je passe à l’autre fichier.
Voilà ma commande mis dans le click du bouton
Private Sub Commande60_Click()
Dim wdApp As Word.Application
Dim strCheminDoc As String, strCheminFusion As String
Dim strSQL As String
strCheminDoc = « F:INTRODUCTIONCTIBR01.doc »
strCheminFusion = « F:INTRODUCTIONCOURRIERCTIBR01FUSION.doc »
strSQL = « SELECT * FROM [INTRO] WHERE [Type de courrier]= ‘CTIBR01’ AND [Courrier envoyé]=’Non' »
Set wdApp = New Word.Application
With wdApp
.Visible = True
.Documents.Open strCheminDoc
With .ActiveDocument.MailMerge
.OpenDataSource Name:=CurrentProject.FullName, _
SQLStatement:=strSQL, _
ReadOnly:=False
.Destination = wdSendToNewDocument
.Execute
End With
.ActiveDocument.SaveAs FileName:=strCheminFusion
End With
Set wdApp = Nothing
End Sub
J’ai créé un publipostage ACCESS / WORD pour une sortie de courrier automatique.
J’ai 8 courriers différents, et à chaque fois seul 1 ou plusieurs serviront.
J’ai mis ce code dans un bouton d’action :
Cela fonctionne très bien, à part quand il n’existe par encore une ligne pour un type de courrier, et du coup ça bug, à partir de cette ligne vide.
D’avance merci
gds10 > Quel est le bout de code qui pose problème ?
J’ai utilisé votre code pour faire un publipostage ACCESS/ Word.
Cela marche très bien, ça ce complique juste quand on plusieurs types de courriers !! En effet, je copie le code pour chaque type de courrier. Cela fonctionne quand des données sont entré pour ce type de courrier, mais si des données ne sont pas encore entré pour ce courrier, alors ça bug. Auriez vous une solution ?
Merci