Publipostage une fois sur deux
Bonjour à tous,
après plusieurs mois de développement j'utilise enfin en version test mon fichier excel avec Userform qui me permet lors de mes consultations de consigner les données du patients, l'examen clinique, et la comptabilité.
Ca marche pas trop mal , mais j'ai evidemment des petites améliorations à apporter....
L'une d'elle (censé me faire gagner du temps) , c'est de pouvoir élaborer des "courriers types" à partir des données enregistrées.
Pour ça j'ai créé un bouton sur ma feuille principale, qui m'ouvre un deuxieme UserForm, avec différent CommandButton renvoyant chacun vers un document word spécifique (courrier urgence, courrier confrère, courrier consoeur, courrier confrere/consoeur après appel telephonique, courrier ami , courrier amie, ordo examen radiologique...)et un COmmandButton "quitter".
Après différentes modification, j'ai un bug que je n'explique pas.... (Je rappelle que je reste un "un peu mieux que newbie" après ces qq mois de VBA, et que mon appli est un melange de trucs compris et perso /copiage de code trouvé sur internet / copiage de code de l'enregistreur de macro...)
Initialement tous mes fichiers word étaient enregistré avec le "chemin de publipostage", mais en passant par mon appli excel, il ne reconnaissait jamais le chemin, et à chaque nouveau document que j'ouvrais, je devais aller rechercher la "source de destinataire..." soit une petite dizaine de clic inutile et chronophage.
Du coup , j'ai fait plusieurs chose : j'ai modifié le Registre Regedit, pour "faire confiance au chemin de publipostage". Resultats moyens...
Puis j'ai modifié le code des boutons en insérant un bout de code issu de l'enregistreur de macro...
ça donne ça
Private Sub CommandButton1_Click()
Dim wrdApp As Word.Application
Set wrdApp = New Word.Application
wrdApp.Visible = True
wrdApp.Documents.Open (ActiveWorkbook.Path & "/courriers/courrier_urgence.docx")
ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:\Users\Dr Erwan PRIGENT\Dropbox\appli_sos_win\appli_sos_win_betatest.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:\Users\Dr Erwan PRIGENT\Dropbox\appli_sos_win\appli_sos_win_betatest.xlsm;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Engin" _
, SQLStatement:="SELECT * FROM `Patients$`", SQLStatement1:="", SubType:= _
wdMergeSubTypeAccess
ActiveDocument.MailMerge.ViewMailMergeFieldCodes = wdToggle
End Sub
Au final, quand je test , en cliquant sur "urgence" par exemple...
ça marche.
puis je ferme word .
puis si je recommence en cliquant à nouveau sur "urgence"
il me met :
"erreur d'execution '462'
le serveur distant n'existe pas ou n'est pas disponible"
je ferme le déboggueur et je ferme le document word qu'il m'avait qd meme ouvert sans tenir compte du publipostage...
Je retente en cliquant à nouveau sur "urgence"
ça marche
je referme word
je retente à nouveau "urgence"
ça rebug
je referme word et le deboggueur
Je retente à nouveau "urgence"
ça remarche...
Bref, Une fois sur deux ça bug... et ça marche une fois sur deux, sans avoir fait de mofication de code ou quoi que ce soit...
Quelqu'un aurait il une idée, pour que ma solution soit moins bancale?
Je suis preneur si cela existe d'une meilleur solution que le publipostage... car je dois encore entrer le numero de ligne du patient concerné... J'ai vu par ci par là des solutions incluant des "balise" sans jamais trouver de tuto bien expliqué...
Merci à vous .
Bonsoir
Teste en mettant avant le END SUB
Set wrdApp =Nothing
bonjour à tous,
après plusieurs semaine de test, et avec l'erreur une fois sur deux au publipostage (erreur 462...) que je tolérais, j'en ai eu finalement marre. Et j'ai cherché de façon plus approfondie sur le net.
J'ai eu du mal à comprendre les publication francophone, mais celle ci m'a plutot bien aidé.
https://anictteacher.files.wordpress.com/2011/11/vba-error-462-explained-and-resolved.pdf
En gros c'est une histoire de référence... (toujours pas un pro de VBA !
du coup les modifications :
'Dim wrdApp As Word.Application modifé en ...
Dim wrdApp As Object
puis
' Set wrdApp = New Word.Application modifé en ...
Set wrdApp = CreateObject("Word.Application")
puis dans le code,
tout ce qui était
ActiveDocument.Machintruc_à_réaliser.Vas_y
a été transformer en ...
wrdApp.ActiveDocument.Machintruc_à_réaliser.Vas_y
et depuis plus de problème de Erreur 462, et de publipostage une fois sur deux...
finir par Set wrdApp = Nothing, n'avait rien changé seul, mais au moins ça libere la memoire de le mettre à la fin.
Voilà ,
J'espère que c'est pas trop bancale comme solution,
j'espère que ça pourra aidé d'autres personne comme moi.
à bientot