Distribué par le projet fr.OpenOffice.org

Version 1.00 du 13.03.2005

Réalisé avec : OOo 1.1.3	Plate-forme / Os : Toutes

Comment accéder directement à une feuille d'un Classeur
par une macro lancée en ligne de commande

Sommaire

1 Introduction	3

2 Macros générales pour soffice	4

2.1 Macro principale	4

2.2 Fonction de contrôle du type de document	5

2.3 Macro d'ouverture	5

3 Création d'un fichier batch pour le lancement automatique	6

4 Variante – Lancement d'une macro dans un document	7

4.1 Le fichier batch de lancement	7

4.2 La macro interne au document	7

5 Crédits	8

6 Licence	8

Introduction

Le but de ce how-to est de présenter d'une part une macro permettant d'ouvrir un classeur et d'accéder à une feuille déterminée, d'autre part de lancer un document et une macro directement à partir d'une ligne de commande.

Les fonctionnalités abordées dans cet exemple sont :

contrôler le type de document ouvert,

générer le numéro de série de la date du jour à partir de la date système,

déterminer le numéro de semaine à partir de la fonction intégrée dans Calc,

ouvrir le document Classeur à traiter,

tester si la feuille portant le numéro de semaine existe,

accéder à la feuille déterminée.

Bien que s'appuyant sur un exemple réalisé sous Windows et OpenOffice.org 1.1.3, il sera facile de l'adapter pour les autres systèmes d'exploitation.

Je ne saurai que trop recommander aux utilisateurs d'OpenOffice.org deux ouvrages parus aux Éditions Eyrolles :

le livre OpenOffice.org Efficace (2ème édition), écrit par Sophie Gautier, Christian Hardy, Frédéric Labbe, Michel Pinquier, présentant de manière simple et efficace OpenOffice.org

le livre Programmation OpenOffice.org, écrit par Bernard Marcelly et Laurent Godard, délivrant de précieuses informations sur les Macros OOoBasic et les API d'OpenOffice.org.

Macros générales pour soffice

Macro principale

Sub OuvrirFeuilleParSemaine

Dim DateJour As String, racineFeuille As String, nomFeuille As String, leMessage As String, rep As String

Dim Jour As Integer, Mois As Integer, Annee As Integer, NumSemaine As Integer, laReponse As Integer

Dim DateSerie As Long, lesParams(1) As Long

'définition des variables Objet appartenant au document

Dim monDocument As Object, lesFeuilles As Object, laFeuille As Object, appelFonction As Object

'vérification du type de document

'si c'est un Classeur on effectue le traitement

rep = ""

CtrlTypeDoc(rep)

If rep = "C" Then

monDocument = thisComponent

lesFeuilles = monDocument.Sheets

DateJour = Date()

Jour = Left(DateJour,2)

Mois = Mid(DateJour,4,2)

Annee = Right(DateJour,4)

'**** Récupérer le n° de semaine (par rapport à la date système) ****

DateSerie = DateSerial(Annee, Mois, Jour)

'on définit les deux paramètres nécessaires à la fonction

lesParams(0) = DateSerie	'numéro de série de la date

lesParams(1) = 0	'si = 1 la semaine commence par dimanche, sinon par lundi

'on active le service des fonctions, c'est à dire

'les fonctions disponibles sous Calc

leService = "com.sun.star.sheet.FunctionAccess"

appelFonction = CreateUnoService(leService)

'on appelle la fonction WEEKNUM

'[équivalence de la fonction NO.SEMAINE(Numéro_série;0)]

NumSemaine = appelFonction.callFunction("WEEKNUM",lesParams())

'on paramètre ici le nom de la feuille

'ne modifier éventuellement que le nom défini dans racineFeuille

racineFeuille = "Feuille"

nomFeuille = racineFeuille & NumSemaine

If lesFeuilles.hasByName(nomFeuille) Then

'On pourra pour contrôle réactiver les messages ci-dessous

'et le test associé à la réponse fournie

'leMessage = "La feuille " & nomFeuille & " existe." & Chr(13)

'leMessage = leMessage & "Voulez-vous accéder à cette feuille"

'laReponse = MsgBox(leMessage,36,"Activation d'une feuille")

'If laReponse = 6 Then

laFeuille = lesFeuilles.getByName(nomFeuille)

monDocument.currentController.activeSheet = laFeuille

'End If

Else

leMessage = "La feuille [" & nomFeuille & "] n'existe pas."

MsgBox(leMessage,16,"Erreur de feuille")

End If

End If

End Sub

Fonction de contrôle du type de document

Function CtrlTypeDoc(rep As String)

Dim leServiceC As String, leServiceW As String

Dim TypDocC

'vérification du type de document

'si c'est un doc Calc, rep = "C"

'si c'est un doc Writer, rep = "W"

leServiceC = "com.sun.star.sheet.SpreadsheetDocument"

leServiceW = "com.sun.star.text.TextDocument"

TypDocC = thiscomponent.SupportsService(leServiceC)

TypDocW = thiscomponent.SupportsService(leServiceW)

If TypDocC Then rep = "C"

If TypDocW Then rep = "W"

End Function

Macro d'ouverture

Sub OuvrirDoc(nomDoc As String)

Dim monDocument As Object

Dim nomChemin As String

Dim propFich()

nomChemin = ConvertToURL(nomDoc)

monDocument = StarDesktop.LoadComponentFromURL(nomChemin,"_blank",0,propFich)

OuvrirFeuilleParSemaine

End Sub

Création d'un fichier batch pour le lancement automatique

Fichier batch

"C:\Program Files\OpenOffice.org1.1.3\program\soffice.exe" "macro:///Standard.module1.OuvrirDoc(C:\Documents and Settings\{nom_du_compte}\Mes documents\monClasseur.sxc)"

NB : Le code ci-dessus doit être écrit sur une seule et même ligne.

où

"C:\Program Files\OpenOffice.org1.1.3\program\soffice.exe" = le chemin d'accès à OpenOffice.org

"macro:///Standard.module1.OuvrirDoc()" = l'emplacement de la macro.

Ici, la macro (procédure ou fonction) se nomme « OuvrirDoc », elle se situe dans le module « Module1 » de la bibliothèque « Standard » de « soffice ».

Entre parenthèses est précisé le chemin+nomdufichier.ext puisque la macro attend le passage de ce paramètre.

NB : Respectez l'écriture des chemins. Vous aurez remarqué qu'elle est différente selon que l'on adresse soffice.exe ou la macro.

Respectez les slashs ; pour l'appel de la macro il y en a trois macro:///

Variante – Lancement d'une macro dans un document

Dans cette variante il conviendra de créer un document Calc dans lequel on enregistrera la macro ci-après dans le « Module1 » de la bibliothèque « Standard » du même document.

La macro est identique à celle présentée initialement sauf qu'elle n'intègre pas le contrôle du type de document puisqu'ici c'est obligatoirement un fichier au format « .sxc ».

Le fichier batch de lancement

"C:\Program Files\OpenOffice.org1.1.3\program\soffice.exe" "C:\Documents and Settings\{nom_du_compte}\Mes documents\monClasseur.sxc" "macro://monClasseur/Standard.Module1.OuvrirFeuilleParSemaine"

NB : Attention à l'écriture de l'accès à la macro d'un document. Respectez les slashs ; ici il n'y en a que deux macro://

La macro interne au document

Sub OuvrirFeuilleParSemaine

Dim DateJour As String, racineFeuille As String, nomFeuille As String, leMessage As String

Dim Jour As Integer, Mois As Integer, Annee As Integer, NumSemaine As Integer, laReponse As Integer

Dim DateSerie As Long, lesParams(1) As Long

Dim monDocument As Object, lesFeuilles As Object, laFeuille As Object, appelFonction As Object

monDocument = thisComponent

lesFeuilles = monDocument.Sheets

DateJour = Date()

Jour = Left(DateJour,2)

Mois = Mid(DateJour,4,2)

Annee = Right(DateJour,4)

DateSerie = DateSerial(Annee, Mois, Jour)

lesParams(0) = DateSerie

lesParams(1) = 0

leService = "com.sun.star.sheet.FunctionAccess"

appelFonction = CreateUnoService(leService)

NumSemaine = appelFonction.callFunction("WEEKNUM",lesParams())

'on paramètre ici le nom de la feuille

'ne modifier éventuellement que le nom défini dans racineFeuille

racineFeuille = "Feuille"

nomFeuille = racineFeuille & NumSemaine

If lesFeuilles.hasByName(nomFeuille) Then

laFeuille = lesFeuilles.getByName(nomFeuille)

monDocument.currentController.activeSheet = laFeuille

Else

leMessage = "La feuille [" & nomFeuille & "] n'existe pas."

MsgBox(leMessage,16,"Erreur de feuille")

End If

End Sub

Crédits

Auteur : François Gatto

Remerciement : Cédric Bosdonnat, Loic Breilloux, Laurent Godard, Stéphane Purnelle

Intégré par : Sophie Gautier

Contacts : Projet Documentation OpenOffice.org - fr.openoffice.org

Traduction :

Historique des modifications :

Version	Date	Commentaire
0.01	12/03/05	Proposition de relecture à la communauté
1.00	13/03/05	Corrections

Licence

Appendix

Public Documentation License Notice

The contents of this Documentation are subject to the Public Documentation License Version 1.0 (the "License"); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.

The Original Documentation is "Comment accéder directement à une feuille d'un Classeur par une macro lancée en ligne de commande". The Initial Writer of the Original Documentation is François Gatto Copyright © 2005. All Rights Reserved. (Initial Writer contact(s): francois-gatto@9online.fr).

Contributor(s): ______________________________________.

Portions created by ______ are Copyright ©_________[Insert year(s)]. All Rights Reserved. (Contributor contact(s):________________[Insert hyperlink/alias]).

NOTE: The text of this Appendix may differ slightly from the text of the notices in the files of the Original Documentation. You should use the text of this Appendix rather than the text found in the Original Documentation for Your Modifications.

fr.OpenOffice.org

batchmacro.sxw - Retour au Sommaire	7 / 8

How-to OuvrirFeuilleParSemaine

Comment accéder directement à une feuille d'un Classeurpar une macro lancée en ligne de commande

How-to spécifique aux versions 1.1.x d'OpenOffice.org

Francois Gatto

2004-10-31T19:18:59