yves dutrieux a écrit :
Bonsoir Michel,

Le 16 février 2010 09:24, Michel <[email protected]> a écrit :

Bonjour
J'ai une macro qui fusionne automatiquement un publipostage à partir d'un
logiciel métier INSER (gestion formation).
Pas de souci avec la version 3.1.1 et précédante.
Cela ne fonctionne plus avec la version 3.2.
XP sp3
Des pistes de changement dans le code ?


Il faudrait qu'on dispose de ton code si possible...
Bonjour
Openoffice plante direct sans message d'erreur.
La macro exécute une fusion, répertorie la base dans un fichier .TXT et fait une copie du fichier .odt dans un dossier.

Une macro autoclose

Une macro autoOpen

Option Explicit


Private Sub AutoOpen()

   Dim curDocument As Object '--- Document Courant
   Dim InsInstance As Object    '--- Instance de la base de données sources
   Dim DbcDataBase As Object    '--- base de données source
   Dim MmgMailMerge As Object '--- objet de gestion de la fusion
Dim PpvInstancePrioriter(1) As New com.sun.star.beans.PropertyValue '--- propriétés d'instances de base de données Dim PpvDatabaseInfo(3) As New com.sun.star.beans.PropertyValue '--- Proriétés de la base de données Dim PpvDocumentProprieter(1) As New com.sun.star.beans.PropertyValue'--- proprités du document fusionné que l'on ouvre
   Dim IntPos As Integer    ' compteur pour les boucles
Dim strFilePrefixName As String '-- préfixe du fichier (NOM sans l'extension)
   Dim strTemplateName As String    '--- Nom du  fichier modèle
Dim strTemplateFolder As String '--- Dossier de stockage du modèle de document Dim strDestinationFolder As String '--- Répoertoire de destiantion Dim strOutput As String '--- Fichier de Sortie MODELE_DDMMYY_HHMMSS.odt

   On Error GoTo Err_AutoOpen
curDocument = ThisComponent
   strTemplateName = curDocument.URL '--- Récupération du nom de fichier
'--- s'il s'agit d'une modèle CALC on sort
   Select Case UCase(Right(strTemplateName,3))
Case "ODT" Goto Exit_AutoOpen
   End Select

   '--- Construction des différents chemin
   For IntPos = Len(strTemplateName) To 1 Step -1
       Select Case Mid(strTemplateName,IntPos,1)
           Case "\","/"
               strTemplateFolder = Left(strTemplateName,IntPos)
strDestinationFolder = Left(strTemplateName,IntPos) & "LETTRETYPE/" strFilePrefixName = Mid(strTemplateName,IntPos+1,Len(strTemplateName)-IntPos-4) If FileExists("strDestinationFolder") = False Then
                   mkdir(strTemplateFolder & "LETTRETYPE")
end if Exit For
       End Select
   Next
'--- Création de la base de données de ODB (il s'agit d'une interface en les fichier TEXTE et le docuement sWriter
   DbcDataBase = createUnoService("com.sun.star.sdb.DatabaseContext")
   Select Case    DbcDataBase.hasByName(strFilePrefixName)
Case True DbcDataBase.revokeObject(strFilePrefixName)
   End Select
PpvInstancePrioriter(0).Name = "Overwrite"
   PpvInstancePrioriter(0).Value = True
InsInstance = DbcDataBase.createInstance()
   InsInstance.URL = "sdbc:flat:" + strTemplateFolder
'--- Création des propriétés de la base de données
   PpvDatabaseInfo(0).Name = "DecimalDelimiter"    ' symbole décimal
   PpvDatabaseInfo(0).Value = "."
PpvDatabaseInfo(1).Name = "Extension" ' extention dezs fchier TEXTE source
   PpvDatabaseInfo(1).Value = "TXT"
   PpvDatabaseInfo(2).Name = "FieldDelimiter"        ' délimiter de champs
   PpvDatabaseInfo(2).Value = Chr(9)
PpvDatabaseInfo(3).Name = "StringDelimiter" ' délimiteur des chaînes
   PpvDatabaseInfo(3).Value = ""

InsInstance.Info() = PpvDatabaseInfo ' affectation des propriétés InsInstance.DatabaseDocument.storeAsURL(strTemplateFolder + strFilePrefixName + ".odb",PpvInstancePrioriter()) ' chemin de stocakge
   DbcDataBase.registerObject(strFilePrefixName,InsInstance)
'--- Paramétrage de la fusion MmgMailMerge = createUnoService("com.sun.star.text.MailMerge") MmgMailMerge.DataSourceName = strFilePrefixName
   MmgMailMerge.DocumentURL = strTemplateName
   MmgMailMerge.CommandType = 0
   MmgMailMerge.Command = strFilePrefixName
   MmgMailMerge.OutputType = 2
   MmgMailMerge.OutputURL = strDestinationFolder
strOutput = strFilePrefixName & "_" & Format(Now(),"ddmmyy\_hhmmss") ' construction du nom de sorite
   MmgMailMerge.FileNamePrefix = strOutput
   MmgMailMerge.SaveAsSingleFile = True
MmgMailMerge.Execute (Array()) ' rélisation de la fusion le doc estcréée

'--- Ouverture du document fusionné PpvDocumentProprieter(0).Name = "MacroExecutionMode"
   PpvDocumentProprieter(0).Value = 0
   PpvDocumentProprieter(1).Name = "AsTemplate"
PpvDocumentProprieter(1).Value = 0 curDocument = StarDesktop.LoadComponentFromURL(strDestinationFolder + strOutput + "0.odt", "_blank", 0, PpvDocumentProprieter()) ThisComponent.Close(True) '--- Désallocation avant sortie
Exit_AutoOpen:

   Set curDocument = Nothing
   Set InsInstance = Nothing
   Set DbcDataBase = Nothing
   Set MmgMailMerge = Nothing
   Set PpvInstancePrioriter(0) = Nothing
   Set PpvInstancePrioriter(1) = Nothing
   Set PpvDatabaseInfo(0) = Nothing
   Set PpvDatabaseInfo(1) = Nothing
   Set PpvDatabaseInfo(2) = Nothing
   Set PpvDatabaseInfo(3) = Nothing
   Set PpvDocumentProprieter(0) = Nothing
   Set PpvDocumentProprieter(1) = Nothing
   Exit Sub
'--- Erreur
Err_AutoOpen:
   MsgBox Err & " " & Error$ & " " & Erl
   Resume Exit_AutoOpen
End Sub

Merci
Michel
en +, affiche-t-il un message d'erreur ? est-ce que le code bloque à un
certain endroit et si oui, lequel ?
Le publipostage est fait à partir de quels logiciels : Writer + fichiers
csv/txt/ods/odb ?

Yves


Merci
Michel


--

Soyez eco-citoyen : n'imprimez ce mail que si necessaire.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]






--

Soyez eco-citoyen : n'imprimez ce mail que si necessaire.

Répondre à