Retranscrire macro MS offoce word sous libreoffice writter

Bonjour et bonne année,

Comme mentionné dans le sujet, je travaillais sous word, j'avais mis en
place une macro qui me permettait d'enregistrer un document word au format
pdf, en fonction du nom de la personne qui est à l'origine du document. Ma
boite étant passé sous libre office pour des raisons pratique (à la base !!)
je dois trouver un moyen de mettre en place une macro qui ressemble à celle
qui était en place sous word.

j'ai tenté de copier le code de la macro word et fait un copier coller dans
libre office (j'imagine certains d'entre vous grincer des dents !!) mais je
suis confronté à des erreurs de syntaxe.

Donc ma question est : Existe t'il un moyen ou un outil qui me permettrait
d'exporter une macro word sous libre office ? Ou existe t il un moyen de
reproduire la macro à l'identique.

Merci d'avance pour les réponses.

Bonjour et meilleur voeux

La syntaxe est en effet différente entre les deux produits. Ci-dessous un
exemple simple d'export du document courant au format PDF.

sub PysExportPDFSimple

dim PysPropFich(0) As New com.sun.star.beans.PropertyValue
dim PysAdresseDoc as string

PysPropFich(0).Name = "FilterName"
PysPropFich(0).Value = "writer_pdf_Export"

PysAdresseDoc = convertToURL("c:\test.pdf")

thiscomponent.storeToURL(PysAdresseDoc , PysPropFich())

end sub

Cordialement
Pierre-Yves

Bonjour

en complement de la reponse de Pierre Yves,

pour obtenir le nom de l'auteur
auteur = thisComponent.documentInfo.author

Bon courage

Laurent

Je suis sans doute hors sujet, mais si vous commencez avec LibO, il faut vous signaler que LibO peut être enrichi avec des extensions, et notamment dans votre cas MultiSave et MultiDiff, qui permettent respectivement la sauvegarde et l'envoi de documents, en même temps aux trois formats .odt, .doc et .pdf
Par contre, je ne les ai pas trouvées dans la catalogue des extensions LibO : qu'est-ce-qui est prévu pour le rapatriement depuis le site OOo ?
les liens sur le catalogue OOo :

  * http://extensions.services.openoffice.org/project/MultiSave
  * http://extensions.services.openoffice.org/project/ooo_multidiff

en vous souhaitant de bien vous amuser avec LibO,
corrdialement,
Pierrre

Tout d'abord merci pour les réponses.

Ensuite je suis victime de "avec libre office on peut faire", l'équation se
complique.

Donc avec une macro je dois faire :
- exporter un document sxw en pdf (c'est pas le plus compliqué !)
- je dois tester le nom de la personne qui est à l'origine du document
- et en fonction de la personne, le document doit aller se mettre au bon
emplacement

J'ai failli oublier je dois avoir une boite de dialogue qui me demande
combien de fois je veux imprimer le document, et oui rien que ça ...

En espérant avoir été clair.

Bonjour,

Tout d'abord merci pour les réponses.

Ensuite je suis victime de "avec libre office on peut faire", l'équation se
complique.

Donc avec une macro je dois faire :
- exporter un document sxw en pdf (c'est pas le plus compliqué !)
- je dois tester le nom de la personne qui est à l'origine du document
- et en fonction de la personne, le document doit aller se mettre au bon
emplacement

J'ai failli oublier je dois avoir une boite de dialogue qui me demande
combien de fois je veux imprimer le document, et oui rien que ça ...

Si la syntaxe d'accès aux objets et collections est différentes, le langage basic reste le même.
Le msgbox et récupération du nombre de copies demandé seront donc identiques :wink:
bon courage et bienvenue dans LIbo

Marie jo

Bonjour,

Tout d'abord merci pour les réponses.

Ensuite je suis victime de "avec libre office on peut faire", l'équation se
complique.

Donc avec une macro je dois faire :
- exporter un document sxw en pdf (c'est pas le plus compliqué !)
- je dois tester le nom de la personne qui est à l'origine du document
- et en fonction de la personne, le document doit aller se mettre au bon
emplacement

J'ai failli oublier je dois avoir une boite de dialogue qui me demande
combien de fois je veux imprimer le document, et oui rien que ça ...

Si la syntaxe d'accès aux objets et collections est différentes, le langage basic reste le même.
Le msgbox et récupération du nombre de copies demandé seront donc identiques :wink:
bon courage et bienvenue dans LIbo

Marie jo

Bonjour,

Avec tout ça je devrais arriver à faire un premier jet de macro.
Je vous tiens au jus et encore merci.

Bonjour,

Je reviens vers vous, je doit avouer que je ne comprends pas tout.
J'ai sous les yeux un document qui dit que l'on peut choisir de garder
toutes les macros des documents Microsoft Office ouverts par LibreOffice.
Sachant que dans ma boite on utiliseras plus MS Office, et sachant que l'on
peut conserver les macros si on ouvre un doc MS Office avec Libre Office,
comment se fait i que l'on ne peut pas faire un copier coller du code de
l'un vers l'autre.

Je sais ça peut paraître une question un peu con, mais je ne m'en sors pas
avec cette macro et le temps presse.
N'y a t il vraiment pas une extension ou un autre qui puisse me rendre la
tâche plus facile ?

Cordialement

Bonjour,

Peut-être me trompé-je mais vous devriez essayer d'ouvrir votre classeur excel contenant les macros directement avec Calc. Le "traducteur interne" se chargera de lire les macros.

mais il faut que votre classeur soit xlm ou xlma : c'est à dire incluant les macros.

Cordialement,
Sandy-Pascal Andriant

Bonjour,
Comme évoqué précédemment, existent les extensions MultiSave et MultiDiff, qui permettent respectivement la sauvegarde et l'envoi de documents, en même temps aux trois formats .odt, .doc et .pdf
les liens sur le catalogue OOo (pas encore dans le catalogue officiel LibO) :

  * http://extensions.services.openoffice.org/project/MultiSave
  * http://extensions.services.openoffice.org/project/ooo_multidiff

Ça répond à un (tout petit) bout de votre question, mais c'est un (petit) début.
corrdialement,
Pierrre

Tout d'abord merci à vous d'avoir pris le temps de répondre,

Pour répondre à conil26 ma macro doit fonctionner avec writter, je m'excuse
si je ne l'ai pas stipulé.
Pierre merci pour l'info, mais l'export ne me pose pas de soucis, c'est de
tester le nom de la personne qui fait le document qui me pose prb.
je m'explique, je bosse pour une mutuelle santé, on a des apporteurs qui
vendent des contrats, et leurs coordonnées apparaissent sur le document, je
dois tester le nom de l'apporteur et en fonction du nom le document va se
ranger tout seul dans un dossier en pdf.

C'est la partie test qui me casse les pieds, je n'arrive pas à tester le nom
de l'apporteur.

Merci d'avance pour les réponses

Bonjour

C'est la partie test qui me casse les pieds, je n'arrive pas à tester le nom
de l'apporteur.

il est stocké où ? sous quelle forme ?

Laurent

Je stocke l'information dans une base de donnée, quand à savoir sous quelle
forme j'ai peur de dire une bêtise mais sous forme de chaîne de caractère.

J'espère avoir répondu convenablement

Re

Je stocke l'information dans une base de donnée, quand à savoir sous quelle
forme j'ai peur de dire une bêtise mais sous forme de chaîne de caractère.

j'ai du mal a siaisr là (appartion base de donnees)

tu cherches à faire quoi exactement ? recuperer le nom dans le document
texte ou bien recuperer dans la base de données (à partir de quelle info
du document texte ?)
comment tu la remplis ta base ?

ton cas semble plus complexe que tu ne laisse paraitre, aussi difficile
de te mettre sur la voie :frowning:

Laurent

Je vais essayer d'expliquer.

Nous changeons de logiciel de gestion dans ma boite, nous passons sous
OpenERP (lel ien pour ceux qui ne connaissent pas ou veulent se faire une
idée http://www.openerp.com/ ) c'est pour ça que nous abandonnons la suite
microsoft et utilisant Libre Office.
Toutes les infos sont stockés dans une base de données, d'où ma réponse
précédente, j'appelle les infos dont j'ai besoin via un outil qui marche
avec libre office "OpenERP Report Designer", je ne sais pas si ça peut aider
ou pas.

Bref, une fois que mon document est remplie comme je le souhaite, c'est à ce
moment que ma macro intervient.

J'espère que l'explication est plus claire ?

Cordialement

Re

Bref, une fois que mon document est remplie comme je le souhaite, c'est à ce
moment que ma macro intervient.

rempli comment ?
à partir d'un champ utilisateur ?
dans ce cas ce dont tu as besoin est de recuperer la valeur du champ

si ce n'est pas le cas, une autre voie est de mettre un style dans le
modele rempli depuis la base et rechercher ensuite le texte qui a ce
style. c'est une autre approche

Laurent

merci pour la réponse,

rempli comment ?

dans mon document j'ai des champs qui concerne les apporteurs, je te met une
partie du code juste pour que tu te fasses une idée

"Votre conseiller :
[[
contrat.rattachement_commercial_id.partner_apporteur_id.res_partner_hs_id.name
]]
[[
contrat.rattachement_commercial_address_id.partner_apporteur_id.address_courrier_default.ligne2
]]
[[
contrat.rattachement_commercial_address_id.partner_apporteur_id.address_courrier_default.ligne3
]]
[[
contrat.rattachement_commercial_address_id.partner_apporteur_id.address_courrier_default.complete_voie]]
[[
contrat.rattachement_commercial_address_id.partner_apporteur_id.address_courrier_default.ligne5]]
[[
contrat.rattachement_commercial_address_id.partner_apporteur_id.address_courrier_default.code_postal_ville_mn_id.cp_code]]
[[
contrat.rattachement_commercial_address_id.partner_apporteur_id.address_courrier_default.code_postal_ville_mn_id.ville_name]]
Tél : [[ contrat.rattachement_commercial_id.phone ]] Fax : [[
contrat.rattachement_commercial_id.fax ]]"

A la place de ce code c'est les coordonnées de l'apporteur qui remonte,
coordonnées qui sont dans une base de données.

à partir d'un champ utilisateur ?

je pense avoir répondu plus haut.

comment procéder pour récupérer la valeur du ce champ ?

Encore merci de prendre le temps de m'aider dans ma quête.

Cordialement

Bonjour

Les champs insérés depuis une base de données le sont sous la forme :
NomSource.NomJeuEnregistrements.NomChamp

NomSource : il doit s'agir d'une source de données "connue", référencée, ce
que l'on peut faire par exemple via Outils> Options> Base> Base de données

NomJeuEnregistrements : le nom d'une table ou d'une requête

NomChamp : comme son nom l'indique.

Par exemple avec le champ Auteur de la bibliographie disponible par défaut :
Bibliography.biblio.Author

Ce type de champ peut être récupéré par programme comme ceci (entre autres)
:

'******************************************
option explicit

Sub PysRecupChamp
dim PysCollChps as object, PysUnChp as object

PysCollChps = thiscomponent.TextFieldMasters

PysUnChp =
PysCollChps.getByName("com.sun.star.text.fieldmaster.DataBase.Bibliography.biblio.Author")

print PysUnChp.DependentTextFields(0).content

End Sub
'******************************************

On retrouve donc dans le code les informations "nomSource", "nomJeu",
"nomChamp"...

http://nabble.documentfoundation.org/file/n3647349/Capture-1.png

Cela dit, les codes que tu cites ressemblent davantage à une solution dans
laquelle un programme recherche un code attendu (ici entre [[ et ]] ) pour
les remplacer par une valeur issue d'une base.

Je n'arrive toujours pas à voir, d'après tes explications, ce que faisait ta
macro Word : si c'est elle qui allait rechercher la donnée dans la base de
donnée ou non. Le plus simple serait que tu nous donnes le code de cette
macro pour qu'on puisse y voir plus clair...

Cordialement
Pierre-Yves

Tout d'abord merci d'avoir pris le temps de jeter un coup d'oeil,

je te fais part du code de ma macro sous word.
Je met tout le code, on ne sait jamais.

"
Attribute VB_Name = "Export_Certif"

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
"GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As
String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias
"WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Sub Export_Certif()
'
' test Macro

Dim retourINI
Dim apporteur
Dim test As Boolean
Dim document1, f
Dim directory
Dim rep, fichier
Dim savefile
Dim fs, fs1, prnt

'on recherche sur quel apporteur on travaille
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
        ActiveWindow.Panes(2).Close
    End If
    If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
        ActivePane.View.Type = wdOutlineView Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    End If
   ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
   ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
   
   ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "Votre conseiller ADEP:"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    apporteur = Selection
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument

If (LireINI("blocage", "bloc")) <> 1 Then

   retourINI = EcrireINI("blocage", "bloc", "1")
    
    ChangeFileOpenDirectory ("R:\SANTE\")
    directory = "R:\SANTE\"
    fichier = apporteur + "_" + Right(Date, 4) + Mid(Date, 4, 2) +
Left(Date, 2) + ".doc"
    savefile = directory + fichier
    
' ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        savefile, ExportFormat:=wdExportFormatPDF, _
        OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint,
Range:= _
        wdExportAllDocument, From:=1, To:=1, Item:=wdExportDocumentContent,