Oui je pensais faire ca ...

Déclarer un objet OLE lancer la méthode Publipostage en passant des
paramètres puis récupérer le résultat dans le fichier (ou les fichiers)
générés.

Merci pour ton aide je te ferait parvenir le fruit de mes recherches si
j'arrive.
Merci encore

-----Message d'origine-----
De : Essonne Consultants [mailto:[EMAIL PROTECTED] 
Envoyé : jeudi 6 juillet 2006 17:19
À : prog@fr.openoffice.org
Objet : RE: [prog] Publipostage ...

Je ne connais pas VB Express 2005...

Moi en VBA, je teste dans un fichier .ini la version de traitement de texte
utilisée sur le poste (word 97 à 2003 ou Open office) et j'exécute la
fonction correspondante.

Ma source de données est déclarée une fois pour toute dans mon modèle.

Pour tes besoins, je pense qu'il faudrait, pour oo, pouvoir lancer
l'application avec un passage de paramètres à la macro (voir la macro
publipostage)

Cordialement,

Philippe 


-----Message d'origine-----
De : Cezame Concept [mailto:[EMAIL PROTECTED] 
Envoyé : jeudi 6 juillet 2006 16:51
À : prog@fr.openoffice.org
Objet : RE: [prog] Publipostage ...

En disons que ce que j'ai fais moi c'est un petit projet .NET sous VB
Express 2005 

Ensuite j'ai juste a ajouter mon projet (DLL .net) dans Windev pour
l'utiliser ...

En gros je voudrais juste créer sous VB Express une fonction a laquelle je
passe en paramètre le chemin de la base, Le chemin du fichier modèle et le
chemin du fichier de sortie.

Ensuite donc sous mon application finale il me suffit de tester quel office
le client final utilise et lancer les méthodes correspondantes (soit
OpenOffice soit Microsoft Office).

Pensez vous que l'on puisse réaliser cette fonction complète sous VB Express
?

Merci encore pour votre aide ...



-----Message d'origine-----
De : Essonne Consultants [mailto:[EMAIL PROTECTED] 
Envoyé : jeudi 6 juillet 2006 16:24
À : prog@fr.openoffice.org
Objet : RE: [prog] Publipostage ...

J'ai essayé de transposer ça dans VBA mais le plus simple est de lancer la
macro.

L'avantage est que tu deviens indépendant de ton appli (Access ou Windev),
il te suffit de lancer la macro et OO s'occupe du reste

@+

Philippe


-----Message d'origine-----
De : Cezame Concept [mailto:[EMAIL PROTECTED] 
Envoyé : jeudi 6 juillet 2006 15:44
À : prog@fr.openoffice.org
Objet : RE: [prog] Publipostage ...

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 j’ai trouvé une base de travail pour réaliser un
publipostage avec oOWriter..

Je réalise aujourd’hui un publipostage avec Microsoft Office dans une
application …

Je souhaiterais juste transposer en fait ce que je fais sous Microsoft
Office sous OpenOffice …

Aujourd’hui 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 t’il transposable sous OpenOffice ?

L’appli doit également permettre d’utiliser sur des poste Microsoft Office
et OpenOffice en même temps. Donc utiliser des fichiers .doc et .xls ceci
gène t’il les fonctions de publipostage sous OpenOffice ? 

Merci d’avance 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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

----------------------------------------------------------------------------
-----------
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

----------------------------------------------------------------------------
-----------
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]

Répondre à