Merci Je vais essayer de transposer tout ca sous Windev ...
Pourquoi utiliser une macro dans OpenOffice ? Merci pour votre aide -----Message d'origine----- De : Essonne Consultants [mailto:[EMAIL PROTECTED] Envoyé : jeudi 6 juillet 2006 13:54 À : prog@fr.openoffice.org Objet : RE: [prog] Publipostage ... Bonjour, Moi aussi je réalise des fusions avec office, après recherches et aides de certaines personnes, voilà comment je fais avec Open Office. Le problème que je n'ai pas encore résolu est le fait que si j'ai 5 enregistrements dans mon fichiers de données cela me créé 5 courriers et je préférerais 1 courrier avec 5 pages comme dans Word. 1) Dans mon application Access je lance Open Office et la macro macro_Courpubimp par la commande suivante : Private Sub Open_Office_Click() On Error GoTo Err_Open_Office_Click Dim stAppName As String stAppName = "C:\Program Files\OpenOffice.org 2.0\program\swriter.exe macro:///standard.module1.macro_courpubimp" Call Shell(stAppName, 1) Exit_Open_Office_Click: Exit Sub Err_Open_Office_Click: MsgBox Err.Description Resume Exit_Open_Office_Click End Sub 2) Contenu de la macro macro_courpubimp qui lance la macro publipostage : Sub macro_courpubimp ' Dimensionnement de la valeur de retour de la fonction PubliPostage, ' pour savoir si la fonction s'est bien passée Dim RetourValeur as long ' Lancement de la procédure de publi-postage : attention au chemin du répertoire des modèles d'Openoffice RetourValeur = Publipostage("D:/Logement/Open Office/", "test", "trt") If RetourValeur then ' Si problème, on informe l'utilisateur MsgBox("Un problème a eu lieu lors de la fonction PubliPostage. Vérifiez votre impression s'il vous plait.") endif end sub 3) Contenu de la macro publipostage en vert les commentaires: Function Publipostage(Chemin as string, ArgNomBase As String, ArgNomTable as String) on error goto ErreurPubliPostage ' Ouverture du modèle et création d'un nouveau document Dim oDesktop As Object Dim oDocument As Object ' Nouveau document créé à partir du modèle dim tUrl as String ' Contiendra le chemin complet du fichier modèle Dim NoArgs() as New com.sun.star.beans.PropertyValue Dim oDocClose Dim dispatcher as Object Dim parser as Object Dim disp as Object Dim url as new com.sun.star.util.URL Dim oFrame as Object ' Vérification si Chemin possède un "/" à la fin, si non, on en met un. On enlève les espaces devant/derriere. Chemin=trim(Chemin) If Right(Chemin,1) <>"/" then Chemin=Chemin+"/" endif ' Connexion au service, nécessaire pour le fonctionnement de toutes les propriétés et méthodes oDesktop = createUnoService("com.sun.star.frame.Desktop") ' Connexion à la base de données et récupération des enregistrements. ' Celle-ci doit avoir été renseignée dans le menu Outils/Source de données, avec les noms indiqués ' Dans la ligne de commande lançant la macro ("test", "trt" dans mon exemple). ' Le premier terme désigne la base de données, le deuxième la table dans la base de données. dim oRowSet as object ' Equivalent d'un Dynaset, autrement dit ' une "image" dynamique de la table. dim ChaineSQL as String ' Chaine qui contiendra la requête SQL de chargement du RowSet ' Connexion au service de gestion des base de données oRowSet = createUnoService("com.sun.star.sdbc.RowSet") ' Définition de la base de données à atteindre oRowSet.SetPropertyValue("DataSourceName",ArgNomBase) ' Chargement de la chaîne contenant la requête SQL ChaineSQL = "select * from " + ArgNomTable ' Affectation de la requête SQL oRowSet.SetPropertyValue("Command",ChaineSQL) ' Exécution de la requête SQL oRowSet.execute 'Récupération du nom des colonnes dim mData as object ' Contiendra les données du RowSet dim n as integer dim NbColonnes as integer ' Le nombre de colonnes du RowSet mData = oRowSet.getMetaData() NbColonnes= mData.ColumnCount dim NomColonnes(NbColonnes) As String ' Dimensionnement du tableau des noms de colonnes if oRowSet.RowCount > 0 then ' S'il existe des lignes dans la table... oRowSet.next() for n=0 to NbColonnes - 1 NomColonnes(n) = mData.getColumnName(n+1) ' On charge le nom des colonnes (1ere ligne) next n endif 'Remplissage des champs Dim oChamps, tfm, InpFieldEnum, InpField As Object dim NomColonneChamps as String do while not oRowset.isAfterLast ' Teste si Fin de fichier (EOF) ' Ouverture du document de la ligne d'enregistrement for n=0 to NbColonnes-1 if NomColonnes(n)="TYPCOUR" then ' Nom de la colonne dans mon fichier de données contenant le nom du fichier modèle ' Chargement de l'Url menant au fichier modèle, il faudrait modifier le chemin absolu, ' Pour le placer en variale de ligne de commande par exemple tUrl="file:///" + Chemin + oRowSet.getString(n+1) +".ott" endif next n ' Chargement du document oDocument = oDesktop.LoadComponentFromURL(tUrl,"_blank",0,NoArgs()) ' Important : on charge dans oChamps tous les champs du modèle, ' Comprendre les champs qui peuvent être modifiés dans le document modèle. oChamps = oDocument.getTextFields ' Création d'une énumération des champs texte du modèle InpFieldEnum = oChamps.createEnumeration() do while InpFieldEnum.hasMoreElements ' Tant qu'il reste des champs texte pas énumérés InpField = InpFieldEnum.nextElement() if InpField.supportsService("com.sun.star.text.TextField.Database") then tfm = InpField.getTextFieldMaster() ' Chargement du nom du champ texte dans le modèle, pour vérification ensuite avec le nom des colonnes dans la base de données NomColonneChamps = InpField.getTextFieldMaster.getPropertyValue("DataColumnName") for n=0 to NbColonnes-1 ' De la première à la dernière colonne de la base données... if NomColonneChamps = NomColonnes(n) then ' Le nom de la colonne est-il le nom du champ texte ? InpField.Content = oRowSet.getString(n+1) ' Si oui, la valeur du champ est chargée depuis la BDD exit for ' et on sort de la boucle endif next n endif loop oChamps.Refresh ' Rafraichir tous les champs du document modèle ' oDocument.print(NoArgs()) ' Enlever le ' au début de la ligne si tu veux imprimer directement ' oDocClose=StarDesktop.ActiveFrame.Dispose ' Enlever le ' au début de la ligne si tu veux fermer le document oRowset.next ' On passe à la ligne suivante loop ' Retour case départ wait 2000 ' Bon, là c'est pas très propre ! J'aurai préféré avoir une ' routine qui attends que l'impression soit terminée. PubliPostage=0 Goto FinPubliPostage ErreurPubliPostage: PubliPostage = ERR MsgBox ("Erreur" & ERR & "." & chr$(13) & ERROR$) FinPubliPostage: End Function 4) Voici le contenu de mon fichier de données (Dans le champ TYPCOUR est le nom de mon modèle : Relance): "TYPCOUR";"Ins_Département";"Ins_Ville";"Ins_Mois";"Ins_Numéro";"Ins_Date";" DateEchéance";"Nom_et_prénom";"Civilité_Demandeur";"Délai_attente";"Ins_Date _Initiale";"Ancienneté_Ville";"Adresse_Demandeur" Relance;91;258;504;634;03/05/2004;03/05/2005;"DURAND Marcel";"Monsieur";"25 mois";03/05/2004;"01/09/2000";"34 ter, allée Jean Rostand" Relance;91;258;504;637;03/05/2004;03/05/2005;"AKANE Vichy";"Mademoiselle";"25 mois";03/05/2004;"01/01/1985";"2, rue de l'Orge" Relance;91;258;504;638;03/05/2004;03/05/2005;"BENAHMED Youcef";"Monsieur";"25 mois";03/05/2004;"01/08/1981";"201, rue Rothenberg" Je recréé ce fichier par un export avant de lancer ma fusion 5) Déclarer dans OO fichier, nouveau, base de données le fichier de données (base test, table trt dans mon exemple) En espérant que cela te soit utile, n'hésite pas à me demander des explications si cela n'est pas clair Je dois basculer une appli d'Access vers Windev 10 donc tes recherches pourrait m'intéresser. Bon courage, Philippe Leleux [EMAIL PROTECTED] -----Message d'origine----- De : Cezame Concept [mailto:[EMAIL PROTECTED] Envoyé : jeudi 6 juillet 2006 10:55 À : prog@fr.openoffice.org Objet : [prog] Publipostage ... Bonjour, Après plusieurs recherches jai trouvé une base de travail pour réaliser un publipostage avec oOWriter.. Je réalise aujourdhui un publipostage avec Microsoft Office dans une application Je souhaiterais juste transposer en fait ce que je fais sous Microsoft Office sous OpenOffice Aujourdhui je réalise ceci sous Microsoft Office : PROCEDURE PubliPostage(ModèleAUtiliser, SourceDonnées, DocumentFinal) MonDocWord est un objet OLE dynamique MonDocWord = allouer un objet OLE "Word.Application" //Document Visible MonDocWord>>visible=Faux //Ouverture du modèle MonDocWord>>Documents>>Open(ModèleAUtiliser) //Lancement du publipostage MonDocWord>>Activedocument>>Mailmerge>>OpenDataSource(SourceDonnées) MonDocWord>>ActiveDocument>>MailMerge>>Execute(Faux) Multitâche(-30) MonDocWord>>ActiveDocument>>SaveAs(DocumentFinal,0) //Ferme le document fusionné MonDocWord>>ActiveDocument>>Close(Faux) Multitâche(-30) //Ferme le document principal MonDocWord>>ActiveDocument>>Close(Faux) Ceci étant réalisé sous Windev mais transposable sous un autre environnement Ceci est til transposable sous OpenOffice ? Lappli doit également permettre dutiliser sur des poste Microsoft Office et OpenOffice en même temps. Donc utiliser des fichiers .doc et .xls ceci gène til les fonctions de publipostage sous OpenOffice ? Merci davance pour vos lumières ---------------------------------------------------------------------------- ----------- Orange vous informe que cet e-mail a ete controle par l'anti-virus mail. Aucun virus connu a ce jour par nos services n'a ete detecte. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]