Page 1 sur 1

[VB] Publipostage

Publié : 04 févr. 2008 11:13
par Yohips
Bonjour à tous !

Je souhaiterai mettre au gout du jour une application sous VB6 en lui permettant de faire du publipostage sous OpenOffice en plus de MSOffice.
Le probleme c'est que le fichier de données contenant les champs est de la forme info1;info2;info3; ... Le programme me met une erreur lié au command_type et je pense que le fichier n'est pas lisible sous cette forme pour OOo.
J'aimerai avoir des pistes pour pouvoir utiliser ces modèles déjà existant même en les traduisant sous une autre forme lisible pour OOo si quelqu'un peut me guider.

Je suis désolé si ce sujet a déjà été abordé mais les informations que je trouve ne correspondent pas vraiment à mon problème.

Publié : 04 févr. 2008 11:26
par jeanmimi
Bonjour et bienvenue sur ce forum,

Si tu as lu les tutoriels à ta disposition ici ou sur le site officiel, tu as vu que pour effectuer un publipostage avec OOo tu as besoin d'une lettre-type et d'une Base de données.
OOo Base peut se connecter aux bases MS Access.

Re: Publipostage-VB6

Publié : 04 févr. 2008 11:52
par Pierre-Yves Samyn
Bonjour
Yohips a écrit :Le probleme c'est que le fichier de données contenant les champs est de la forme info1;info2;info3; ... Le programme me met une erreur lié au command_type et je pense que le fichier n'est pas lisible sous cette forme pour OOo.
Si cela signifie que ton fichier de données est au format texte, les champs séparés par un point-virgule c'est tout à fait possible avec OOo.

Comme le dit jeanmimi il faut créer un fichier de connexion à cette source de données : Fichier > Nouveau > Base de données > Se connecter à une source existante > choisir Texte > indiquer le répertoire où se trouve le fichier > son extension > les séparateurs.

Une fois la source de données créée et "enregistrée" il sera possible de l'utiliser directement dans un publipostage

Publié : 04 févr. 2008 13:20
par Yohips
Le probleme c'est que l'application ne gère pas de base de donnée, elle récupere des données et les place dans un tableau puis utilise les données stockées dans le tableau pour en faire un bilan avec un mise en page.
De plus il faut piloter tout ça à partir de Visual Basic 6.0 donc pas question de jouer avec des menus d'OOo :(

Pour le fichier avec les ";" , je me suis mal exprimé. en fait un fichier doc avec une mise en page précise contient des noms de variables à la place des elements à completer. Le fichier avec les ";" contient les valeurs de chaque variable.

Edit : Je rajoute le code de base pour MSOffice pour que vous compreniez un peu ce qu'il se passe à la base :

Code : Tout sélectionner

Public Function Olew_MergeFile(SrcFileName As String, MskFile As String) As Boolean
  ' *********************************************************
  ' FUSION de fichier en WORD 8
  ' SrcFileName : fichier de données .TXT, séparateur ";"
  ' MskFile : Fichier .DOC contenant les champs de fusion
  ' *********************************************************
  Dim ret As Integer
  Dim sFile As String
  Dim sDataFileDoc As String
  
  Dim aDoc As Object
  Dim OldPath As String
  
  DoEvents
  Screen.MousePointer = vbHourglass
  On Error GoTo ErrMergeWHandler
  
  OldPath = CurDir
  
  ' /* Informations sur le fichier de données */
  GetFileInfo SrcFileName
  
  sDataFileDoc = InfoFile.Filename & ".DOC"
  ret = FileExists(sDataFileDoc)
  Select Case ret
    Case True
      Kill sDataFileDoc
    Case 55, 70
      Msg = XLate("Impossible de continuer la fusion") & vbLf
      Msg = Msg & XLate("Le fichier") & " " & sDataFileDoc & vbLf
      Msg = Msg & XLate("est occupé")
      MsgBox Msg, vbOKOnly + vbCritical, App.Title
      Exit Function
      
    Case Else
  End Select
  
  ' /* Ouvre le fichier de données .TXT */
  OWW.Documents.Open Filename:=SrcFileName, ConfirmConversions:=False, ReadOnly _
    :=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate _
    :="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="" _
    , Format:=wdOpenFormatAuto
  
  ' /* Enregistre le fichier de données au format .DOC */
  OWW.ActiveDocument.SaveAs Filename:=sDataFileDoc, FileFormat:=wdFormatDocument, _
  LockComments:=False, Password:="", AddToRecentFiles:=True, WritePassword:="", _
  ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, _
  SaveFormsData:=False, SaveAsAOCELetter:=False
  ' /* Ferme le document Source données .DOC */
  OWW.ActiveDocument.Close
  
  DoEvents
  
  ' /* Ouvre le fichier des champs de fusion */
  OWW.Documents.Open Filename:=MskFile, ConfirmConversions:=False, ReadOnly _
      :=False, AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate _
      :="", Revert:=False, WritePasswordDocument:="", WritePasswordTemplate:="" _
      , Format:=wdOpenFormatAuto
  
  DoEvents
  OWW.ActiveDocument.MailMerge.MainDocumentType = wdFormLetters
    
  
  DoEvents
  OWW.ActiveDocument.MailMerge.OpenDataSource Name:=sDataFileDoc, ConfirmConversions:=False, ReadOnly _
      :=False, LinkToSource:=True, AddToRecentFiles:=False, PasswordDocument:= _
      "", PasswordTemplate:="", WritePasswordDocument:="", _
      WritePasswordTemplate:="", Revert:=False, Format:=wdOpenFormatAuto, _
      Connection:="", SQLStatement:="", SQLStatement1:=""
     
  DoEvents
  With OWW.ActiveDocument.MailMerge
      .Destination = wdSendToNewDocument
      .MailAsAttachment = False
      .MailAddressFieldName = ""
      .MailSubject = ""
      .SuppressBlankLines = True
      With .DataSource
          .FirstRecord = wdDefaultFirstRecord
          .LastRecord = wdDefaultLastRecord
      End With
      .Execute Pause:=True
  End With
  
  ' ==============================
  ' Recherche document source
  ' ==============================
  DoEvents
  GetFileInfo MskFile
  
  sFile = UCase$(InfoFile.Filename) & ".DOC"
  
  For Each aDoc In OWW.Documents
      If UCase$(aDoc.Name) = sFile Then
       aDoc.Activate
       Exit For
      End If
  Next aDoc
  
  ' ==============================
  ' Supprime format fusion
  ' ==============================
  DoEvents
  OWW.ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument
  
  ' ==============================
  ' Referme sans sauver
  ' ==============================
  DoEvents
  OWW.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges

  Olew_MergeFile = True
  DoEvents
  ChDir OldPath
  
  
  Exit Function
  
ErrMergeWHandler:
  Beep
  Msg = "Error : " & Err & vbLf
  Msg = Msg & Error
  MsgBox Msg, vbOKOnly + vbCritical, App.Title
  
  Olew_MergeFile = False
  Exit Function

End Function

Publié : 04 févr. 2008 13:25
par Bidouille
Bonjour,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.

Lisez ce fil pour savoir quelle balise utiliser :
http://user.services.openoffice.org/fr/ ... html#27295

N'oubliez pas que le terme "Macro" ou "OpenOffice" ne doit pas être employé car il est implicite. Essayer de synthétiser au mieux ce que vous cherchez à faire.

Un titre accrocheur vous permettra d'une part d'être aidé plus rapidement et d'autre part, d'enrichir notre base de connaissances.

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.

Merci de votre collaboration.

Publié : 04 févr. 2008 13:27
par Yohips
Je suis désolé pour la balise , je tacherai de faire plus attention la prochaine fois. Merci pour la modification. :)

Publié : 04 févr. 2008 13:32
par Dude
Pourquoi piloter OOo pour faire du publipostage alors qu'il est plus facile de générer des fichiers au format ODF ?

:idea:

Publié : 04 févr. 2008 14:05
par Yohips
Il faudrait que tu developpes un peu plus ta question si possible , je vois pas trop ce que tu veux dire par la :wink:

Publié : 04 févr. 2008 14:09
par Dude
Un fichier OOo est un assemblage de XML compressé au format ZIP. Tu peux donc facilement agir dessus.
http://php.developpez.com/faq/?page=ooo#ooo-text-creer

Publié : 04 févr. 2008 14:45
par Pierre-Yves Samyn
Yohips a écrit :Le probleme c'est que l'application ne gère pas de base de donnée
...
Pour le fichier avec les ";" , je me suis mal exprimé. en fait un fichier doc avec une mise en page précise contient des noms de variables à la place des elements à completer. Le fichier avec les ";" contient les valeurs de chaque variable.
Tu t'étais bien exprimé, j'avais bien compris... mais tu n'as pas compris ma réponse : tes données sont bien au départ dans un fichier "texte" (cf. ton code). Donc ma réponse précédente convient pour ce qui est de la "récupération" des données sous forme utilisable pour un publipostage.

Je te suggère déjà d'en faire l'essai "manuel" : création de la source de données comme déjà indiqué, création du modèle qui servira à faire la fusion (affichage des sources de données par F4) puis faire glisser les champs de cette fenêtre dans le modèle puis lancer la fusion.

Une fois que tu auras "visualisé" comment fonctionne le publipostage avec OOo tu pourras "creuser" l'automatisation par macro.

Voici un exemple :
http://user.services.openoffice.org/fr/ ... etype.html


Sinon, la solution proposée par Dude est également intéressante... :)