[Résolu][VB] Remplir un champ avec signet sous Writer

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 !
liger
Fraîchement OOthentifié
Messages : 4
Inscription : 02 janv. 2018 14:06

[Résolu][VB] Remplir un champ avec signet sous Writer

Message par liger »

Bonjour
Je commence à utiliser OpenOffice et j'aimerais savoir si c'est possible de faire la même chose ci-dessous (fait avec Word) sous Writer en langage Visual Basic 6.

Code : Tout sélectionner

If .ActiveDocument.Bookmarks.Exists("annee") Then
        .ActiveDocument.FormFields("annee").Select
        .Selection.Text = Format(txtdu.Value, "yyyy")
End If
Ce code permet de vérifier si dans le document Word ouvert il y a un signet annee et si c'est le cas alors on lui attribuait une valeur.
J'ai besoin d'utiliser cette méthode pour plusieurs champs déjà crées dans un document Writer existant.
J'ai déjà testé plusieurs codes mais je n'arrive jamais à faire la même chose, ci dessous vous trouverez une partie d'un exemple de code que j'ai déjà essayé mais qui me note plusieurs messages d'erreur sous VB6 :

Code : Tout sélectionner

Set occ = doc.getCurrentController().getviewcursor()
Set bookmark = doc.getBookMarks().GetByName(annee)
J'ai regardé un peu partout et je n'ai rien trouvé qui puisse m'aider donc j'ai besoin d'une piste qui m'aiderait à solutionner mon problème.
Je vous joins un document Writer avec un champ déjà existant que j'aimerais remplir à partir de VB 6.
Merci par avance pour votre aide.
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par liger le 04 janv. 2018 08:33, modifié 3 fois.
OpenOffice 4.1.4 Windows 7
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9251
Inscription : 28 août 2010 08:45

Re: [Writer] remplir un champ avec signet en VB6

Message par micmac »

Bonjour et bienvenue,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

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.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : https://forum.openoffice.org/fr/forum/s ... html#27295

N'oubliez pas que les termes "Macro" ou "OpenOffice" ne doivent pas être employés car il sont implicites. Essayez 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.

Merci de votre collaboration.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 501
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Writer] remplir un champ avec signet en VB6

Message par Noonours »

Bonjour

Une proposition qui permet de déterminer si un signet "annee" est présent dans ton document, et change son intitulé:

Code : Tout sélectionner

sub RechercheSignet()
	
	oDoc = thiscomponent
	sNom = "annee"
	LesSignets = oDoc.Bookmarks
	if LesSignets.hasByName(sNom) then
	 signet = LesSignets.getByName(sNom)
	 signet.Anchor.String = "Bla Bla Bla"
	end if

end sub
(Si j'ai bien compris ta requête... mais ça ressemble un peu à la question qui tue ! :mrgreen: )

COOordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
liger
Fraîchement OOthentifié
Messages : 4
Inscription : 02 janv. 2018 14:06

Re: [Writer] remplir un champ avec signet en VB6

Message par liger »

Bonjour

Merci pour ta réponse.

Je teste dans la journée mais je te confirme déjà que tu as bien compris ma demande et je t'en remercie.

En plus cela me donnera une piste pour remplacer un signet par un tableau.

Cordialement.
OpenOffice 4.1.4 Windows 7
liger
Fraîchement OOthentifié
Messages : 4
Inscription : 02 janv. 2018 14:06

Re: [Writer] remplir un champ avec signet en VB6

Message par liger »

Je viens de tester ton code mais j'ai un message d'erreur dès le début.
Je met ci-dessous tout mon code :

Code : Tout sélectionner

Public oSM  As Object
Public oDesk As Object
Public oDoc As Object
Public doc As Object
Set oSM = CreateObject("com.sun.star.ServiceManager")
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
Set doc = oDesk.loadComponentFromURL("file:///"nom_de_mon_fichier", "_blank", 0, arg())
oDoc = thiscomponent
sNom = "annee"
LesSignets = oDoc.Bookmarks
if LesSignets.hasByName(sNom) then
    signet = LesSignets.getByName(sNom)
    signet.Anchor.String = "Bla Bla Bla"
end if
Quand j'arrive à la ligne oDoc=ThisComponent j'ai un message d'erreur sur ThisComponent (voir message d'erreur en pièce jointe).
Avez vous une idée du problème ou est ce que j'ai oublié de déclarer quelque chose.
Je vous remercie par avance des pistes ou aide que vous pourrez m'apporter.
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.4 Windows 7
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 501
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [VB] [Writer] remplir un champ avec signet en VB6

Message par Noonours »

Bonjour
liger a écrit : Je commence à utiliser OpenOffice [...] sous Writer [...] plusieurs champs déjà crées dans un document Writer existant [...]
Pourtant dans ta capture d'écran je vois:
Microsoft VB6.png
Quelle suite utilises-tu? Si tu essayes de faire tourner une macro fonctionnant avec OpenOffice/Libre Office dans un document Micr*soft tu vas t'arracher quelques cheveux... Comme cité plus haut, c'est la "question qui tue" car ces deux suites ne sont PAS compatibles. :?
liger a écrit : Je met ci-dessous tout mon code :
Plutôt qu'un bout de code, fournis aux contributeurs un document dépersonnalisé (cf le lien dans ma signature) afin d'obtenir une réponse adaptée à ton cas.

COOordialement,
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
liger
Fraîchement OOthentifié
Messages : 4
Inscription : 02 janv. 2018 14:06

Re: [VB] [Writer] remplir un champ avec signet en VB6

Message par liger »

Bonjour

Merci pour tout ceux qui ont pris le temps de regarder mon problème.

J'ai trouvé une solution en utilisant une ancienne dll qui se nomme OOWRITVB.dll et qui me permet de faire le lien entre mon code en VB6 et open office.

Code : Tout sélectionner

If Writer.Selection.Bookmarks.HasByName("annee") = True Then
    Writer.Selection.GoToBookmark ("annee")
    Writer.Selection.TypeText Format(Date, "yyyy")
End If
Pour l'instant cela fonctionne donc je clôture le sujet.
OpenOffice 4.1.4 Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25169
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][VB] [Writer] remplir un champ avec signet en VB

Message par Dude »

Mauvais balisage : [Writer] signifie que tu programmes sous OpenOffice, ce qui n'est pas le cas.
La modération vous a écrit: Correction du titre effectuée

Comme d'habitude, si tu utilises un langage externe, il suffit de "fabriquer" ton propre document.
Le format ODF est très simple à lire et à écrire.
Exemple en PowerShell : http://beaussier.com/sections/viewtopic.php?f=7&t=1583

Bref, pas besoin d'une quelconque DLL.