[Résolu][Calc] Mise à jour des données pour publipostage

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
rapha_d
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 15 oct. 2016 13:26

[Résolu][Calc] Mise à jour des données pour publipostage

Message par rapha_d »

Bonjour,

Je rencontre le problème suivant, je fais un publipostage à partir d'une feuille calc, grâce aux conseils de bons nombres d'entre vous, tout fonctionne bien
sauf que que ma base ne prends pas les changements de suite, ils ne sont pris en compte que si je ferme le classeur puis je l ouvre à nouveau.
Dude m'a orienté sur le fait que chaque connexion "service com.sun.star.text.MailMerge",doit etre fermé, une fois le processus terminé.
Il me semble que c est ce que je fais avec la commande : "PysMailing.dispose()" mais rien n'y fait. Est ce que je l'utilise mal???
Voici mon code, merci de votre aide.

Code : Tout sélectionner

Sub EnregistreSourceODB

   Dim NomSource as string
   Dim Chemin as string
   Dim NomBase as string
   Dim Classeur as string
   NomSource = "courrier_direction"
   Chemin = "D:\Secretariat"
   NomBase = "courrier_direction.odb"
   Classeur = "courrier_direction.ods"
   
   oContexte = createUnoService("com.sun.star.sdb.DatabaseContext")
   If oContexte.hasByName(NomSource) Then
      PysPublipostage(modeleEtq,cheminEtq,NomSource,"Etiquettes")
   Else
      oSrcODB = createUnoService("com.sun.star.sdb.DataSource")
      sUrl = ConvertToURL(Chemin)
      oSrcODB.DatabaseDocument.storeAsURL(sUrl & "/" & NomBase, Array())
      sUrl = "sdbc:calc:" & sUrl & "/" & Classeur
      oContexte.registerObject(NomSource, oSrcODB)
      oSrcODB.setPropertyValue("URL", sUrl)
      oSrcODB.DatabaseDocument.store()
   End If

End Sub

sub PysPublipostage(PysModele as string, PysRepDest as string, PysNomSource as string, PysDonnees as string)
    Dim PysMailing as Object, PysProps(), PysTrav as string, PysMod as object
    Dim propFich(0) as New com.sun.star.beans.PropertyValue
    'Dim oShell As Object
		
    PysMailing=createUnoService("com.sun.star.text.MailMerge")
 	
    with PysMailing
       .DataSourceName=PysNomSource
       .CommandType=com.sun.star.sdb.CommandType.TABLE
       .Command=PysDonnees
       .SaveAsSingleFile=true
       .FileNamePrefix=PysTrav
       .OutputType=com.sun.star.text.MailMergeType.FILE
       .DocumentURL=convertToURL(PysModele)
       .OutputURL=convertToURL(PysRepDest)
       .execute(PysProps())
    end with

	PysMailing.dispose()
	
		if msgbox("Votre fichier étiquettes se trouve à cet emplacement :" & PysRepDest & ", Il se nomme : " & "etiquettes0" & (Chr$(13)) & _
		"Voulez-vous l'ouvrir ?",4,"essai")=6 then
	 		oShell = createUnoService("com.sun.star.system.SystemShellExecute")  
  			oShell.execute(ConvertToUrl(PysRepDest + "\etiquettes0.odt"), "", 0)  
		end if
end sub
Windows 10 Libre office 4.6
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25183
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Mise à jour des données pour publipostage

Message par Dude »

Salut,

Déjà, je ne vois pas comment le code que tu fournis pourrait fonctionner.

Code : Tout sélectionner

PysPublipostage(modeleEtq,cheminEtq,NomSource,"Etiquettes")
Comment sont définies les 2 premières variables que tu passes à ta fonction ?

Ensuite, tu places une balise [Calc] dans ton titre.
Cela signifie t-il que tu exécutes ta macro depuis un classeur ?

Commence par faire le test d'un publipostage depuis la source Bibliography.
Ceci afin de voir si le dysfonctionnement existe toujours.
rapha_d
Membre lOOyal
Membre lOOyal
Messages : 27
Inscription : 15 oct. 2016 13:26

Re: [Calc]Mise à jour des données pour publipostage

Message par rapha_d »

Merci Dude,

Mes 2 premières variables sont définies comme suit :

Code : Tout sélectionner

Const modeleEtq as string = "D:\Secretariat\etiquettes.odt"	'Emplacement du fichier "Modele etiquettes"
Const cheminEtq as string = "D:\essai"	'Emplacement du fichier fusionné des etiquettes
en effet car elle s'initialise à partir de Calc
Le Publipostage fonctionne bien mais chaque fois avec un coup de retard. je m'explique j ai une feuille qui permet de faire la sélection grâce à des case à cocher
un bouton récupère les infos des lignes ou les cases sont sélectionnées les copie sur une autre feuille du même classeur, feuille que je me sers pour mon publipostage.
toute ces phases fonctionnent bien, la sélection est sur 1 et 2, je lance le publipostage les etiquettes auront les rens des lignes 3 et 4 de ma selection précédente.
je ferme et je rouvre, je fais sélection des lignes 5 et 6 les étiquettes seront sur 3 et 4..... je ne peux pas demander qu ils ferment et ouvrent l'appli entre chaque traitement.
Windows 10 Libre office 4.6
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25183
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Mise à jour des données pour publipostage

Message par Dude »

rapha_d a écrit :en effet car elle s'initialise à partir de Calc
Donc c'est logique que la fermeture de connexion ne suffise pas.
Il faut enregistrer le classeur avant l'action de publipostage.
C'est la solution que tu donnes d'ailleurs dans ce fil.