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

Rechercher des sujets similaires à "publipostage fois deux"