Vous êtes sur la page 1sur 158

FAQ OpenOffice et LibreOffice

Date de publication : 23 septembre 2006

Dernière mise à jour : 11 mars 2013

Bienvenue sur la FAQ, elle a été réalisée pour répondre aux questions
concernant les suites bureautiques Apache OpenOffice (AOO) et LibreOffice
(LibO).
Si vous souhaitez participer pour l'améliorer, pour proposer vos contributions
ou si vous constatez des erreurs dans cette page, n'hésitez-pas !!!
Ont contribué à cette FAQ :

Atlantis - Michaël - Silkyroad - Vincent Viale


FAQ OpenOffice et LibreOffice

1. Informations générales (18) ................................................................................................................................... 4


2. Base de données (8) ........................................................................................................................................... 10
3. Dessin (3) ............................................................................................................................................................. 13
4. Présentation (5) ....................................................................................................................................................15
5. Tableur (20) .......................................................................................................................................................... 17
6. Traitement de texte (11) .......................................................................................................................................23
7. Programmation OBasic (202) ...............................................................................................................................27
7.1. Informations générales (10) .........................................................................................................................28
7.2. Base de données (8) ................................................................................................................................... 33
7.3. Dessin (1) .....................................................................................................................................................39
7.4. Présentation (5) ........................................................................................................................................... 40
7.5. Tableur (63) ..................................................................................................................................................44
7.5.1. Les feuilles (54) ................................................................................................................................... 46
7.5.1.1. Les cellules (32) ..........................................................................................................................55
7.5.1.1.1. Les annotations (4) .............................................................................................................66
7.5.1.1.2. Les formats (2) ................................................................................................................... 69
7.5.1.1.3. Les cellules et plages nommées (6) .................................................................................. 71
7.5.1.2. Les images (1) ............................................................................................................................ 74
7.5.2. Les graphiques (5) .............................................................................................................................. 76
7.6. Traitement de texte (24) .............................................................................................................................. 81
7.6.1. Les paragraphes (2) ............................................................................................................................ 87
7.6.2. Les signets (3) .....................................................................................................................................88
7.6.3. Les images (1) .................................................................................................................................... 90
7.6.4. Les tableaux dans le traitement de texte (4) ...................................................................................... 91
7.6.5. Les cadres - TextFrames (5) ...............................................................................................................94
7.7. Les boîtes de dialogue BASIC (25) .............................................................................................................97
7.7.1. Les cases à cocher: CheckBox (1) ................................................................................................... 101
7.7.2. Le contrôle picto: ImageControl (2) ...................................................................................................102
7.7.3. Les zones de liste: ListBox (7) ..........................................................................................................104
7.7.4. Les barres de progression: ProgressBar (1) .....................................................................................108
7.7.5. Les zones de texte: TextField (6) ......................................................................................................109
7.7.6. Les champs Date / Calendriers (2) ................................................................................................... 113
7.7.7. La sélection de fichiers: FileControl (1) ............................................................................................ 115
7.8. Les sauvegardes (6) .................................................................................................................................. 116
7.9. Les répertoires (8) ..................................................................................................................................... 119
7.10. Les fichiers (5) ......................................................................................................................................... 124
7.11. Les filtres (5) ............................................................................................................................................ 127
7.12. L'éditeur de macros (5) ............................................................................................................................131
7.13. Automation (4) ......................................................................................................................................... 133
7.14. Les chaines de caractères (5) .................................................................................................................135
7.15. L'interaction avec d'autres applications (18) ............................................................................................141
7.15.1. Les fichiers texte (8) ........................................................................................................................148
7.16. Les variables (10) .................................................................................................................................... 152

-3-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Informations générales


Qu'appelle t-on OpenOffice (AOO) et LibreOffice (LibO) ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Ce sont deux suites bureautiques libres, AOO et LibO sont constituées :

Type Nom
D'un traitement de texte Traitement de texte
(.odt)
D'un tableur (.ods) Tableur
D'un module de Présentation
présentations (.odp)
D'un module de dessins Dessin
(.odg)
D'un module pour les Base de données
bases de données (.odb)
D'un éditeur d'équations Formule
mathématiques

Les deux suites sont multiplateformes

lien : Site officiel d'Apache OpenOffice


lien : Site officiel de LibreOffice
lien : Comparez les suites bureautiques libres et commerciales, par Netah25

Comment installer une des deux suites bureautiques ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Grâce à ce tutoriel, vous allez apprendre pas à pas comment installer une des deux suites bureautiques.

lien : Installation LibreOffice/OpenOffice

Ouvrir un nouveau document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous avez pour cela deux façons de faire :

• si vous ouvrez la suite bureautique, il suffit de sélectionner le type de document voulu ;


• si vous êtes déjà dans l'interface, dans le menu « Fichier » et « Nouveau », et ensuite de
sélectionner le type de document souhaité.

Est-il possible de lire les fichiers AOO et LibO si l'application n'est pas installée sur le poste ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Il existe une visionneuse pour lire les documents issus du Traitement de texte (formats .sxw et .odt) si une
des deux suites n'est pas installé sur le poste.
Il s'agit de Visioo-Writer.

-4-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sinon, il existe des versions portables des suites bureautiques, vous pouvez en trouver ici PortableApps,
le site est en anglais, mais les suites bureautiques sont en français.
Cela consiste à décompresser un fichier sur le répertoire, qui installera l'application.
Vous pouvez aussi le faire sur une clé USB ou un disque dur externe.

lien : PortableApps LibreOffice


lien : PortableApps OpenOffice

Comment ajouter une extension ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Une extension permet de rajouter des fonctionnalités comme des dictionnaires, des fonctions spécifiques,
etc.
Il faut s'assurer que Java soit bien installé sur le poste, car les extensions en ont besoin.
Pour ajouter une extension, il faut au préalable l'avoir téléchargée. Ensuite :

• ouvrir le module : « Outils » et « Gestionnaire des extensions » ;


• maintenant, il faut aller chercher l'extension en cliquant sur « Ajouter... » ;
• l'installation de l'extension peut prendre un certain temps, en fonction de son poids ;
• il est préférable de redémarrer l'application une fois l'installation de l'extension terminée...

Nota : il peut vous être demandé de valider l'extension lors de l'installation.

Comment paramétrer les données d'identité ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La saisie de données d'identité permet par la suite de récupérer ces données dans les cas suivants :

• quand on active la fonction de « Révision marque » ;


• quand on insère un commentaire.

Allez dans le menu « Outils » et « Options », ensuite dans la fenêtre qui apparaît sélectionnée « Données
d'identité », tous les champs ne sont pas nécessaire, mais le nom et le prénom sont nécessaires pour les
cas cités ci-dessus.

Comment modifier le format par défaut pour l'enregistrement des documents ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Il faut pour cela aller :

1 Dans le menu « Outils » ;


2 Sélectionnez « Options » ;
3 Sélectionnez « Chargement » et « Enregistrement » dans le menu de gauche ;
4 Puis « Général » ;

-5-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

5 Dans le champ « Format de fichier par défaut » vous pouvez spécifier le format d'enregistrement
pour chaque type de document.

Comment installer un dictionnaire orthographique ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous pouvez trouver la procédure d'installation du dictionnaire dans le tutoriel d'installation

lien : Grammalecte

Comment interrompre une macro en cours ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Utilisez le raccourci clavier : Ctrl + Maj + Q

Comment convertir en masse les fichiers de la version 1.x ou


des documents Microsoft Office vers la version la plus récente ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'option de conversion des anciens fichiers (Version 1.x) n'est pas disponible sous LibO.
Nota : LibO peut ouvrir ces fichiers.
La conversion des documents Microsoft Office fonctionne sur les deux suites, et le mode opératoire est
identique à celui des anciens fichiers.
Dans la version 1.x, les documents texte étaient créés au format « .sxw » et les classeurs au format « .sxc
». Ces formats sont toujours utilisables dans la nouvelle version, mais vous pouvez aussi les convertir aux
formats « .odt » et « .ods » qui sont les nouveaux standards OpenDocument :

• Texte formaté (.odt) application/vnd.oasis.opendocument.text ;


• Tableur (.ods) application/vnd.oasis.opendocument.spreadsheet ;
• Présentation (.odp) application/vnd.oasis.opendocument.presentation ;
• Dessin (.odg) application/vnd.oasis.opendocument.graphics ;
• Base de données (.odb) application/vnd.oasis.opendocument.database ;

Pour effectuer la conversion d'un ou plusieurs documents :

• menu « Fichier » ;
• « Assistants » ;
• « Convertisseur de documents ;
• sélectionnez les types de documents à convertir ;
• cochez l'option « StarOffice » ou « Microsoft Office », puis le ou les types de fichiers à convertir ;
• cliquez sur le bouton « Suivant » ;
• décochez/cochez les options qui vous intéressent dans la nouvelle fenêtre et paramétrez les
différentes zones d'information ;
• le champ « Import depuis : » correspond au dossier contenant les fichiers à convertir ;
• le champ « enregistrer dans : » correspond au dossier de destination pour les nouveaux fichiers
convertis ;
• cliquez sur le bouton « Suivant » ;

-6-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• La fenêtre de paramétrage s'affiche une nouvelle fois si vous avez choisi de convertir plusieurs
types de fichiers (Documents texte et Classeurs) ;
• cliquez sur le bouton « Suivant » ;
• cliquez sur le bouton « Convertir » pour lancer l'opération ;
• cliquer sur le bouton « Fermer » dans la boite de dialogue.

Ouvrez le répertoire de destination que vous avez précédemment indiqué afin de visualiser le résultat de
la conversion.

Comment utiliser l'assistant ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les suites bureautiques disposent d'assistant pour créer des Lettre, des Fax, etc.
La commande se trouve dans « Fichiers » et « Assistants ».
Il ne vous reste plus ensuite qu'à suivre les étapes sur la fenêtre qui apparaît.

Comment créer des étiquettes et des cartes de visites ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La commande se trouve dans « Fichiers » et « Nouveau »
Il ne vous reste plus ensuite qu'à suivre les étapes sur la fenêtre qui apparaît.
Vous avez un exemple de création d'étiquette dans le tutoriel sur le publipostage.

Modifier les paramètres linguistiques ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les paramètres linguistiques permettent de définir la langue de l'interface et l'utilisation des dictionnaires
installés.
Pour cela il faut aller dans le menu « Outils » et « Options », et dans la fenêtre qui apparaît sélectionner
« Paramètres linguistiques » :

• « Langues » permet de définir certains paramètres visuels ;


• « Linguistique » permet de définir les éléments de corrections orthographiques.

Comment changer l'apparence de l'interface ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous trouvez les icônes ternes, et vous voulez en changer ? Et bien c'est possible ? Il faut aller dans le
menu « Outils » et « Options », ensuite dans la fenêtre, il faudra sélectionner « Affichage ».
Dans la seconde liste déroulante de « Taille et style des icônes », vous avez une liste de styles possible,
il suffit de sélectionner celui qui vous plaît.
Les personas ne sont pris en compte que par LibO4, mais n'est pas encore conseillé à la production.

-7-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Vous pouvez aussi utiliser les personas Firefox pour habiller l'application, il suffit alors d'aller dans «
Personnalisation », Ensuite soit le Persona est installé, et vous pouvez l'activé ou bien aller en chercher
un sur le site, en cliquant « Sélectionner un Persona », et faites-votre choix !

Comment enregistrer une macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Dans la version actuelle de LibO ou AOO, la fonction « Enregistrer macro » n'est pas disponible.
Pour la faire apparaître, il faut aller :

• dans le menu « Outils » ;


• sélectionnez « Editions » ;
• et dans la fenêtre qui apparaît sélectionner « Avancé ».

Dans les « Options facultatives », il faut cocher « Activer l'enregistrement de macro ».


Maintenant quand vous êtes dans votre fichier la commande « Enregistrer une macro » apparaît dans le
menu « Outils » et « Macros ».

Est-il possible de visualiser le code source d'AOO ou LibO ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Le code source pour AOO est ici
Le code source pour LibO est ici

Comment faire un zoom rapidement ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Dans les documents de la suite LibO ou AOO, il est possible de faire un zoom à l'aide de la molette de
la souris.
Pour cela il faut tenir la touche Ctrl enfoncée tout en bougeant la molette.

Existe-t-il des Easter Eggs dans Apache OpenOffice ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La réponse est oui.
Pour découvrir les équipes de développement AOO :

• dans le Traitement de texte, saisissez le mot StarWriterTeam et appuyez ensuite sur la touche F3 ;
• dans le Tableur, saisissez la formule =STARCALCTEAM() dans une cellule.

Un jeu de morpion dans le tableur :

• saisissez la formule =GAME(E10:G12;"TicTacToe"), par exemple en A1 ;


• le jeu se déroule dans la plage que vous avez désigné (E10:G12).

-8-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Un jeu de Space Invaders dans le tableur :

• saisissez la formule =GAME("StarWars") dans une cellule.

-9-
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Base de données


De quoi est constitué un fichier odb ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Un fichier odb correspond à un fichier Base de données d'une des deux suites bureautiques LibO ou AOO.
Il est généralement constituer de :

• TABLES : une table est un ensemble de données organisées sous forme d'un tableau où les
colonnes correspondent à des catégories d'information (une colonne peut stocker des numéros de
téléphone, une autre des noms...) et les lignes à des enregistrements, également appelés entrées ;
• REQUETES : une requête est un langage informatique utilisé pour effectuer des recherches, des
extractions et des tris sur des bases de données ou autres systèmes d'information ;
• FORMULAIRES : un formulaire est un espace de saisie dans l'interface utilisateur, pouvant
comporter plusieurs zones ou champs, qui permettent de saisir du texte, de cocher des cases,
d'effectuer un choix dans une liste de termes prédéfinis, d'appuyer sur des boutons et bien
d'autres ;
• ETATS : un état est une mise en forme d'informations, en vue de leur affichage ou de leur
impression. La constitution d'états se fait sans qu'il y ait de modification des données utilisées,
le but est de constituer diverses présentations synthétiques de ces données dans l'objectif de
comprendre ce qu'elles recouvrent : statistiques, évolutions dans le temps, cumuls et sous-totaux et
bien d'autres ;
• MACROS : une macro est une suite de code informatique permettant de réaliser des opérations,
c'est employé pour des tâches répétitives.

Comment débuter avec Base de données ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Grâce au tutoriel de Cyril Beaussier, vous allez apprendre pas à pas à créer votre première base au format
natif AOO/LibO. Vous y aborderez l'utilisation des assistants pour la création des tables et des formulaires,
le mode ébauche et l'éditeur de relations.

lien : Consultez le tutoriel de Cyril Beaussier

Comment se connecter à une base de données existante ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Quand vous créez un nouveau fichier, l'assistant s'ouvre dans une fenêtre.
Il vous suffit alors de cochez « Se connecter à une base de données existante », et dans la liste sélectionnez
le type de connexion souhaitée.
Cela vous demande ensuite de sélectionner la base de données et de saisir les paramètres d'identification.
Attention bien cocher « Mot de passe requis » si la connexion nécessite un mot de passe.

Comment créer une table ou une vue ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Une table est un ensemble de données organisées sous forme d'un tableau, où les colonnes correspondent
à des catégories d'information (une colonne peut stocker des numéros de téléphone, une autre des noms,
une date, etc.) et les lignes à des enregistrements, également appelées entrées.

- 10 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Vous avez deux façons de faire pour créer une table :

• avec l'assistant : en suivant les étapes qui permettent de créer la table ;


• en mode ébauche : en passant par une interface graphique pour créer les différents champs de la
table.

Vous pouvez créer une vue (attention, vous devez être administrateur de la base pour en créer une). Une
vue est une requête d'interrogation de la base. On peut la voir comme une table virtuelle.

Comment créer une requête ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Une requête est un langage informatique utilisé pour effectuer des recherches, des extractions et des tris
sur des bases de données ou autres systèmes d'information.
Vous avez trois façons de faire pour créer une requête :

• avec l'assistant : en suivant les étapes qui permettent de créer la requête ;


• en mode ébauche : en passant par une interface graphique pour créer les éléments qui constituent
la requête ;
• en SQL : en saisissant le code SQL correspondant.

Comment créer un formulaire ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Un formulaire est un espace de saisie dans l'interface utilisateur, pouvant comporter plusieurs zones ou
champs, qui permettent de saisir du texte, de cocher des cases, d'effectuer un choix dans une liste de
termes prédéfinis, d'appuyer sur des boutons, etc.
Vous avez deux façons de faire pour créer un formulaire :

• avec l'assistant : en suivant les étapes qui permettent de créer le formulaire ;


• en mode ébauche : en passant par une interface graphique pour créer les différents éléments qui
seront contenu dans le formulaire.

Comment créer un état (ou rapport) ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Un état est une mise en forme d'informations, en vue de leur affichage ou de leur impression. La
constitution d'états se fait sans qu'il y ait de modification des données utilisées, le but est de constituer
diverses présentations synthétiques de ces données dans l'objectif de comprendre ce qu'elles recouvrent :
statistiques, évolutions dans le temps, cumuls, sous-totaux, etc.
Vous avez deux façons de faire pour créer un état :

• avec l'assistant : en suivant les étapes qui permettent de créer l'état ;

- 11 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• en mode ébauche : en passant par une interface graphique pour créer les différents éléments que
l'on veut voir ou imprimer.

Comment créer une requête pour identifier les enregistrements vides dans une table ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Lorsque vous créez une requête (en vue SQL par exemple), vous pouvez préciser la valeur IS NULL sur un
ou plusieurs champs, dans la clause WHERE.
La clause WHERE exprime les conditions de recherches.
La requête suivante renvoie les enregistrements de la Table1, si le champ « Matricule » est vide :

SELECT * FROM Table1 WHERE Matricule IS NULL

Inversement, pour renvoyer les matricules non vides, utilisez IS NOT NULL :

SELECT * FROM Table1 WHERE Matricule IS NOT NULL

- 12 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Dessin


Comment transférer un fichier palette de couleurs personnalisé d'un poste à un autre ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Dans LibO/AOO, il est possible de personnaliser les palettes de couleurs et de les sauvegarder (type .soc)
pour une réutilisation ultérieure. Vous pouvez aussi copier ces fichiers sur d'autres postes de travail.
Sur le poste source :

1 Menu « Format » ;
2 Sélectionnez « Remplissage » ;
3 Onglet « Couleurs » ;
4 Cliquez sur l'icône « Enregistrer la liste des couleurs » (LibO) ou « Enregistrer la palette de couleurs
» (AOO) ;
5 Vous pouvez ainsi récupérer le nom de votre fichier personnalisé.

Nota :
Les fichiers .soc sont généralement stockés dans le répertoire:
C:\Users\zoom61\AppData\Roaming\LibreOffice\4\user\config
ou C:\Users\zoom61\AppData\Roaming\OpenOffice\4\user\config
Copiez le fichier .soc sur un support pour effectuer le transfert.
Sur le poste de destination :

1 Enregistrez le fichier .soc sur le disque ;


2 Ensuite, ouvrez Dessin ;
3 Menu « Format » ;
4 Sélectionnez « Remplissage » ;
5 Onglet « Couleurs ».

Cliquez sur l'icône « Charger la liste des couleurs » (LibO) ou « Charger la palette de couleurs » (AOO).
Recherchez et ouvrez votre fichier palette de couleurs personnalisé.
Cliquez sur le bouton « OK » pour valider.
Vous pouvez maintenant utiliser cette palette.

Comment définir un modèle personnalisé par défaut ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Tout d'abord, ouvrez une page vierge et modifiez le styliste :

• utilisez le menu « Format » et « Styles et formatage » (F11) ;


• faites un clic droit sur chaque Style que vous souhaitez modifier ;
• sélectionnez l'option « Modifier » ;
• effectuez les personnalisations en fonction de vos préférences ;
• cliquez sur le bouton « OK » pour valider ;
• vous pouvez aussi ajouter des styles personnalisés (Format/Styles et Formatage/Clic droit/
Nouveau).

Vous allez ensuite sauvegarder le fichier en tant que modèle :

• menu « Fichier », « Modèle de document » et « Enregistrer ;


• nommez le nouveau modèle ;

- 13 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• sélectionnez la catégorie « Mes modèles » ;


• cliquez sur le bouton « OK » pour valider.

Et pour définir le fichier comme modèle par défaut :

• menu « Fichier/ « Modèle », de document » et « Gérer » ;


• double-cliquez sur le dossier « Mes modèles » dans la boîte de dialogue ;
• sélectionnez le nom du modèle créé précédemment ;
• cliquez sur le bouton « Commandes » ;
• sélectionnez l'option « Définir comme modèle par défaut » ;
• cliquez sur le bouton « Fermer » ;
• vous pouvez ouvrir un nouveau dessin pour vérifier le nouveau modèle par défaut (Menu Fichier/
Nouveau/Dessin).

Pour rétablir le modèle standard :

• menu « Fichier/ « Modèle », de document » et « Gérer » ;


• cliquez sur le bouton « Commandes » ;
• sélectionnez l'option « Rétablir modèle par défaut » ;
• cliquez sur le bouton « Fermer ».

Comment créer une image vectorielle ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Sous « Dessin », il est très facile de convertir une photo en image vectorielle.
Il faut ouvrir l'image et la sélectionner.
Puis choisir l'option « Modifier », « Convertir » et « En polygone ».
Dans la fenêtre qui apparaît, libre à vous de jouer sur le « Nombre des couleurs » ou bien encore sur la
« Réduction de points ».
N'oubliez pas de cocher la case correspondant à « Boucher les trous ».

- 14 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Présentation


Comment créer sa première présentation ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Voici un tutoriel qui va vous permettre de réaliser étape par étape un diaporama.

lien : Premiers pas avec « Présentation »

Comment revenir sur la première diapo lorsque l'on est arrivé à la fin de la présentation ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
• Menu « Diaporama ».
• Sélectionnez « Paramètres du diaporama ».
• Sélectionnez l'option Type = Auto.
• Indiquez la durée 00:00:00.
• Cliquez sur le bouton « OK » pour valider.

Comment faire pour ne pas afficher les entêtes et pieds de page sur la première diapo ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Dans une présentation, la première diapo est souvent utilisée comme page d'accueil. Il est parfois utile
de masquer les informations apparaissant dans les entêtes et pieds de page de cette première diapo, par
soucis d'esthétique.

• Menu « Affichage ».
• Sélectionnez « En-têtes et pieds de page ».
• Onglet « Diapo ».
• Cochez par exemple l'option « Numéro de diapo » pour numéroter automatiquement les pages..
• Cocher ensuite l'option « Ne pas afficher sur la première diapo »..
• Cliquez sur le bouton « Appliquer partout » pour valider.

Est-il possible d'intégrer des fichiers son ou vidéo dans une présentation ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Il est possible de lire des fichiers audios ou vidéos dans une présentation. Ces fichiers multimédias sont
associés sous forme de liens externes.
Vous devrez recréer le lien si vous déplacez la présentation.
Le plus pratique pour distribuer ou déplacer la présentation, est de stocker les fichiers multimédias et .odp
dans le même répertoire.

Comment faire boucler sa présentation ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Ouvrir la présentation.
Ouvrez l'onglet « Trieuse de diapositives » pour afficher toutes les diapositives à l'écran :

- 15 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• sélectionnez toutes les diapositives à l'aide de la combinaison de touches Ctrl+A ;


• dans le panneau des tâches, sélectionnez l'onglet « Transition » ;
• cliquez sur « Automatiquement » après dans la section Passer à la diapo suivante ;
• définissez l'intervalle de temps qui doit séparer chaque diapositive (par exemple « 10 sec. ») ;
• cliquez sur « Appliquer » à toutes les diapos ;
• puis allez dans le menu « Diaporama » et cliquez sur « Paramètres du Diaporama » ;
• sous la section « Type », cochez l'option « Auto » et mettez le compteur à « 00:00:00 » ;
• cliquez sur « OK » ;
• appuyez sur la touche F5 pour lancer le diaporama.

Pour sortir de cette boucle sans fin, il suffit d'appuyer sur la touche ESC du clavier.

- 16 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Tableur


Comment identifier les doublons dans une plage de cellules ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple permet de visualiser les doublons contenus dans une plage de cellules, en utilisant la fonction
de Format conditionnel.
Le format conditionnel permet d'appliquer une mise en forme spécifique lorsqu'une condition particulière
est remplie. Cette fonction permet ainsi de mieux visualiser certaines données mais aussi de les masquer
(en appliquant par exemple la même couleur au texte et au fond de la cellule). Vous pouvez accéder à cette
fonction dans le Menu Format / Format conditionnel.
Vous pouvez ajouter des « styles de cellules » en plus de ceux proposés par défaut, à partir du menu
Format / Styles et Formatage (ou de la touche raccourci F11).
Si par exemple vous souhaitez identifier les doublons dans la plage A1:A20 :

• sélectionnez la cellule A1 ;
• menu « Format » ;
• « Format conditionnel » ;
• « Condition1 », sélectionnez l'option « La formule est : » ;
• indiquez dans le champ conditionnel :

NB.SI($A$1:$A$20;A1)>1

• précisez le style de cellule ;


• cliquez sur le bouton « OK » pour valider ;
• appliquez ensuite le même format dans les autres cellules de la plage à tester.

Comment faire apparaître $ dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour faire apparaître les $ devant les coordonnées d'une cellule, il suffit de faire MAJ + F4.

Comment convertir des chiffres en lettres ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cela n'existe pas par défaut dans les suites bureautiques mais il existe une macro qui le fait. Elle se trouve
ici, il suffit de l'installer comme une extension.
Une fois installée, vous avez une nouvelle barre d'outils qui s'est créée avec deux icônes :

• le premier permet le paramétrage ;


• et le second la conversion.

Ces deux commandes sont aussi accessibles dans le menu « Outils » et « Add-ons ».
Il faut paramétrer, pour cela il faut lancer Tableur et aller dans « Réglages chiffres en lettre ».
Dans les cases à cocher, il faut choisir « France, Canada... », « Demande choix », « A droite » et « Demande
de confirmation ».

- 17 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Ensuite, il ne reste plus qu'à faire des essais, écrivez « 25 » dans la cellule A1, et cliquer sur l'icône 1un,
cela va écrire « vingt-cinq » dans la cellule B1.

Comment ajuster la hauteur de ligne et la largeur de colonne au clavier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Raccourci très pratique pour redimensionner vos lignes et colonnes sur le tableur Tableur :

• se mettre sur la ligne ou la colonne à modifier ;


• tenir la touche « Alt » enfoncée :
• et avec les flèches « gauche » ou « droite » pour modifier la largeur de la colonne,
• et avec les flèches « haut » et « bas » pour modifier la hauteur de la ligne.

Comment saisir une fraction dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous avez besoin de saisir une fraction dans une cellule, mais cela est interprété comme une date ?
Pour résoudre ce « petit » désagrément, il suffit de saisir : 0 1/3

Comment revenir à la ligne dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour réaliser un retour à la ligne, il suffit d'appuyer sur la touche Ctrl puis sur la touche Entrée de votre
clavier.

Comment convertir une information en heure HH:MM en minute MM ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour réaliser la conversion, il suffit de multiplier la donnée la cellule par 1440.

Comment ajouter automatiquement un texte personnalisé


à la suite de la valeur saisie dans une cellule ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Il est possible d'afficher automatiquement un texte à la suite d'une valeur saisie dans une cellule :
Par exemple une unité de mesure ou une description complémentaire :

• sélectionnez la cellule ou la plage de cellules ;


• menu Format ;
• sélectionnez Cellules ;
• sélectionnez l'Onglet « Nombres » ;
• sélectionnez l'option « Défini par l'utilisateur » dans la liste « Catégorie » ;
• saisissez par exemple 0,00 "Mon unité de mesure" dans le champ « Description de format » ;
• cliquez sur le bouton « OK » pour valider.

- 18 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Désormais le texte "Mon unité de mesure" est affiché à la suite des valeurs saisies dans la cellule.
Pensez à réadapter la largeur des colonnes si « ### » s'affiche dans la cellule.

Comment transformer une valeur décimale en fraction ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Par exemple, pour que 5,5 donne 11/2
Appliquez à la cellule le format « Défini par l'utilisateur » : « ???#/???# »

Comment masquer la donnée saisie dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Appliquez à la cellule le format « Défini par l'utilisateur » : « ;;; » (3 points virgules).

Comment ne pas faire apparaitre la valeur Zéro (0) dans une cellule ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Appliquez à la cellule le format « Défini par l'utilisateur » : [=0]"";Standard

Comment utiliser les formules des fonctions ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Catégorie Texte
Les fonctions de texte manipulent ou renvoient un texte.

Catégorie Statistique
Les fonctions statistiques fournissent des calculs de statistique et de probabilité.

Catégorie Mathématique
Les fonctions mathématiques incluent les fonctions trigonométriques, hyperboliques, logarithmique et les
fonctions de sommes.

Catégorie Dates et Heures


Les fonctions de date et d'heure sont utilisées pour manipuler des heures et des dates.

Catégories Classeur et Matrice


Les fonctions de classeur trouvent des valeurs dans des tables ou des références de cellule.
Les fonctions de matrice opèrent et renvoient des tables entières de données.

Catégorie Informations
Les fonctions d'information renvoient des informations à propos de la cellule, par exemple si elles
contiennent du texte ou une formule, etc.

Catégorie Logique

- 19 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Les fonctions logiques incluent les fonctions logiques booléennes ET, OU, NON et des fonctions telle que
SI qui teste un résultat logique.

Catégorie Add-In

Diverses

Comment limiter les données à saisir dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour imposer une limite :

• imposer une longueur de caractères à saisir dans une cellule ;


• imposer le format d'une date ;
• etc.

Il faut aller dans le menu « Données », puis « Validité ».


Dans la fenêtre qui apparaît, il faut aller dans l'ongle « Critères » :

• Autoriser : permet de sélectionner l'opération que l'on souhaite imposer ;


• Données : permet de fixer le type de limite ;
• Maximum : permet d'indiquer la valeur souhaitée.

Comment utiliser des jockers dans des formules de calcul ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Par exemple vous voulez savoir combien de cellules commencent par une expression.
Prenons le cas où nous souhaitons connaître le nombre de cellules commençant pas « CLIENT ».
La formule devient alors :

=NB.SI(A1:A1000;"CLIENT.*")

Pour information : « . » correspond au remplacement de n'importe quel caractère, et « * » correspond à la


répétition du précédent caractère (ici « . ») un nombre indéterminé de fois.

Comment sélectionner les données d'une liste ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour cela, il faut sélectionnez la (ou les) cellule(s) où vous souhaitez mettre dans la liste.
Puis aller dans le menu « Données », puis « Validité ». Dans l'onglet « Critères » et dans « Autoriser »,
sélectionnez « Liste » ou « Plage de cellules » :

• si vous avez choisi « Liste », vous devez saisir une donnée par ligne ;
• si vous avez choisi « Plage de cellules », vous devez sélectionner les cellules qui contiennent les
données.

Cochez la case « Autoriser les cellules vides » s'il n'est pas indispensable de sélectionner une valeur.

- 20 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Quand vous sélectionnez une des cellules, vous faites apparaître sur sa droite une liste des valeurs. Il ne
reste plus qu'à sélectionner la donnée souhaitée.

Comment analyser la structure d'une formule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Sélectionnez la cellule qui contient la formule et cliquez sur le bouton « Assistant fonctions » (qui se trouve
dans la barre de formule) :

• dans la fenêtre qui s'ouvre, affichez l'onglet « Structure » ;


• la formule apparaît dans une arborescente. Chacun de ses éléments peut-être précédé d'un signe
+. Il suffit de cliquer dessus pour voir le contenu de cet élément. Le champ « Résultat » donne le
résultat de la fonction analysée ;
• en analysant de cette façon les différentes fonctions de la formule, vous trouverez sans difficulté
celle qui pose un problème.

Comment scinder votre feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Sélectionnez la cellule où vous voulez scinder la feuille. La cellule doit être celle qui est sous la séparation
Ensuite cliquez sur « Fenêtre » puis « Scinder ».
Une barre de séparation apparait à l'écran.
Au-dessus comme au-dessous, vous pouvez maintenant naviguer en toute sérénité en ayant les deux
parties de votre tableau toujours visibles à l'écran.
Même opération pour revenir au mode normal.

Comment modifier la taille d'une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Un clic dans une cellule puis maintenir la touche Alt + la flèche droite ou gauche, bas ou haut.

Comment changer de feuille rapidement avec le clavier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Touche Ctrl + la flèche droite ou gauche, bas ou haut.

Comment masquer une plage de cellule à l'impression ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour ne pas imprimer certaines cellules ou plages de cellules dans un tableau :

• sélectionnez la cellule ou la plage de cellules que vous souhaitez masquer ;


• dans le menu « Format », cliquez sur la commande « Cellules... » ;

- 21 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• Puis dans le dernier onglet « Protection... », cliquez sur « Masquer pour l'impression ».

- 22 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Traitement de texte


Comment comparer deux versions d'un document ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Lorsque vous disposez de deux versions d'un même fichier, il est parfois utile de comparer la copie et
l'original.
AOO/LibO dispose d'un outil permettant :

• de regrouper les deux documents dans le fichier original ;


• d'identifier les modifications ;
• d'accepter ou de refuser chaque différence.

Ouvrez votre document original, puis sélectionnez le menu « Édition » et « Comparer des documents »
Sélectionnez la copie du document et cliquez sur le bouton « Insérer ».
LibO/AOO combine les deux documents dans votre document initial. Tous les passages de texte qui
s'affichent dans votre document, mais pas dans la copie, sont identifiés comme des insertions, et tous les
passages de texte manquants dans votre document initial sont identifiés comme des suppressions.
Vous pouvez alors accepter les « insertions », auquel cas le texte correspondant reste dans sa forme
d'origine, ou accepter les « suppressions », auquel cas le texte marqué (contenu dans la copie) n'est pas
inséré dans le document.
Nota : La fonction de révision est disponible pour les documents texte et les classeurs.

Comment changer le type de guillemets dans les documents ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Utilisez la procédure suivante pour utiliser les guillemets :

" à la place de << et >>

• Menu « Outils ».
• « AutoCorrection ».
• Onglets « Guillemets typographiques ».
• Décochez l'option « Remplacer » dans la zone « Guillemets doubles ».
• Cliquez sur le bouton « OK » pour valider.

Cette option est applicable pour les différents types de fichiers LibO/AOO.
Vous pouvez aussi définir des caractères personnalisés en cliquant sur les boutons à droite des champs «
En début de mot » et « En fin de mot ». Ces boutons permettent d'afficher la table de caractères.

Comment déplacer un paragraphe complet rapidement ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Placez-vous dans votre paragraphe puis maintenez la touche « Ctrl » enfoncée.

- 23 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Ensuite déplacez-vous avec les touches fléchées « haut » et « bas » selon l'endroit où vous voulez aller.

Comment installer un correcteur grammatical ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Même s'il y a dans le menu « Orthographe et grammaire » dans le Traitement de texte, il n'y a pas de
correcteur grammatical intégré, juste un correcteur orthographique.
Mais il existe deux solutions gratuites :

• Grammalecte ;
• LanguageTool.

Il existe aussi deux solutions payantes :

• Antidote ;
• Cordial.

lien : Procédure d'installation des correcteurs grammaticals gratuits

Comment naviguer rapidement d'un objet à un autre ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette fonctionnalité permet de passer rapidement d'un élément à un autre :

• de tableau à tableau ;
• d'image en image ;
• de section en section ;
• etc.

Il faut pour cela soit :

• cliquer sur l'icône « Navigateur » ;


• aller dans le menu « Affichage », sélectionnez la commande « Navigateur » ;
• faire F5.

Ensuite, il suffit de sélectionner le type d'élément est de sélectionner celui que l'on souhaite.

Comment récupérer les styles d'un autre document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour cela il faut ouvrir un nouveau document.
Ouvrez la fenêtre « Styles » avec F11 ou dans le menu « Format » :

• puis « Styles et formatage » ;


• dans la fenêtre qui s'ouvre, cliquez sur le bouton « Nouveau style... », celui avec un petit + en vert
pour AOO ou ¶ pour LibO ;
• ensuite choisissez « Charger les styles... » ;

- 24 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• cochez la case « Texte », puis cliquez sur « À partir d'un fichier » ;


• sélectionner le document dans lequel se trouve le style que vous souhaitez récupérer ;
• c'est fini, les styles apparaissent maintenant dans la fenêtre « Styles et formatage ».

Comment supprimer tous les liens hyperliens d'un document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Sélectionner tout le texte , le raccourci clavier est Ctrl + A.
Ensuite :

• menu « Format » ;
• « Caractère » ;
• activez l'onglet « Hyperlien » ;
• dans la zone URL ;
• saisissez un Espace ;
• validez par OK.

Les hyperliens sont supprimés.

Comment réaliser un publipostage ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Le publipostage est un moyen de fusionner deux documents en un, le premier contient le document dit «
type » et le second document contient les « données variables ».

lien : Publipostage

Comment mettre une lettrine sur un document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Qu'est que c'est une lettrine ? C'est un caractère d'imprimerie beaucoup plus grand que le reste du texte.
Pour la créer :

• sélectionnez la première lettre de votre texte ;


• ouvrez le menu « Format » ;
• sélectionnez « Paragraphe » ;
• puis choisissez l'onglet « Lettrines » ;
• cochez la case « Première(s) lettre(s) » ;
• placez la valeur « 3 » (ou plus) dans le champ « Hauteur » (en lignes) ;
• modifiez le champ « Espacement du texte » en le plaçant à « 0,18cm » (ou plus) ;
• cliquez sur « OK » pour valider.

Comment alterner des pages portrait et paysage ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Voici la marche à suivre pour alterner portrait et paysage.
Ouvrez la fenêtre « Styles et formatage » dans le menu « Format » ou F11 :

- 25 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• sélectionnez l'icône « Styles de page » ;


• puis un clic-droit sur « Style par défaut » pour LibO ou « Standard » pour AOO ;
• choisissez « Nouveau » ;
• sélectionnez l'onglet « Page » ;
• sélectionnez « Paysage » ou « Portrait » ;
• dans l'onglet « Gérer » nommez-le ;
• une fois le style défini, il ne vous reste plus qu'à l'appliquer sur la page de votre choix ;
• à l'endroit où vous voulez insérer votre page, lancez l'option « Insertion » ;
• puis « Saut manuel » ;
• choisissez alors « Saut de page » ;
• ensuite sélectionnez le « Style » que vous venez juste de créer.

Comment mettre en indice ou en exposant ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La commande se trouve dans le menu « Format », cliquez sur la commande « Caractère... »
Il suffit ensuite d'aller dans l'onglet « Position » qui contient les commandes « Exposant » et « Inidice ».
Les touches raccourcis sont :

• Exposant : Ctrl+Shift+P ;
• Indice : Ctrl+Shift+B.

- 26 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic

- 27 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Informations générales


Comment accéder à l'éditeur de macros (aussi appelé EDI) ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Le raccourci clavier Alt+F11 permet d'afficher la boite de dialogue pour gérer les macros.
(C'est l'équivalent de Menu Outils / Macros / Gérer les macros / OpenOffice.ord Basic)
Ensuite, sélectionnez votre fichier AOO/LibO dans la liste de gauche.
Si le fichier ne contient pas encore de module, cliquez sur le bouton « Nouveau ».
Si le fichier contient déjà des macros, sélectionnez le module (généralement nommé Module1 par défaut)
et cliquez sur le bouton « Editer » pour y accéder.
Quand vous êtes dans l'éditeur de macros, vous pouvez basculer vers les modules des autres fichiers
ouverts, en utilisant la liste déroulante en haut à gauche de l'écran.
Pour ajouter un nouveau module, lorsque vous êtes dans l'éditeur, faites un clic droit dans la barre d'onglet,
en bas de la fenêtre : Insérer / Module Basic.

Quelle est la différence entre ThisComponent et CurrentComponent ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
ThisComponent représente le fichier contenant la macro. C'est l'équivalent de ThisWorkbook dans Excel.
CurrentComponent représente le fichier actif. C'est l'équivalent d'ActiveWorkbook dans Excel.
CurrentComponent ne fonctionne par lorsque la procédure est déclenchée depuis l'éditeur de macros.
Vous pouvez utiliser cette macro afin de vérifier par vous-même :
Créez deux fichiers OOo et sauvegardez les sur le poste (getURL renvoie une chaîne vide si le fichier n'est
pas enregistré).
Placez la macro dans un des deux fichiers.
Activez le fichier qui ne contient pas la macro.
Lancez la procédure.

Sub Test_ThisComponent_getCurrentComponent

'Récupère le chemin et le nom du fichier contenant cette macro


'Nota:
'getURL renvoie une chaîne vide si le fichier n'est pas enregistré
MsgBox ConvertFromURL( ThisComponent.getURL )

'Récupère le chemin et le nom du fichier Actif.


'Nota:
'Renvoie un chaîne vide si la macro est lancée depuis l'éditeur de macros
MsgBox ConvertFromURL( StarDesktop.getCurrentComponent.getURL )
End Sub

Comment modifier la barre de titre de l'application ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

- 28 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

ThisComponent.CurrentController.Frame.Title = "Nouveau titre"

Comment visualiser les propriétés, méthodes et interfaces disponibles sur une variable objet ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Installez et utilisez l'indispensable outil créé par Bernard Marcelly: XRAY

Où trouver une description complète des APIs OpenOffice/LibreOffice ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La page d'accueil de l'API Project.
L'index global.
Vous pouvez aussi installer le SDK (Software Development Kit) sur votre poste.
Il s'agit d'une documentation très détaillée sur les concepts et les APIs d'OpenOffice.org.
Software Development Kit (SDK).

Comment lire ou modifier les propriétés des fichiers OpenOffice/LibreOffice ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les propriétés des fichiers AOO/LibO sont accessibles par le menu Fichier/Propriétés.
Il est possible de lire ces propriétés par macros :

Sub LireProprietesFichier
Dim oInfo As Object

oInfo = ThisComponent.DocumentInfo

MsgBox "Titre: " & oInfo.title & Chr(10) & _


"Auteur: " & oInfo.Author & Chr(10) & _
"Mots clés: " & oInfo.Keywords & Chr(10) & _
"Description: " & oInfo.Description & Chr(10) & _
"Sujet: " & oInfo.Subject & Chr(10) & _
"Type: " & oInfo.MIMEType

MsgBox "Date création: " & oInfo.CreationDate.Day & "/" & oInfo.CreationDate.Month & _
"/" & oInfo.CreationDate.Year & Chr(10) & _
"Modifié par: " & oInfo.ModifiedBy & Chr(10) & _
"Date modification: " & oInfo.ModifyDate.Day & "/" & oInfo.ModifyDate.Month & _
"/" & oInfo.ModifyDate.Year & " " & Format(oInfo.ModifyDate.Hours, "00") & ":" & _
Format(oInfo.ModifyDate.Minutes, "00") & ":" & Format(oInfo.ModifyDate.Seconds, "00")

'Autre possibilité pour lire les propriétés


MsgBox oInfo.getPropertyValue("Author")
End Sub

Il est aussi possible de modifier les propriétés :


Cet exemple modifie la propriété « Auteur ».

Dim oInfo As Object

- 29 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oInfo = ThisComponent.DocumentInfo
oInfo.Author = "mimi"

'Une autre possibilité de syntaxe pour modifier une propriété


oInfo.setPropertyValue("ModifiedBy" , "fifi")

Comment ajouter, lire ou modifier les propriétés champ utilisateur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Le champ utilisateur permet d'assigner des informations personnalisées au document.
Menu Fichier / Propriétés / Onglet « utilisateur »
Quatre champs sont disponibles.

Sub AjoutChampUtilisateur
Dim oInfo As Object

oInfo = ThisComponent.DocumentInfo

'Ajout d'une information personnelle dans la 1er champ:


oInfo.setUserFieldName( 0 , "Affaire" )
oInfo.setUserFieldValue( 0 , "FAQ OOo" )

'Lecture du premier champ utilisateur


MsgBox "Nom champ utilisateur N°1: " & oInfo.getUserFieldName(0) & Chr(10) & _
"Contenu champ utilisateur N°1: " & oInfo.getUserFieldValue(0)

End Sub

Pour effacer un champ utilisateur, utilisez :

Sub EffacerChampUtilisateur
Dim oInfo As Object

oInfo = ThisComponent.DocumentInfo

'Suppression info dans la 1er champ


oInfo.setUserFieldName( 0 , "" )
oInfo.setUserFieldValue( 0 , "" )

End Sub

Comment récupérer des informations sur l'imprimante active ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub InformationsImprimanteActive

MsgBox ThisComponent.Printer(0).Value & Chr(10) & _


"Est occupée: " & ThisComponent.Printer(4).Value

' 0 = Name
' 1 = PaperOrientation ( 0=Portrait , 1=Paysage)
' 2 = PaperFormat ( 0=A3 , 1=A4 , 2=A5 , 3=B4 , B5=4 )
' 3 = PaperSize
' 4 = IsBusy
' 5 = CanSetPaperOrientation

- 30 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

' 6 = CanSetPaperFormat
' 7 = CanSetPaperSize

End Sub

Comment figer l'écran pendant le déroulement d'une macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les macros qui sélectionnent des feuilles successives ou des cellules, qui activent/désactivent des objets
divers, peuvent provoquer un effet de scintillement à l'écran. Une solution (hormis celle d'éviter les
sélections dans les macros) consiste à figer l'écran pendant le déroulement de la macro. C'est l'équivalent
de ScreenUpdating = False en VBA.
Pour activer cette option, placez la ligne suivante en début de procédure :

ThisComponent.LockControllers

Pour désactiver cette option en fin de procédure :

ThisComponent.UnlockControllers

Comment récupérer des informations sur les numéros de compilation,


de version, ainsi qu'une liste des développeurs AOO/LibO ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Sélectionnez le menu Aide - À propos de LibreOffice ou OpenOffice.
Cette commande ouvre une boîte de dialogue contenant des informations sur le document.
Ensuite, pour obtenir plus d'informations, maintenez la touche Ctrl enfoncée et appuyez successivement
sur les lettres S, D et T. Vous trouverez au début des informations sur les numéros de compilation et de
version, ainsi qu'une liste des développeurs OOo.
Si vous ne souhaitez pas lire les informations jusqu'à la fin, appuyez sur la touche Échap.
Cette macro de Laurent Godard permet aussi de récupérer la version de LibO/AOO utilisée :

Sub Main
MsgBox "Version OOo: " & RecupereVersionOOO
End Sub

Function RecupereVersionOOO() As String


'-----------------------
'Auteur: Laurent Godard
'récupère version de OOo
'-----------------------

Dim aSettings, aConfigProvider


Dim aParams2(0) As new com.sun.star.beans.PropertyValue

aConfigProvider = createUnoService( "com.sun.star.configuration.ConfigurationProvider" )

aParams2(0).Name = "nodepath"
aParams2(0).Value = "/org.openoffice.Setup/Product"

- 31 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

aSettings =
aConfigProvider.createInstanceWithArguments( "com.sun.star.configuration.ConfigurationAccess",
aParams2() )

RecupereVersionOOO = aSettings.getbyname("ooSetupVersion")
End Function

La fonction GetSolarVersion renvoie le numéro interne de la version active de LibO/AOO.

Sub Main
MsgBox GetSolarVersion
End Sub

- 32 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Base de données


Comment se connecter à une base et créer une requête par macro ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple effectue une requête dans la base de données enregistrée « Bibliography » (base démo fournie
dans le pack d'installation Open Office).
Une base est dite enregistrée lorsque vous pouvez la visualiser en utilisant le menu Afficher/Sources de
données (ou par la touche raccourci F4) depuis Tableur et Traitement de texte.
Pour enregistrer une base :

• menu Outils ;
• Options ;
• sélectionnez « Base » dans l'arborescence ;
• double cliquez sur « Bases de données » ;
• cliquez sur le bouton « Nouveau » ;
• utilisez le bouton « Parcourir » pour rechercher la base sur le disque ;
• puis Validez en cliquant sur OK dans toutes les boîtes de dialogue.

Remarque :
Le nom des champs et des tables est encadré par des doubles guillemets dans la requête.

Sub RequeteBase_V01
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")

'Connexion à la base de données enregistrée "Bibliography"


'(Base démo fournie dans le pack d'installation Open Office)

'Une base est dite enregistrée lorsque vous pouvez la visualiser


'en utilisant le menu Afficher/Sources de données(ou par la touche raccourci F4).
'Pour enregistrer une base :
'Menu Outils
'Options
'Sélectionnez "Base" dans l'arborescence
'Double cliquez sur "Bases de données"
'Cliquez sur le bouton "Nouveau"
'Utilisez le bouton "Parcourir" pour rechercher la base sur le disque
'Puis Validez en cliquant sur OK dans toutes les boîtes de dialogue.
oDB = oDBContext.getbyName("Bibliography")

'Si la base est protégée par un mot de passe, utilisez


'oBase = oDB.getConnection("Login", "MotDePasse")
oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()

strSQL = "SELECT ""Identifier"",""Publisher"",""ISBN"" FROM ""biblio"" " & _


"WHERE ""Author""='Böhm, Franz'"
oRequete = oStatement.executeQuery( strSQL )

If Not IsNull(oRequete) Then


While oRequete.next
MsgBox oRequete.getString(1) & " / " & _
oRequete.getString(2) & " / " & oRequete.getString(3)
Wend
End If

oRequete.Close

- 33 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oStatement.Close
oBase.Close
oBase.Dispose
End Sub

Cet autre exemple permet de se connecter à une base non enregistrée.

Sub RequeteBase_V02
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String , Fichier As String

Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb")

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)

oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()

strSQL = "SELECT ""ID"",""Champ1"",""Champ2"" FROM ""maTable"" " & _


"WHERE ""Champ2""=12345"
oRequete = oStatement.executeQuery( strSQL )

If Not IsNull(oRequete) Then


While oRequete.next
MsgBox oRequete.getString(1) & " / " & _
oRequete.getString(2) & " / " & oRequete.getString(3)
Wend
End If

oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose
End Sub

Quelles sont les méthodes pour lire le contenu d'une requête ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Comme vous pouvez le voir dans l'exemple précédent, la méthode getString permet de lire le contenu de
la requête au format texte.

'Vérifie que le résultat de la requête n'est pas vide.


If Not IsNull(oRequete) Then
'Boucle sur chaque ligne résultat de la requête
While oRequete.next
'Exemple pour 3 champs type String.
'Les paramètres 1, 2 et 3 définissent les numéros de colonnes.
MsgBox oRequete.getString(1) & " / " & _
oRequete.getString(2) & " / " & oRequete.getString(3)
Wend
End If

Le tableau suivant liste quelques méthodes disponibles en fonction du type de champ à lire dans la base :

- 34 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Méthode Type de donnée


getString String
getBoolean Boolean
getDouble Double
getDate Date
getTime Time
getTimestamp DateTime

Exemple de lecture d'un champ Date au format JJ/MM/AA hh:mm:ss dans la base :

If Not IsNull(oRequete) Then


While oRequete.next
MsgBox oRequete.getString(1) 'renvoie un format AAAA-MM-JJ

MsgBox oRequete.getDate(1)'.Year 'renvoie un format AAAA


'MsgBox oRequete.getDate(1).Month 'renvoie un format MM
'MsgBox oRequete.getDate(1).Day 'renvoie un format JJ

MsgBox oRequete.getTimestamp(1).Year 'renvoie un format AAAA


MsgBox oRequete.getTimestamp(1).Month 'renvoie un format MM
'MsgBox oRequete.getTimestamp(1).Day 'renvoie un format JJ
MsgBox oRequete.getTimestamp(1).Hours 'renvoie un format hh
'MsgBox oRequete.getTimestamp(1).Minutes 'renvoie un format mm
'MsgBox oRequete.getTimestamp(1).Seconds 'renvoie un format ss
'MsgBox oRequete.getTimestamp(1).HundredthSeconds
Wend
End If

lien : api.openoffice.org

Comment ajouter un enregistrement dans une table ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub AjoutEnregistrement
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String , Fichier As String

Fichier = ConvertToURL("C:\Documents and Settings\mimi\OOoBase.odb")

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)

oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()

'--- Ajoute un enregistrement ---


strSQL = _
"INSERT INTO ""maTable"" (""ChampTexte"", ""ChampNum"") Values('azerty', 12345)"
oRequete = oStatement.executeQuery( strSQL )
'--------------------------------

oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose

- 35 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment supprimer des enregistrements dans une table ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub SupprimerEnregistrement
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String , Fichier As String

Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb")

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)

oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()

'Supprime les enregistrements si le Champ2 contient la valeur 12345


strSQL = "DELETE FROM ""maTable"" WHERE ""Champ2""=12345 "
oRequete = oStatement.executeQuery( strSQL )
'------------------------------------------------------------------

oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose
End Sub

Comment mettre à jour des enregistrements dans une table ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub MiseAJourEnregistrement
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim oStatement As Object , oRequete As Object
Dim strSQL As String , Fichier As String

Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb")

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)

oBase = oDB.getConnection("","")
oStatement = oBase.createStatement()

'Mise à jour d'enregistrements :


'Insère le mot "Cloture" dans le Champ1 si le Champ2 contient la valeur 10
strSQL = "UPDATE ""maTable"" SET ""Champ1""='Cloture' WHERE ""Champ2"" = 10"
oRequete = oStatement.executeQuery( strSQL )
'-----------------------------

oRequete.Close
oStatement.Close
oBase.Close
oBase.Dispose

- 36 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment ajouter une nouvelle table par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub CreerTable
Dim oDBContext As Object , oDB As Object , oBase As Object
Dim Fichier As String
Dim NouvelleTable As Object, CollectionTables As Object, NouveauChamp As Object

Fichier = ConvertToURL("C:\Documents and Settings\mimi\dossier\OOoBase.odb")

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDB = oDBContext.getbyName(Fichier)

oBase = oDB.getConnection("","")

'Création nouvelle table


CollectionTables = oBase.Tables

NouvelleTable = CollectionTables.createDataDescriptor
NouvelleTable.Name = "gestionStock" 'nom de la nouvelle table

'Description 1er champ


NouveauChamp = NouvelleTable.Columns.createDataDescriptor
NouveauChamp.Name = "NomProduit" 'nom champ
NouveauChamp.Type = com.sun.star.sdbc.DataType.VARCHAR '(1) champ type texte
NouveauChamp.Precision = 200
NouvelleTable.Columns.appendByDescriptor(NouveauChamp) 'ajout du champ

'Description 2eme champ


NouveauChamp = NouvelleTable.Columns.createDataDescriptor
NouveauChamp.Name = "NbStock" 'nom champ
NouveauChamp.Type = com.sun.star.sdbc.DataType.INTEGER '(2) champ type numérique
NouveauChamp.Precision = 10
NouvelleTable.Columns.appendByDescriptor(NouveauChamp)

'Insertion de la nouvelle table


CollectionTables.appendByDescriptor(NouvelleTable)
'----------------------------------------

oBase.Close
oBase.Dispose
End Sub

Comment activer/enregistrer une source de données ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Une source est dite enregistrée lorsque vous pouvez la visualiser en utilisant le menu Afficher/Sources de
données (ou par la touche raccourci F4) depuis Tableur ou Traitement de texte.

Sub Integrer_SourceDonnees()
Dim oDBContext As Object, oDataSource As Object
Dim Source As String, Chemin As String
Dim Array()

'Le nom qui s'affichera quand vous visualiserez

- 37 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'la source depuis Tableur ou Traitement de texte (touche F4).


Source = "OOoBase"
'Répertoire contenant la base de données
Chemin = ConvertToURL("C:\Documents and Settings\mimi\dossier")

oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
oDataSource = createUnoService("com.sun.star.sdb.DataSource")

'Vérifie s'il existe déjà une base intégrée portant ce nom


If oDBContext.hasByName(Source) then
MsgBox "Opération annulée. Vérifiez le nom." , , "Message"
Exit Sub
End If

'Attention au format URL: bien saisir un Slash /


'Chemin & "/OOoBase.odb" correspond au chemin complet de votre base de données
oDataSource.databaseDocument.storeAsURL(Chemin & "/OOoBase.odb", Array())
Chemin = "sdbc:dbase:" & Chemin

oDBContext.registerObject(Source , oDataSource)

oDataSource.setPropertyValue("URL", Chemin)
oDataSource.databaseDocument.Store()'Sauvegarde
'oDataSource.databaseDocument.Close(True)
End Sub

Comment désactiver une source de données ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub Desactiver_SourceDeDonnees()
Dim oDBContext As Object, Source As String

'Le nom de la source à désactiver


Source = "OOoBase"
oDBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")

If oDBContext.hasByName(Source) Then
oDBContext.revokeObject(Source)
Else
MsgBox "Opération annulée. Vérifiez le nom." , , "Message"
End If

End Sub

Pour désactiver une source manuellement :

• menu Outils ;
• Options ;
• sélectionnez « Base » dans l'arborescence ;
• double cliquez sur « Bases de données » ;
• sélectionnez une source dans la liste ;
• cliquez sur le bouton « Annuler » pour désactiver la source de données ;
• puis Validez en cliquant sur OK dans toutes les boîtes de dialogue ;
• a source n'est plus visible en utilisant le menu Afficher/Sources de données (ou par la touche
raccourci F4) depuis Tableur ou Traitement de texte.

- 38 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Dessin


Comment récupérer le nom et le numéro de la page active ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub Recuperer_Nom_Numero_PageActive
Dim LaPage As Object

LaPage = ThisComponent.getCurrentController.CurrentPage

MsgBox "Nom: " & LaPage.Name & " Numéro: " & LaPage.Number
End Sub

- 39 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Présentation


Comment boucler sur les pages d'une présentation
ainsi que sur chacun des objets placé sur les pages ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure ouvre une présentation, boucle sur chaque page pour afficher son nom et le nombre d'objet
qu'elle contient.
Ensuite la macro boucle sur chaque objet pour en récupérer les dimensions.

Sub BoucleObjetsPresentation
Dim Fichier As String
Dim Array() As Variant
Dim oDoc As Object , oPage As Object
Dim i As Integer , j As Integer

Fichier = "C:\Documents and Settings\mimi\dossier\maPresentation.odp"


Fichier = ConvertToURL(Fichier)

'Ouvre la présentation
oDoc = StarDesktop.LoadComponentFromURL( Fichier , "_blank", 0, Array() )

'Boucle sur les slides


For i = 0 To oDoc.getDrawPages().getCount() - 1

oPage = oDoc.getDrawPages.getByIndex(i)

'Affiche le nom de la page et compte le nombre de Shapes qu'elle contient


MsgBox oPage.getCount() & " shape(s)" & _
" dans la page nommée '" & oPage.getName & "'"

'Boucle sur les objets de la page


For j = 0 To oPage.getCount() - 1
oShape = oPage.getByIndex(j)
MsgBox "Dimensions " & oShape.getSize.Width & " x " & oShape.getSize.Height
Next j

Next i
End Sub

Comment ouvrir une présentation et la démarrer en mode plein écran ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub DemarrerPresentation
Dim Fichier As String
Dim Array() As Variant
Dim oDoc As Object

Fichier = "C:\Documents and Settings\mimi\dossier\maPresentation.odp"


Fichier = ConvertToURL(Fichier)
'Ouvre la présentation
oDoc = StarDesktop.LoadComponentFromURL( Fichier , "_blank", 0, Array() )

'Démarre la présentation en mode plein ecran


oDoc.Presentation.Start

- 40 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment masquer une page dans une présentation ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple permet de masquer le 3eme Slide dans la présentation

ThisComponent.DrawPages(2).Visible = False

Si vous souhaitez réafficher le Slide :

ThisComponent.DrawPages(2).Visible = True

Comment dupliquer une page dans la présentation ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La macro ci dessous duplique la 3eme page de la présentation.

Sub DupliqueSlideImpress
Dim oDoc As Object

oDoc = ThisComponent
'Duplique la 3eme page dans le même fichier
oDoc.Duplicate(oDoc.DrawPages(2))

End Sub

Remarque :
Le nouveau Slide est systématiquement placé à droite du Slide copié et nommé en fonction de sa position
dans la présentation.
Dans notre exemple la nouvelle page va être nommée « Page 4 » et les autres pages seront automatiquement
renommées en conséquence.

Comment créer une présentation dynamiquement ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple nécessite d'être connecté à internet afin de récupérer l'image qui va s'afficher dans la
présentation.

Sub CreerPresentation
Dim oDoc As Object , oPage As Object
Dim Arg() As Variant

'Création présentation
oDoc = StarDesktop.loadComponentFromURL( "private:factory/simpress", "_blank", 0, Arg() )

'---
'Spécifie la première page (qui est automatiquement créée en même

- 41 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'temps que la nouvelle présentation).


oPage = oDoc.DrawPages.getByIndex(0)
'Renomme la page
oPage.Name = "DVP 1"

AjoutImage ( oDoc , oPage , "http://www.developpez.com/template/logo.gif" , _


6500 , 3500 , 500 , 500 )

AjoutTexte ( oDoc , oPage , "Bienvenue à vous !" , _


14000 , 2500 , 7000 , 6000 , RGB(235,235,180) )
'---

'--- Ajoute une deuxième page ---


oPage = oDoc.DrawPages.insertNewByIndex(1) '(1) correspond à l'index de la 2eme page
oPage.Name = "DVP 2"

AjoutImage ( oDoc , oPage , "http://www.developpez.com/template/logo.gif" , _


6500 , 3500 , 500 , 500 )

AjoutTexte ( oDoc , oPage , "J'espère que cet exemple vous aura aidé..." , _
14000 , 3000 , 7000 , 6000 , RGB(235,235,180) )

'---

'Démarre la présentation en mode plein écran


oDoc.Presentation.Start
End Sub

Function AjoutImage( oCmp As Object , oPge As Object , Fichier As String , Largeur As Long , _
Hauteur As Long , Verti As Long , Horiz As Long )

Dim oImage As Object


Dim oSize As New com.sun.star.awt.Size
Dim oPos As New com.sun.star.awt.Point

'--- Insère une image, la redimensionne et la positionne et la page ---


'(Cet exemple nécessite d'être connecté à internet pour récupérer l'image)
oImage = oCmp.createInstance("com.sun.star.drawing.GraphicObjectShape")
oImage.GraphicURL = ConvertToURL(Fichier)
'Ajoute l'image
oPge.Add(oImage)

'Définit la taille
oSize.Width = Largeur
oSize.Height = Hauteur
oImage.Size = oSize

'Définit la Position
oPos.x = Horiz
oPos.y = Verti
oImage.Position = oPos
End Function

Function AjoutTexte( oCmp As Object , oPge As Object , leTexte As String , Largeur As Long , _
Hauteur As Long , Verti As Long , Horiz As Long , Couleur As Long)

Dim oShape As Object


Dim oSize As New com.sun.star.awt.Size
Dim oPos As New com.sun.star.awt.Point

'--- insère une zone de texte , la redimensionne et la positionne et la page ---


oShape = oCmp.createInstance("com.sun.star.drawing.TextShape")

'Définit la taille
oSize.Width = Largeur

- 42 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oSize.Height = Hauteur
oShape.Size = oSize

'Définit la Position
oPos.x = Horiz
oPos.y = Verti
oShape.Position = oPos

'Définit la couleur de fond pour la zone de texte


oShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
oShape.FillColor = Couleur

'Ajoute la zone de texte


oPge.Add(oShape)

'insère le texte
oShape.getText().setString( leTexte )
oShape.getText().CharHeight = 40 'taille caractères
End Function

- 43 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur


Comment ouvrir un fichier Tableur existant ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ouvrirClasseur
Dim Fichier As String
Dim Wb As Object
Dim Args()

Fichier = ConvertToUrl("C:\Documents and Settings\michel\dossier\leTableur.ods")


Wb = StarDesktop.loadComponentFromURL(Fichier,"_blank",0 ,Args() )
End Sub

Comment créer un nouveau fichier Tableur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub CreerNouveauDocument_Calc
Dim oDesktop As Object , oDoc As Object
Dim Fichier As String
Dim Args() , Opt()

oDesktop = createUnoService("com.sun.star.frame.Desktop")

'Définit le type de document à créer


'(Utilisez "private:factory/swriter" pour Writer)
Fichier = "private:factory/scalc"

'Création
oDoc = oDesktop.LoadComponentFromURL(Fichier, "_blank", 0, Args())
'
'...
'
'Enregistrement du fichier
oDoc.storeAsURL ("file:///C:/monFichier.ods", Opt())
'
'...
'
'Fermeture du fichier
'True indique que l'on sauvegarde les modifications éventuelles
oDoc.Close( True )
End Sub

Comment Retrouver les équivalences de Couleur aux formats Hex , Long et RGB ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Téléchargez le tableur démo.
Ce tableur permet de visualiser des couleurs en paramétrant les valeurs RGB (rouge ,vert ,bleu) dans une
boite de dialogue.
L'équivalence aux formats Hex et Long s'affiche automatiquement.
Il est aussi possible de saisir une valeur Hex ou Long pour rechercher l'équivalence RGB.

- 44 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Un TextField permet de visualiser le résultat de la couleur paramétrée. Vous pouvez ensuite récupérer le
code couleur en fonction de vos besoins, et dans le format qui vous intéresse (Hex ,Long ou RGB).

Comment utiliser les fonctions Calc par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub UtiserFonctionsCalc_Par_Macro
Dim Feuille As Object
Dim oFonction as Object

oFonction = _
CreateUnoService("com.sun.star.sheet.FunctionAccess")

'Définit la feuille contenant les données


Feuille = ThisComponent.Sheets.getByName("Feuille1")

'--- Additionne les valeurs de la plage A1:A10 ---


MsgBox oFonction.callFunction("SUM", _
Array(Feuille.getCellRangeByName("A1:A10")))

'--- Affiche la valeur maxi contenue dans la plage A1:A10 ---


MsgBox oFonction.callFunction("MAX", _
Array(Feuille.getCellRangeByName("A1:A10")))
End Sub

- 45 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les feuilles


Comment compter le nombre de feuilles dans le classeur ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object

oDoc=ThisComponent 'Spécifie le tableur contenant la macro


MsgBox oDoc.Sheets.Count

Comment vérifier si une feuille existe ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object

oDoc=ThisComponent

'Vérifie si la feuille nommée "Feuille2" existe


If oDoc.Sheets.hasByName("Feuille2") Then
MsgBox "La feuille existe"
Else
MsgBox "La feuille n'existe pas"
End If

Comment boucler sur toutes les feuilles du tableur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object


Dim i As Integer

oDoc=ThisComponent

For i = 1 to oDoc.Sheets.Count
'Remarque: l'index de la 1ere feuille = 0
MsgBox oDoc.Sheets(i-1).Name
Next

Comment afficher le nom de la feuille active ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object , Feuille As Object

oDoc=ThisComponent

Feuille = oDoc.getCurrentController().getActiveSheet()
MsgBox Feuille.getName()

'Une autre solution

- 46 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

MsgBox oDoc.CurrentController.ActiveSheet.getName

Comment supprimer une feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object

oDoc=ThisComponent

'Supprime la feuille nommée "Feuille3"


oDoc.GetSheets.RemoveByName("Feuille3")

Comment déplacer une feuille dans le tableur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object

oDoc=ThisComponent

'Déplace la feuille nommée "Feuille2" à la fin


oDoc.getSheets.moveByName("Feuille2",oDoc.Sheets.Count)

Comment insérer une nouvelle feuille et la positionner dans le tableur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object

oDoc=ThisComponent

'Ajoute une feuille, la nomme et place l'onglet en 3eme position


oDoc.GetSheets.insertNewByName("ma nouvelle feuille",2)

Comment renommer une feuille dans le tableur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object , Feuille As Object

oDoc=ThisComponent

'Renomme la feuille nommée "Feuille1"


Feuille = oDoc.getSheets.getByName("Feuille1")
Feuille.Name = "le nouveau nom"

- 47 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Comment dupliquer une feuille dans le tableur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object

oDoc=ThisComponent

'Duplique la "Feuille2" et la place en première position


oDoc.getSheets.copyByName("Feuille2", "Copie Feuille2", 0)
'La syntaxe: copyByName(NomFeuille_A_Dupliquer, NomCopie, IndexPosition)

Comment masquer ou démasquer une feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object , Feuille As Object

oDoc=ThisComponent

'Masque la feuille nommée "Feuille2"


Feuille = oDoc.getSheets.getByName("Feuille2")
Feuille.IsVisible = False

'Pour réafficher la feuille


'Feuille.IsVisible = True

Comment gérer la protection des feuilles par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Tout d'abord, voici un exemple pour protéger une feuille.
L'équivalent du Menu Outils / Protection / Feuille...

Sub ProtegerFeuille
Dim Feuille As Object

'Définit la feuille à Protéger


Feuille = ThisComponent.Sheets.GetByName("Feuille1")

'Affecte la protection
Feuille.Protect("")

'Exemple avec mot de passe


'Feuille.Protect("MotDePasse")
End Sub

Vous pouvez ensuite vérifier si la feuille est protégée.

Sub VerifierProtectionFeuille
Dim Feuille As Object

- 48 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'Définit la feuille à Protéger


Feuille = ThisComponent.Sheets.GetByName("Feuille1")

'Renvoie True ou False


MsgBox Feuille.IsProtected
End Sub

Et pour déprotéger la feuille.

Sub DeProtegerFeuille
Dim Feuille As Object

'Définit la feuille à Protéger


Feuille = ThisComponent.Sheets.GetByName("Feuille1")

'Déprotection
Feuille.UnProtect("")

'Exemple pour Déprotection par mot de passe


'Feuille.UnProtect("MotDePasse")

'Nota1:
'La procédure ne renvoie pas de message d'erreur si le mot
'de passe spécifié est erroné.

'Nota2:
'/!\ Les mots de passes sont sensibles à la casse /!\
End Sub

Comment créer un lien vers toutes cellules d'une feuille dans un classeur fermé ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure crée une liaison vers les cellules d'une feuille dans un classeur fermé.
Les données s'affichent dans la première feuille du classeur contenant cette macro.

Sub LiensCellules_SourceClasseurFerme
Dim objFeuille As Object
Dim sURL As String , strFeuille As String
Dim Mde As Variant

'Chemin du classeur fermé


sURL = ConvertToURL("C:\Documents and Settings\dossier\NomClasseur.ods")
'Nom de la feuille dans le classeur fermé.
strFeuille = "NomFeuille"

Mde = com.sun.star.sheet.SheetLinkMode.NORMAL

'Spécifie la feuille qui va recevoir les données


objFeuille = ThisComponent.Sheets(0)
'Création lien
objFeuille.link(sURL, strFeuille , "" , "" , Mde)

- 49 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment supprimer les liens externes entre feuilles ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object , Feuille As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Feuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
'ou
'Feuille.LinkMode = com.sun.star.sheet.SheetLinkMode.NONE

Comment retrouver la lettre d'une colonne à partir de son index ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim i As Integer

i = 5 '0 est l'index de la premiere colonne (A)


MsgBox ThisComponent.Sheets(0).Columns( i ).getName

Comment insérer des informations dans les entêtes et pied de page ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub modificationEntete_Et_PiedDePage()
Dim leStyle As Object, Entete As Object, piedPage As Object
Dim oText As Object, Curseur As Object, leChamp As Object

'Définit la feuille active


Feuille = ThisComponent.CurrentController.getActiveSheet

leStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(Feuille.PageStyle)

'Accès à l'entête de page


Entete = leStyle.RightPageHeaderContent
oText = Entete.LeftText
oText.setString ("") 'Efface les données existante dans l'entête de page

Set Curseur = oText.CreateTextCursor()

With Curseur 'mise en forme


.CharWeight = com.sun.star.awt.FontWeight.BOLD 'Gras
.CharPosture = com.sun.star.awt.FontSlant.ITALIC
.CharFontName = "Arial"
.CharHeight = "12" 'taille caractères
End With

oText.insertString Curseur, "Les données à insérer", False


'-------------------------------------------------------

'pour insérer le Numéro de page en pied de page


piedPage = leStyle.RightPageFooterContent
oText = piedPage.CenterText

- 50 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oText.setString ("") 'RAZ


Set Curseur = oText.CreateTextCursor()

'Création d'un champ "PageNumber"


leChamp = ThisComponent.createInstance("com.sun.star.text.TextField.PageNumber")
oText.insertTextContent Curseur , leChamp , False
'-------------------------------------------------------

leStyle.RightPageHeaderContent = Entete
leStyle.RightPageFooterContent = piedPage
End Sub

Pour voir le résultat dans le fichier Open Office :

• menu Editer ;
• option « Entête et pied de page ».

Comment lire le contenu des entêtes et pieds de page ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub LireContenu_Entete_Et_PiedDePage
Dim Feuille As Object , leStyle As Object
Dim PiedPage As Object

'Définit la feuille active


Feuille = ThisComponent.CurrentController.getActiveSheet

leStyle = ThisComponent.StyleFamilies.getByName("PageStyles").getByName(Feuille.PageStyle)

Entete = leStyle.RightPageHeaderContent
MsgBox Entete.LeftText.getString
'MsgBox Entete.RightText.getString
'MsgBox Entete.CenterText.getString

PiedPage = leStyle.RightPageFooterContent
MsgBox PiedPage.LeftText.getString
'MsgBox PiedPage.RightText.getString
'MsgBox PiedPage.CenterText.getString

End Sub

Comment trier les onglets par ordre alphabétique ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub TriOnglets
Dim Feuilles As Object
Dim i As Integer , j as integer

Feuilles = ThisComponent.Sheets

If Feuilles.Count > 1 Then


For j = 0 To Feuilles.Count - 2
For i = 0 To Feuilles.Count - 2

If Feuilles.getByIndex( i ).Name > Feuilles.getByIndex( i + 1 ).Name Then _


Feuilles.moveByName( Feuilles.getByIndex( i + 1 ).Name , i )

- 51 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Next i
Next j
End If
End Sub

Cet autre exemple trie les feuilles à partir du 4eme onglet :


La position des trois premiers onglets reste inchangée.

Sub Test
'Trie les feuilles à partir du 4eme onglet
'(L'index 3 correspond à 4eme feuille du classeur)
TriFeuilles( 3 )
End Sub

Sub TriFeuilles( NumFeuille As Integer )


Dim Feuilles As Object
Dim i As Integer
Dim Cible As Boolean

Feuilles = ThisComponent.Sheets

If Feuilles.Count > 1 Then


Do

Cible = False
For i = NumFeuille To Feuilles.Count - 2
If Feuilles.getByIndex( i ).Name > Feuilles.getByIndex( i + 1 ).Name Then
Feuilles.moveByName( Feuilles.getByIndex( i + 1 ).Name , i )
Cible = True
End If
Next

Loop Until Cible = False


End If

End Sub

Comment activer une feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette macro permet d'afficher le 3eme onglet du classeur.

Dim Feuille As Object

'spécifie la 3eme feuille


Feuille = ThisComponent.Sheets(2)
ThisComponent.CurrentController.ActiveSheet = Feuille

Vous pouvez aussi sélectionner une ou plusieurs cellules lors de l'activation de la feuille:

Dim Feuille As Object

'Spécifie la 2eme feuille


Feuille = ThisComponent.Sheets(1)

- 52 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'Active la feuille et sélectionne la cellule A10


ThisComponent.CurrentController.Select( Feuille.getCellRangeByName("A10") )

Comment lister le nom des onglets en multisélection ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple permet de récupérer la liste de toutes les feuilles sélectionnées dans le classeur:

Sub NomFeuillesMultiplesSelectionnees()
Dim OngletsSelectionnes As String
Dim TableauOnglets() As String
Dim i As Integer
Dim Cible As Object
Dim Collect As New Collection
Dim NomFeuille As String

Cible = ThisComponent.CurrentController

If Cible.Selection.supportsService("com.sun.star.sheet.SheetCellRanges") Then
'S'il y a plusieurs feuilles de sélectionnées.
OngletsSelectionnes = ThisComponent.CurrentSelection.RangeAddressesAsString
TableauOnglets() = Split( OngletsSelectionnes , ";" )

On Error Resume Next


For i = 0 To UBound (TableauOnglets())
NomFeuille = Left( TableauOnglets( i ) , Instr( 1 , TableauOnglets( i ) , "." ) - 1 )
'Récupère le nom des feuilles sans doublon
Collect.Add NomFeuille , Cstr(NomFeuille)
Next i
On Error GoTo 0

For i = 1 To Collect.Count
MsgBox Collect(i)
Next

Else
'S'il y a une seule feuille de sélectionnée.
MsgBox Cible.ActiveSheet.getName
End If
End Sub

Comment identifier le changement de feuille dans un classeur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette macro identifie le basculement entre les différents onglets du classeur.
Lancez uniquement la macro lancement_GestionEvenement_SheetChange.

Global oListener As Object


Global oClasseur As Object

Sub lancement_GestionEvenement_SheetChange
oClasseur = ThisComponent

oListener = createUnoListener( "Classeur_" , "com.sun.star.beans.XPropertyChangeListener" )


oClasseur.CurrentController.addPropertyChangeListener( "ActiveSheet" , oListener )
End Sub

- 53 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sub Classeur_PropertyChange(oEvent)
MsgBox oEvent.Source.ActiveSheet.Name
End Sub

Sub Arret_GestionEvenement_SheetChange
oClasseur.CurrentController.removePropertyChangeListener( "ActiveSheet" , oListener )
End Sub

Comment copier la feuille active dans un nouveau classeur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub CopieFeuilleActive_NouveauClasseur
Dim oFrame As Object
Dim oDisp As Object
Dim Args(2) As New com.sun.star.beans.PropertyValue

oFrame = ThisComponent.CurrentController.Frame
oDisp = createUnoService("com.sun.star.frame.DispatchHelper")

Args(0).Name = "DocName"
Args(0).Value = ""
Args(1).Name = "Index"
Args(1).Value = 65535
Args(2).Name = "Copy"
Args(2).Value = True

oDisp.ExecuteDispatch(oFrame, ".uno:Move", "", 0, Args())


End Sub

- 54 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les feuilles > Les cellules
Comment spécifier une cellule par macro ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oDoc As Object , Feuille As Object


Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

'-------
'Identification par l'adresse de la cellule (A5)
Cellule = Feuille.getCellRangeByName("A5")

'------
'Identification par la position dans la feuille
'Attention: le format est getCellByPosition( NumeroColonne , NumeroLigne )
'Exemple cellule A5:
Cellule = Feuille.getCellByPosition( 0 , 4 )

Comment identifier la cellule active ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub IdentifierCelluleActive
Dim CelluleActive As Object

CelluleActive = ThisComponent.getCurrentSelection

MsgBox "Index colonne: " & CelluleActive.CellAddress.Column


MsgBox "Index ligne: " & CelluleActive.CellAddress.Row
MsgBox "Index feuille: " & CelluleActive.CellAddress.Sheet
End Sub

Comment vérifier le type de données contenu dans les cellules ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Une cellule peut contenir:
une valeur numérique
du texte
une formule
ou être vide.
La lecture d'une cellule est effectuée de façon différente en fonction qu'il s'agit de texte ou de valeur
numérique. Il donc important d'identifier le type de contenu dans la cellule.
Si vous écrivez Cellule.Value alors que la cellule est vide, la macro renvoie 0.
Si vous écrivez Cellule.Value alors que la cellule contient du texte, la macro renvoie 0.
Les formules peuvent contenir du texte ou des valeurs numériques:
Si vous écrivez Cellule.Value alors que le résultat de la formule affiche du texte, la macro renvoie 0.
Les dates:
Si vous écrivez Cellule.Value, la macro renvoie une valeur numérique (Long).
Si vous écrivez Cellule.getString, la macro renvoie la date au format texte.

Sub ControlerContenuCellule

- 55 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim oDoc As Object , Feuille As Object


Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellRangeByName("A5")

Select Case Cellule.Type


Case com.sun.star.table.CellContentType.VALUE
MsgBox "Numérique:" & Chr(13) & Cellule.Value

Case com.sun.star.table.CellContentType.TEXT
MsgBox "Texte:" & Chr(13) & Cellule.getString

Case com.sun.star.table.CellContentType.FORMULA
MsgBox "Formule"

Case com.sun.star.table.CellContentType.EMPTY
Msgbox "Vide"
End Select

End Sub

Comment écrire dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub EcrireDansCellule
Dim oDoc As Object , Feuille As Object
Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

'Ecrit valeur numérique


Cellule = Feuille.getCellRangeByName("A5")
Cellule.Value = 12345

Cellule = Feuille.getCellRangeByName("A6")
Cellule.setValue(12345)
'----

'Ecrit du texte
Cellule = Feuille.getCellRangeByName("A7")
Cellule.setString("essai")

Cellule = Feuille.getCellRangeByName("A8")
Cellule.String = "essai"
'----

'Ecrit une Date


Cellule = Feuille.getCellRangeByName("A9")
With Cellule
.Value = Now 'Insère la date du jour
.NumberFormat = 75
'D'autres valeurs pour NumberFormat:
'34 mois
'35 trimestre
'40 heure
'50 date et heure
'79 date en toutes lettres
'80 date type 15 sept. 2006
'81 date type 15 Juin 2006

- 56 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'85 numéro de semaine


End With

Cellule = Feuille.getCellRangeByName("A10")
Cellule.Value = DateValue("26/05/2006")

Cellule = Feuille.getCellRangeByName("A11")
Cellule.Value = CDate("26/05/2006")
'----

End Sub

Comment ajouter une formule par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure permet d'ajouter une formule dynamiquement par macro.

Sub InsererFormuleParMacro
Dim oDoc As Object , Feuille As Object
Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellRangeByName("B1")
'Ecrit la formule en utilisant le langage de la version OOo installée
Cellule.FormulaLocal = "=SOMME(A1:A10)"

Cellule = Feuille.getCellRangeByName("B2")
'Ecrit la formule en utilisant l'anglais
Cellule.Formula = "=SUM(A1:A10)"

'---
'Lit la formule contenue dans la cellule B2
MsgBox Cellule.Formula & Chr(13) & Cellule.FormulaLocal
End Sub

Comment supprimer le contenu d'un cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub SupprimeContenuCellule
Dim oDoc As Object , Feuille As Object
Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellByPosition( 0 , 4 )

Cellule.clearContents(com.sun.star.sheet.CellFlags.VALUE +_
com.sun.star.sheet.CellFlags.DATETIME +com.sun.star.sheet.CellFlags.STRING +_
com.sun.star.sheet.CellFlags.ANNOTATION +com.sun.star.sheet.CellFlags.FORMULA)

'Description du contenu supprimé:


'-------------------------------
'com.sun.star.sheet.CellFlags.VALUE: Valeurs numériques
'com.sun.star.sheet.CellFlags.DATETIME: Dates et Heures
'com.sun.star.sheet.CellFlags.STRING: Texte

- 57 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'com.sun.star.sheet.CellFlags.ANNOTATION: Annotations(Commentaires)
'com.sun.star.sheet.CellFlags.FORMULA: Formules
End Sub

Astuce:
Lorsque vous supprimez le contenu des cellules manuellement (en utilisant la touche « SUPPR »), la boîte
de dialogue « Supprimer du contenu » s'affiche automatiquement et vous devez la valider en cliquant sur
le bouton « OK ».
Pour supprimer le contenu des cellules sans afficher cette fenêtre, utilisez la touche clavier « RETOUR
» (symbolisée par une flèche).

Comment compter le nombre de données différentes dans une plage de cellules ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette fonction permet de compter les éléments différents dans une plage de cellules.

'NomFeuille: spécifie la feuille contenant la plage à tester.

'Définition de la plage à tester:


' ColDebut: Numéro de la 1ere colonne dans la plage à contrôler
' ColFin: Numéro de la derniere colonne dans la plage à contrôler
' LigDebut: Numéro de la 1ere ligne dans la plage à contrôler
' LigFin: Numéro de la derniere ligne dans la plage à contrôler

'Blancs: Compte les cellules vides si l'argument = true

Function NbDiff_OOo(NomFeuille As String, ColDebut As Integer, _


ColFin As Integer, LigDebut As Integer, LigFin As Integer, Blancs As Boolean) As Integer

Dim Ws As Object, Cellule As Object


Dim Resultat As Variant
Dim Tableau()
Dim J As Integer, K As Integer

Ws = ThisComponent.Sheets(NomFeuille)
NbDiff_OOo = 0
K = 1

For X = ColDebut - 1 To Colfin - 1


For Y = LigDebut - 1 To LigFin - 1
Verif = False
Cellule = Ws.getCellByposition( X , Y )

Resultat = Cellule.getString

If Blancs <> False Or Cellule.Type <> com.sun.star.table.CellContentType.EMPTY Then

If UBound( Tableau ) = -1 Then


ReDim Preserve Tableau(1)
Tableau(1) = Resultat
Else
For J = LBound( Tableau ) To UBound( Tableau )
If Tableau( J ) = Resultat Then
Verif = True
Exit For
End If
Next J

If Verif = False Then


K = K + 1
ReDim Preserve Tableau(K)

- 58 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Tableau(K) = Resultat
End If

End If
End If

Next Y
Next X

NbDiff_OOo = UBound( Tableau )


End Function

La procédure pour appeler la fonction:

Sub Test
'Exemple: Plage A1:A10 dans le Feuille1
MsgBox NbDiff_OOo("Feuille1" ,1 ,1 ,1 ,10 ,True )
End Sub

Vous pouvez aussi appeler la fonction en insérant cette formule dans une cellule:

=NbDiff_OOo("Feuille1";1;1;1;10;Vrai)

Comment empêcher la mise en majuscule de la première


lettre de chaque phrase saisie dans les cellules ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous devez modifier les paramètres d'autocorrection:
Utilisez le menu Outils
AutoCorrection
Sélectionnez l'onglet « Options » dans la boîte de dialogue.
Décochez la ligne « Majuscule en début de phrase ».
Cliquez sur le bouton « OK » pour valider.

Comment identifier la plage de cellules utilisée dans une feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub PlageUtilisee
Dim Feuille As Object, Curseur As Object
Dim Cible As Object

'Spécifie la 2eme feuille du classeur


Feuille = ThisComponent.Sheets.getByIndex(1)

Curseur = Feuille.createCursor()

Curseur.gotoStartOfUsedArea(False)
Curseur.gotoEndOfUsedArea(True)
Cible = Curseur.getRangeAddress()

MsgBox "Première ligne: " & Cible.StartRow + 1 & CHR(10) & _


"Première colonne: " & Cible.StartColumn + 1 & CHR(10) & _
"Dernière ligne: " & Cible.EndRow + 1 & CHR(10) & _

- 59 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

"Dernière colonne: " & Cible.EndColumn + 1


End Sub

Comment retrouver le numéro de la dernière ligne non vide ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette macro récupère le numéro de la dernière ligne non vide, dans la première feuille du classeur:

Sub DerniereLigneNonVide
Dim oCurseur As Object

'Définit la 1ere feuille


oCurseur = ThisComponent.Sheets(0).createCursor
oCurseur.gotoEndOfUsedArea( False )

'L'index de la première ligne = 0


MsgBox oCurseur.RangeAddress.EndRow
End Sub

Comment insérer un lien hypertexte dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub InsertionLienHyperTexteCellule
Dim Cellule As Object , ChampURL As Object
Dim oTexte As Object

'Spécifie la cellule A1 dans la 1ere Feuille


Cellule = ThisComponent.Sheets(0).GetCellByPosition(0,0)

ChampURL = _
ThisComponent.createInstance("com.sun.star.text.TextField.URL")

'Définit le texte qui va s'afficher dans la cellule


ChampURL.Representation = "La Description"
'Définit le lien
ChampURL.URL = "http://www.developpez.com"

oTexte = Cellule.getText("")
'Insertion du lien
oTexte.insertTextContent(oTexte.createTextCursor(), ChampURL, False)
End Sub

Comment extraire les liens hypertextes contenus dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ExtraireLiensCellule
'Nota:
'Une même cellule peut contenir plusieurs liens.

Dim Cellule As Object , oTextfields As Object


Dim i As Integer

'Spécifie la cellule A1 dans la 1ere Feuille


Cellule = ThisComponent.Sheets(0).GetCellByPosition(0,0)

- 60 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oTextfields = Cellule.TextFields

'Vérifie s'il y a des liens dans la cellule


If oTextfields.Count = 0 Then
MsgBox "Il n'y a pas de lien dans la cellule."
Exit Sub
End If

'Boucle sur les liens contenus dans la cellule


For i = 0 To oTextfields.Count - 1

'URL= le lien
'Representation = la description
MsgBox ConvertFromURL(oTextFields.getByIndex( i ).Url) & _
Chr(10) & oTextFields.getByIndex( i ).Representation

Next i

End Sub

Comment modifier la description d'un lien hypertexte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La macro modifie la description du premier lien hypertexte contenu dans la cellule A1.
Nota:
Une cellule peut contenir plusieurs liens.

Sub ModifierDescriptionLienCellule
Dim Cellule As Object , oTextfields As Object

'Spécifie la cellule A1 dans la 1ere Feuille


Cellule = ThisComponent.Sheets(0).GetCellByPosition(0,0)

oTextfields = Cellule.TextFields

'Vérifie s'il y a des liens dans la cellule


If oTextfields.Count = 0 Then
MsgBox "Il n'y a pas de lien dans la cellule."
Exit Sub
End If

'Modifie la description.
'oTextFields(0) correspond au 1er lien dans la cellule.
oTextFields(0).Representation = "La nouvelle description"

End Sub

Comment sélectionner une cellule et y appliquer un collage du presse papier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub SelectionCellule_Puis_Collage
Dim oCC As Object , Cellule As Object
Dim Args() As New com.sun.star.beans.PropertyValue

'Selection cellule C2
oCC = ThisComponent.CurrentController
Cellule = oCC.ActiveSheet.getCellRangeByName("C2")

- 61 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oCC.Select(Cellule)

'Collage
Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dispatcher.executeDispatch(oCC.Frame, ".uno:Paste", "", 0, Args)
End Sub

Comment boucler sur une plage de cellules ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub BouclePlageCellules
Dim Feuille As Object, PlageCellules As Object
Dim Plages As Object, oEnum As Object, Cellule As Object

'Définit une feuille nommée "Feuille1" dans le classeur


Feuille = ThisComponent.Sheets.getByName("Feuille1")
'Définit la plage de cellules
PlageCellules = Feuille.getCellRangeByName("A1:A5")

Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
Plages.insertByName("", PlageCellules)
oEnum = Plages.Cells.CreateEnumeration

'Boucle sur la plage


While oEnum.hasMoreElements
'Nota:
'Ne renvoie rien si la cellule est vide
Cellule = oEnum.NextElement
MsgBox Cellule.String
Wend

End Sub

Comment fusionner une plage de cellules ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub FusionnerPlageCellules
Dim Feuille As Object
Dim Plage As Object

Feuille = ThisComponent.Sheets.getByIndex(0)
Plage = Feuille.getCellRangeByPosition( 3 , 9 , 6 , 9 ) 'D10:G10
Plage.Merge( True )

Feuille.getCellByPosition( 3 ,9 ).setString("test")
End Sub

Comment transférer le contenu d'une plage de cellules


vers un nouveau document dans le Traitement de texte ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub Transfert_PlageCellulesCalc_Vers_Writer
Dim oDesktop As Object , oDoc As Object , oText As Object , oCursor As Object
Dim Fichier As String , Resultat As String

- 62 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim Args() , Opt()


Dim Feuille As Object, PlageCellules As Object
Dim Plages As Object, oEnum As Object, Cellule As Object

oDesktop = createUnoService("com.sun.star.frame.Desktop")
'Définit le type de document à créer
Fichier = "private:factory/swriter"
'Création du nouveau fichier Traitement de texte
oDoc = oDesktop.LoadComponentFromURL(Fichier, "_blank", 0, Args())

'Définit une feuille nommée "Feuille1" dans le classeur


Feuille = ThisComponent.Sheets.getByName("Feuille1")
'Définit la plage de cellules
PlageCellules = Feuille.getCellRangeByName("A1:A5")

Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
Plages.insertByName("", PlageCellules)
oEnum = Plages.Cells.CreateEnumeration

'Boucle sur la plage de cellules à copier


While oEnum.hasMoreElements
'Nota:
'Ne renvoie rien si la cellule est vide
Cellule = oEnum.NextElement
Resultat = Resultat & Cellule.String & Chr(10)
Wend

oText = oDoc.CurrentController.ViewCursor.Text
oCursor = oText.createTextCursor
'Insertion des données dans le document Traitement de texte
oText.insertString oCursor, Resultat , False

'Enregistrement du fichier
'oDoc.StoreAsURL ( ConvertToURL("C:\monFichier.odt") , Opt())

'Fermeture du fichier
'True indique que l'on sauvegarde les modifications éventuelles
'oDoc.Close( True )
End Sub

Comment adapter la largeur d'une colonne au contenu des cellules ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La macro ci dessous ajuste la largeur de la deuxième colonne au contenu des cellules:

ThisComponent.Sheets(0).Columns(1).OptimalWidth = True

Comment identifier l'évènement sélection de cellule dans la feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure détecte la sélection de cellules dans la feuille de calcul.
Si la sélection est effectuée dans la première feuille et dans les colonnes F à J, la valeur 1 s'inscrit dans la
cellule. Le contenu est effacé si la cellule contient la valeur 1.
Vous devez simplement lancer la macro Add_SelectionChangeListener.

- 63 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'--- Source ---


'http://hermione.s41.xrea.com/pukiwiki/pukiwiki.php?OOobbs2/1
'--------------

Global oSelectionChangeListener As Object


Public oController As Object

'Lance le gestionnaire d'évènements


Sub Add_SelectionChangeListener()
oController = ThisComponent.CurrentController

'Objet pour gérer l'événement SelectionChange


oSelectionChangeListener = CreateUnoListener( _
"SelectionChange_", "com.sun.star.view.XSelectionChangeListener" )
'Attribue l'objet évènement au classeur
oController.addSelectionChangeListener( oSelectionChangeListener )
End Sub

Sub Remove_SelectionChangeListener()
oController = ThisComponent.CurrentController
oController.removeSelectionChangeListener( oSelectionChangeListener )
End Sub

Sub SelectionChange_selectionChanged( evt )


Dim obj As Object , Cellule As Object
Dim tc As Integer , NumFeuille As Integer
Dim tr As Long

obj = evt.Source.Selection

If obj.ImplementationName = "ScCellObj" Then

tr = obj.CellAddress.Row
tc = obj.CellAddress.Column
NumFeuille = evt.source.Selection.RangeAddress.Sheet

'Vérifie si la sélection est effectuée dans la 1ere feuille du classeur


If NumFeuille = 0 Then
'Vérifie si la sélection est effectuée dans les colonnes F à J
If tc >= 5 And tc <= 9 Then

Cellule = ThisComponent.getSheets.getByIndex( NumFeuille ). _


getCellByPosition( tc , tr )

If Cellule.getString = "" Then


Cellule.setValue(1)
Else
Cellule.setString("")
End If

ThisComponent.CurrentController.select( obj.SpreadSheet.getCellByPosition( 0, tr + 1 ) )

oFrame = ThisComponent.CurrentController.getFrame()
executeCommand( ".uno:Deselect", oFrame )
End If
End If
End If
End Sub

Sub SelectionChange_disposing( )
End Sub

- 64 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sub executeCommand( sCommand As String, oFrame As Object )


Dim aArr(0) As New com.sun.star.beans.PropertyValue
Dim oDispatch As Object

oDispatch = CreateUnoService( "com.sun.star.frame.DispatchHelper")


oDispatch.executeDispatch( oFrame, sCommand, "", 0, aArr())
End Sub

Comment identifier la modification du contenu dans une cellule ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure détecte la modification du contenu de la cellule B1, dans la première feuille du classeur.
Le fond de la cellule modifiée est colorié en bleu. La modification suivante enlève la couleur de fond. Vous
devez simplement lancer la macro lancement_GestionEvenement.

Global oListener As Object


Global Cellule As Object

Sub lancement_GestionEvenement
'Objet pour gérer l'événement Change dans la cellule B1, dans la 1ere feuille
Cellule = ThisComponent.Sheets(0).GetCellRangeByName("B1")

oListener = CreateUnoListener( "Classeur_" , "com.sun.star.util.XModifyListener" )


Cellule.addmodifylistener(olistener)
End Sub

Sub Classeur_Modified(oEvent)
If oEvent.Source.CellBackColor = RGB(255,255,255) Then
oEvent.Source.CellBackColor = RGB(0,0,255) 'Bleu
Else
oEvent.Source.CellBackColor = RGB(255,255,255) 'Blanc
End If
End Sub

Sub Classeur_Disposing(oEvent)
End Sub

- 65 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les feuilles > Les cellules > Les annotations
Comment insérer une annotation dans une cellule ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Première méthode.

Sub ajoutCommentaireCellule_V01
'équivalent des commentaires dans Excel
'
'********************************
'sans macro:
'sélectionnez une cellule
'Menu Insertion
'notes
'saisir le texte
'********************************

Dim oDoc As Object , Feuille As Object


Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellRangeByName("A1")
Cellule.Annotation.String = "Le commentaire"
'
'Remarque:
'si une annotation existe déja dans la cellule, les anciennes infos seront écrasées
End Sub

Deuxième méthode.

Sub ajoutCommentaireCellule_V02
Dim oDoc As Object , Feuille As Object
Dim Cellule As Object
Dim Nte As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")
Cellule = Feuille.getCellRangeByName("A1")

'Crée une nouvelle annotation


Feuille.Annotations.insertNew(Cellule.CellAddress, "Ceci est un test de commentaire.")
Nte = Cellule.Annotation.AnnotationShape

'Spécifie que l'annotation s'adapte à la taille du texte


Nte.TextAutoGrowWidth = True
Nte.TextAutoGrowHeight = True

Nte.FillStyle = com.sun.star.drawing.FillStyle.SOLID
'Applique une couleur dans l'annotation
Nte.FillColor = RGB( 255,225,225 )

- 66 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment modifier une annotation ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple ajoute des infos dans un commentaire existant à la suite des anciennes données.

Sub ajoutDansCommentaireExistant
Dim oDoc As Object , Feuille As Object
Dim Cellule As Object
Dim leTexteExistant As String

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellRangeByName("A1")
'Récupération des informations existantes dans le commentaire
leTexteExistant = Cellule.Annotation.getString

Cellule.Annotation.String = _
leTexteExistant & chr(13) & "Mon nouveau commentaire"

End Sub

Comment supprimer une annotation ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub SupprimeCommentaire
'-------------------------------------
'sans macro:
'sélectionnez la cellule
'Menu Insertion
'notes
'Supprimez le contenu de l'annotation
'-------------------------------------

Dim oDoc As Object , Feuille As Object


Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellRangeByName("A1")
Cellule.clearContents(com.sun.star.sheet.CellFlags.ANNOTATION)

End Sub

Comment boucler sur l'ensemble des annotations dans la feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub boucleSurAnnotations
Dim I As Integer
Dim Resultat As String
Dim Feuille As Object , oDoc As Object

- 67 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

'Boucle sur les annotations de la Feuille


For I = 0 To Feuille.Annotations.Count-1
'Renvoie:
'Contenu de l'annotation
'Numero de la colonne
'Numero de la ligne
'Auteur
'Est visible
'Date de création

Resultat = Feuille.Annotations.getByIndex(i).getString & Chr(13) & Chr(13) & _


"Colonne: " & Feuille.Annotations.getByIndex(i).Position.Column + 1 & Chr(13) & _
"Ligne: " & Feuille.Annotations.getByIndex(i).Position.Row + 1 & Chr(13) & _
"Auteur: " & Feuille.Annotations.getByIndex(i).Author & Chr(13) & _
"Visible: " & Feuille.Annotations.getByIndex(i).IsVisible & Chr(13) & _
"Date: " & Feuille.Annotations.getByIndex(i).Date

MsgBox Resultat
Next i

End Sub

- 68 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les feuilles > Les cellules > Les formats
Comment appliquer une mise en forme dans une cellule ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub MiseEnFormeCellule
Dim oDoc As Object , Feuille As Object
Dim Cellule As Object

oDoc = ThisComponent
Feuille = oDoc.getSheets.getByName("Feuille1")

Cellule = Feuille.getCellRangeByName("A5")

With Cellule
.setString( " mon texte " ) 'insére du texte dans la cellule
.CellBackColor = RGB(0,0,0) 'indique la couleur de fond
.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER 'alignement centré
.RotateAngle = 9000 'Rotation 9000 = 90°
.CharColor = RGB(255,0,0) 'couleur des caractères
.CharHeight = 16 'Taille catactères
.CharWeight = com.sun.star.awt.FontWeight.BOLD 'gras
.CharPosture = com.sun.star.awt.FontSlant.ITALIC 'italique
.CharFontName = "Arial" 'Font
.CharUnderline = com.sun.star.awt.FontUnderline.DOUBLE 'souligné double
End With

'Ajuste la hauteur de la 5eme ligne au contenu des cellules.


Feuille.Rows(4).OptimalHeight = True

End Sub

Comment compter le nombre de cellules contenant une couleur de fond spécifique?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette fonction compte le nombre de cellules dans la plage B3:B10 dont la couleur de fond est identique à
la couleur de fond de la cellule A1.

'--- Compte le nombre de couleurs identiques à une cellule de base. ---

' CellBase est la cellule qui contient la couleur de référence.

' Définition de la plage à tester:


' ColDebut: Numero de la 1ere colonne dans la plage à contrôler
' ColFin: Numero de la derniere colonne dans la plage à contrôler
' LigDebut: Numero de la 1ere ligne dans la plage à contrôler
' LigFin: Numero de la derniere ligne dans la plage à contrôler

Function NbCouleursCible(NomFeuille As String, CellBase As String, _


ColDebut As Integer, ColFin As Integer, LigDebut As Integer, _
LigFin As Integer) As Integer

Dim MaCoul As Double


Dim X As Integer, Y As Integer , Resultat As Integer
Dim Ws As Object, Cellule As Object

Ws = ThisComponent.Sheets(NomFeuille)

' Récupère la valeur de la couleur dans la cellule de base.


MaCoul = Ws.getCellRangeByName(CellBase).CellBackColor

- 69 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

NbCouleursCible = 0

For X = ColDebut - 1 To Colfin - 1


For Y = LigDebut - 1 To LigFin - 1
Cellule = Ws.getCellByposition( X , Y )
If Cellule.CellBackColor = MaCoul Then Resultat = Resultat + 1
Next Y
Next X

NbCouleursCible = Resultat
End Function

Sub Test
' Compte le nombre de cellules dans la plage B3:B10 dont la
' couleur est identique à la cellule A1.
MsgBox NbCouleursCible("Feuille1" ,"A1" ,2 ,2 ,3 ,10 )
End Sub

Il est aussi possible d'insérer cette formule dans une cellule.

=NBCOULEURSCIBLE("Feuille1";"A1";2;2;3;10)

- 70 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les feuilles > Les cellules > Les cellules et
plages nommées
Comment ajouter un nom dans le classeur ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Un nom est une chaîne de caractères (sans espace) qui représente une cellule ou une plage de cellules.
Utilisez des noms lorsque vous avez besoin de faire références à des plages complexes ou pour une
meilleure compréhension de votre projet.
Par exemple, vous pouvez remplacer une formule classique:
=SOMME(A1:A10)*B1
par
=SOMME(A1:A10)*Coefficient
Coefficient étant le nom préalablement donné à la cellule B1.
Pour ajouter un nom manuellement,
utilisez le menu Insertion
Noms
Définir
Complètez le champ « Nom »
Le champ « Assigné à » permet de préciser la cellule ou la plage à nommer
Cliquez sur le bouton « Ajouter »
puis sur le bouton OK pour valider.
Pour ajouter un nom par macro:

Sub AjoutNom
Dim oNom As Object
Dim oCellAdress As New com.sun.star.table.CellAddress

'--------------
'La procédure renvoie une erreur si le nom existe déja
'dans le classeur.
'--------------

'Premier exemple
oNom = ThisComponent.NamedRanges
'Nomme la plage B2:C5 dans la feuille nommée Feuille1
oNom.addNewByName( "TestNom1" , "$Feuille1.$B2:$C5" , oCellAdress , 0 )

'Deuxième exemple
'Nomme la cellule A10 dans la feuille nommée Feuille2
oNom.addNewByName( "TestNom2", "$Feuille2.$A10:$A10" ,
createUnoStruct( "com.sun.star.table.CellAddress" ) , 0 )
End Sub

Comment vérifier l'existence d'un nom dans le classeur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub VerifierExistenceNom
Dim LeNom As String

LeNom = "NomTest"

If ThisComponent.NamedRanges.HasByName( LeNom ) Then


MsgBox "Il existe un Nom '" & LeNom & "' dans le classeur."
Else
MsgBox "Le Nom '" & LeNom & "' n'existe pas dans le classeur."

- 71 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End If
End Sub

Comment lister les cellules et plages nommées dans le classeur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ListeNoms
Dim i As Integer
Dim Tableau()

Tableau = ThisComponent.NamedRanges.ElementNames

For i = LBound (Tableau) To UBound (Tableau)


MsgBox Tableau(i)
Next i
End sub

Comment récupérer des informations sur une cellule ou plage nommée ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RecupererInformationsNom
Dim Resultat As String
Dim oNom As Object
Dim Plages As Object, oEnum As Object, Cellule As Object

'Définit le premier nom dans le classeur


oNom = ThisComponent.NamedRanges.getByIndex(0)

Resultat = "Nom: " & oNom.Name & CHR(10) & _


"Référence: " & oNom.Content & CHR(10) & _
"Index feuille: " & oNom.ReferencePosition.Sheet & CHR(10) & _
"Nom feuille: " & oNom.ReferredCells.SpreadSheet.Name & CHR(10) & _
"Première colonne: " & oNom.ReferredCells.RangeAddress.StartColumn + 1 & CHR(10) & _
"Dernière colonne: " & oNom.ReferredCells.RangeAddress.EndColumn + 1 & CHR(10) & _
"Première ligne" & oNom.ReferredCells.RangeAddress.StartRow + 1 & CHR(10) & _
"Dernière ligne: " & oNom.ReferredCells.RangeAddress.EndRow + 1

MsgBox Resultat

'--- Boucle sur les cellules du nom ---


'
'Nota: Ne renvoie rien si les cellules sont vides.
'
Plages = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
Plages.insertByName("", oNom.ReferredCells)
oEnum = Plages.Cells.CreateEnumeration

While oEnum.hasMoreElements
Cellule = oEnum.NextElement
MsgBox Cellule.String
Wend

- 72 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment supprimer le contenu d'une cellule ou plage nommée ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub SuppressionContenuCelluleNommee
Dim oNom As Object

'Définit le premier nom dans le classeur


oNom = ThisComponent.NamedRanges.getByIndex(0)

'Supprime le contenu de la cellule/plage nommée


oNom.ReferredCells.clearContents(com.sun.star.sheet.CellFlags.VALUE +_
com.sun.star.sheet.CellFlags.DATETIME +com.sun.star.sheet.CellFlags.STRING +_
com.sun.star.sheet.CellFlags.ANNOTATION +com.sun.star.sheet.CellFlags.FORMULA)

'Description du contenu supprimé:


'-------------------------------
'com.sun.star.sheet.CellFlags.VALUE: Valeurs numériques
'com.sun.star.sheet.CellFlags.DATETIME: Dates et Heures
'com.sun.star.sheet.CellFlags.STRING: Texte
'com.sun.star.sheet.CellFlags.ANNOTATION: Annotations(Commentaires)
'com.sun.star.sheet.CellFlags.FORMULA: Formules
End Sub

Comment supprimer les noms ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour supprimer un nom spécifique:

Sub SupprimerNom
'Supprime un nom appelé "TestNom1"
ThisComponent.NamedRanges.removeByName("TestNom1")
End Sub

Pour supprimer tous les noms du classeur:

Sub SupprimerTousLesNoms
Dim i As Integer
Dim Cible As String

'Boucle sur les noms du classeur


For i = ThisComponent.NamedRanges.count - 1 To 0 Step -1
'Récupére le nom
Cible = ThisComponent.NamedRanges.getByIndex(i).name
'Suppression
ThisComponent.NamedRanges.removeByName(Cible)
next i

End Sub

- 73 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les feuilles > Les images
Comment créer une planche contact dans Tableur,
à partir de toutes les images jpg d'un répertoire ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure Tableur permet de choisir un répertoire à partir d'une boîte de dialogue. Toutes les
images .jpg sont ensuite affichées en miniature dans la feuille de calcul (5 lignes et 4 colonnes par page
imprimable).
Remarque:
La procédure est sensible à la casse: jpg n'est pas identique à JPG.

Option Explicit

Sub CreationPlancheContact
'testé avec WinXP et OOo 2.0.3
'http://www.oooforum.org/forum/viewtopic.php?t=12312
Dim sGraphicURL As String , Chemin As String , NextFile as String
Dim oDrawPage As Object , oGraphic As Object
Dim oFolderDialog as Object, oUcb as Object
Dim choix As Integer ,i As Integer ,j As Integer ,k As Integer
Dim oLeft As Double , oTop as Double ,NumLig as Double , Largeur As Double
Dim Taille as new com.sun.star.awt.Size
Dim Emplacement as new com.sun.star.awt.Point

NumLig= ThisComponent.Sheets(0).RowPageBreaks(0).position
Largeur= ThisComponent.Sheets(0).Rows(0).Height

'--- Affiche la boîte de dialogue pour sélectionner le répertoire contenant les fichiers .jpg ---
oFolderDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")
oFolderDialog.SetDisplayDirectory("C:\Documents and Settings")'Adaptez le chemin par défaut

choix = oFolderDialog.Execute()
If choix = 1 Then Chemin=ConvertFromUrl(oFolderDialog.getDirectory())

'Boucle sur toutes les images du répertoire cible


'Attention la procédure est sensible à la casse
'(jpg n'est pas identique à JPG)
NextFile=Dir(Chemin & "\*.jpg",0)

Do While Len(NextFile) >0


i = i + 1
j = j + 1
sGraphicURL =ConvertToURL(Chemin & "\" & NextFile)

oDrawPage =ThisComponent.Sheets(0).getDrawpage()
oGraphic =ThisComponent.createInstance("com.sun.star.drawing.GraphicObjectShape")
oGraphic.GraphicURL =sGraphicURL
oDrawPage.add(oGraphic)

Taille.width = 3000 'Dimension horizontale image (3000 = 30 millimètres)


Taille.height = 3000 'Dimension verticale image
oGraphic.setsize(Taille)

Emplacement.X = oLeft
Emplacement.Y = oTop
oGraphic.setposition(Emplacement)

oLeft = oLeft + Taille.width + 350 'Distance horizontale entre 2 images


If i =4 then
oLeft =0
i =0
oTop = oTop + Taille.height + 500 ' Distance verticale entre 2 images

- 74 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End If

if j = 20 Then '4 colonnes et 5 lignes par page d'impression


k =k + 1
oTop = NumLig * Largeur * k
j = 0
End If

NextFile=Dir()
Loop
End Sub

- 75 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Tableur > Les graphiques


Comment créer un graphique par macro ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Il existe plusieurs types de graphiques :

• LineDiagram (Linéaires) ;
• PieDiagram (Secteurs) ;
• AreaDiagram (Surfaces) ;
• BarDiagram (Barres) ;
• XYDiagram (Nuages de points) ;

Description de la méthode addNewByName:


.addNewByName(aName ,aRect ,aRanges ,bColumnHeaders , bRowHeaders)
aName permet de nommer le graphique.
aRect Spécifie la position et les dimensions du graphique.
aRanges Spécifie la plage source du graphique.
bColumnHeaders: La 1ere ligne de la source est utilisée pour définir les étiquettes si la valeur True est
attribuée.
bRowHeaders: La 1ere colonne de la source est utilisée pour définir les étiquettes si la valeur True est
attribuée.
Consultez l'API Guide pour plus d'informations.
Cet exemple montre comment créer un graphique type XYDiagram dans la 2eme feuille du classeur. La
source de données est dans la 1ere feuille.

Sub CreationGraphique
Dim oDoc As Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim Source(0) As New com.sun.star.table.CellRangeAddress
Dim oCharts As Object , oChart As Object

oDoc = ThisComponent

'Le graphique sera positionné dans la 2eme feuille du classeur


oCharts = oDoc.Sheets(1).Charts

'--- Spécfie la position et les dimensions du graphique ---


Rect.X = 1000 'horizontal
Rect.Y = 500 'vertical
Rect.Width = 24000 'Largeur
Rect.Height = 13000 'Hauteur
'----------------------------------------------------------

'--- Spécifie la source du graphique ---


'Les données sont dans la plage A1:D30
'La première colonne correspond à l'axe des abscisses (une série de dates par exemple)
'Les autres colonnes contiennent les valeurs d'ordonnées
'La première ligne contient les étiquettes des séries
Source(0).Sheet = 0 '1ere feuille du graphique
Source(0).StartColumn = 0 'Ligne 1
Source(0).StartRow = 0 'Colonne A
Source(0).EndColumn = 3 'Colonne D
Source(0).EndRow = 29 'Ligne 30
'---------------------------------------

'Création du graphique
oCharts.addNewByName("MonGraphique",Rect ,Source(),True , True)

'Place le graphique dans la feuille de calcul

- 76 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oChart = oCharts.getByName("MonGraphique").EmbeddedObject

With oChart
'Type de graphique (Scatters)
.Diagram = oChart.createInstance("com.sun.star.chart.XYDiagram")

'Lissage des lignes (0: pas de lissage, 1: spline cubique, 2: spline B)


oChart.Diagram.SplineType = 0
'Change le symbole des points
oChart.Diagram.SymbolType = com.sun.star.chart.ChartSymbolType.SYMBOL1

'Modifie la couleur de fond du graphique


.Diagram.wall.FillColor =RGB(150,150,150)

'Spécifie la valeur maxi de l'étiquette des ordonnées


.Diagram.YAxis.Max = 6000

'Attribue un titre à l'axe des abscisses


.Diagram.HasXAxisTitle = True
.Diagram.YAxisTitle.string = "Les valeurs"

'Attribue un titre à l'axe des ordonnées


.Diagram.HasYAxisTitle = True
.Diagram.XAxisTitle.string = "Dates"

'La première ligne contient les étiquettes des séries


.DataSourceLabelsInFirstColumn = False
.DataSourceLabelsInFirstRow = True

'Roration des étiquettes pour l'axe des abscisses


.Diagram.XAxis.TextRotation = 9000 '90 degrés

'redéfinit la taille des étiquettes pour les abscisses et les ordonnées


.Diagram.YAxis.CharHeight = 4
.Diagram.XAxis.CharHeight = 4

'Attribue un titre au graphique puis un couleur à la chaîne de caractères


.Title.String = "Le titre du graphique"
.Title.CharColor = RGB(200,0,0)
End With

oDoc.Sheets(0).getCellByPosition(0,0).String = "MonGraphique"

End Sub

Comment boucler sur les graphiques d'une feuille ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Voici un exemple qui permet de boucler sur tous les graphiques de la 2eme feuille.
La procédure renvoie le nom de chaque graphique ainsi que la plage source.

Sub BoucleGraphiquesFeuille
Dim oDoc As Object
Dim oChart As Object
Dim i As Integer

oDoc = ThisComponent

'Boucle sur les graphiques de la 2eme feuille


For i = 0 To oDoc.Sheets(1).Charts.Count - 1
ochart = oDoc.Sheets(1).charts(i).EmbeddedObject

- 77 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'La procédure récupère :


'*le nom de chaque graphique
'*la plage de données source
MsgBox oDoc.Sheets(1).charts(i).Name & Chr(13) & _
ochart.ChartRangeAddress
Next i
End Sub

Comment modifier un graphique ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure suivante permet de changer la source de données, le titre du graphique et quelques mises
en forme.

Sub ModifierGraphique
Dim oDoc As Object
Dim oChart As Object

oDoc = ThisComponent

'Définit l'objet graphique (le 1er graphique de la 2eme feuille)


oChart = oDoc.Sheets(1).Charts(0).EmbeddedObject

'----
'Remarque :
'Si vous connaissez le nom du graphique, vous pouvez utiliser cette syntaxe :
'oChart = oDoc.Sheets(1).Charts.getByName("MonGraphique").EmbeddedObject
'----

'Spécifie la nouvelle plage de données source


oChart.ChartRangeAddress = "Feuille1.$A$1:.$B25"

'Modifie le titre du graphique


oChart.Title.String = "Le nouveau titre"

'Modifie la couleur de fond du graphique


oChart.Diagram.wall.FillColor = RGB(250,200,200)

'Modifie l'épaisseur de la courbe


oChart.Diagram.Linewidth = 100

'Modifier l'étiquette de l'axe des abscisses


oChart.Diagram.XAxisTitle.String = "azerty"

'*****************************
'Important :
'----------
'Il est parfois nécessaire de lancer le recalcule automatique (touche F9)
'pour visualiser le résultat.
'*****************************

End Sub

Comment ajouter des séries et des points dans une source de données ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple permet de redéfinir la plage source du graphique en ajoutant cinq lignes et deux colonnes par
rapport à la plage de cellules initiale.

- 78 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Une plage $A$1:$B$25 deviendra $A$1:$D$30

Sub Ajouter_Series_Et_Points
Dim oDoc As Object
Dim oChart As Object
Dim Plage

oDoc = ThisComponent

'Définit l'objet graphique (Le 1er graphique de la 2eme feuille)


oChart = oDoc.Sheets(1).Charts(0)

'Récupère la plage actuelle


Plage = oChart.getRanges()

'Ajoute cinq lignes par rapport à la source initiale


Plage(0).EndRow = Plage(0).EndRow + 5
oChart.setRanges(Plage)

'Ajoute deux colonnes par rapport à la source initiale


Plage(0).EndColumn = Plage(0).EndColumn + 2
oChart.setRanges(Plage)

'--------------
'Par exemple, une plage initiale $A$1:$B$25 deviendra $A$1:$D$30
'--------------

End Sub

Comment exporter un graphique au format image ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ExporterGraphique_FormatImage
Dim Fichier As String
Dim TabFiltre(3) As New com.sun.star.beans.PropertyValue
Dim Tableau (2) As New com.sun.star.beans.PropertyValue
Dim CheminURL As New com.sun.star.util.URL
Dim Obj As Object
Dim oGEF As Variant

Fichier = ConvertToURL( "C:\ExportGraphique.jpg" )

'Spécifie le 1er objet (en l'occurrence un graphique incorporé) contenu dans la 1er onglet
Obj = ThisComponent.DrawPages.getByIndex( 0 ).getByIndex( 0 )

TabFiltre(0).Name = "PixelWidth" 'Largeur en pixels


TabFiltre(0).Value = 900
TabFiltre(1).Name = "PixelHeight" 'Hauteur en pixels
TabFiltre(1).Value = 700
TabFiltre(2).Name ="Quality" 'de 1 à 100%
TabFiltre(2).Value = 80
TabFiltre(3).Name ="ColorMode" '0=Couleur , 1=Niveaux de Gris
TabFiltre(3).Value = 0

oGEF = createUnoService( "com.sun.star.drawing.GraphicExportFilter" )


oGEF.SetSourceDocument( Obj )

CheminURL.complete = Fichier

Tableau(0).Name = "MediaType"
Tableau(0).Value = "image/jpeg"
Tableau(1).Name = "URL"

- 79 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Tableau(1).Value = CheminURL
Tableau(2).Name = "FilterData"
Tableau(2).Value = TabFiltre

oGEF.Filter( Tableau() )
End Sub

- 80 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Traitement de texte


Comment vérifier si un mot est présent dans un document Traitement de texte ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure retrouve un mot spécifique, le colorie en rouge et modifie sa mise en forme afin de mieux
le visualiser dans le document.

Sub retrouverMot
Dim oSearch As Object , Cible As Object
Dim Tableau As Variant
Dim x As long

oSearch = ThisComponent.createSearchDescriptor

With oSearch
.SearchString = "essai" 'la chaîne à identifier
.SearchWords = True
End With

Tableau = ThisComponent.FindAll(oSearch)
MsgBox "Le mot recherché est présent " & Tableau.count & " fois."

For x = 0 To Tableau.Count - 1
Cible = Tableau(x)

Cible.CharWeight = com.sun.star.awt.FontWeight.BOLD 'gras


Cible.CharPosture = com.sun.star.awt.FontSlant.ITALIC 'italique
Cible.CharFontName = "Arial" 'police
Cible.CharUnderline = com.sun.star.awt.FontUnderline.SINGLE 'souligné
Cible.CharBackcolor = RGB(255,0,0) 'couleur de fond
Next
End Sub

Comment remplacer une chaîne de caractères dans un document Traitement de texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RemplacerChaine
Dim oDoc As Object
Dim Remplace As Object
Dim Ancien As String , Nouveau As String

Ancien = "Mme"
Nouveau = "Madame"

oDoc = ThisComponent
Remplace = oDoc.createReplaceDescriptor

Remplace.SearchString = Ancien
Remplace.ReplaceString = Nouveau
oDoc.replaceAll(Remplace)

End Sub

Si vous souhaitez remplacer plusieurs chaînes en une seule fois, utilisez :

Sub RemplacerPlusieursChaines

- 81 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim oDoc As Object


Dim Remplace As Object
Dim Ancien(3) As String , Nouveau(3) As String
Dim i As Long

Ancien() = Array("Mme" , "Mlle" , "Mr")


Nouveau() = Array("Madame" , "Mademoiselle" , "Monsieur")

oDoc = ThisComponent
Remplace = oDoc.createReplaceDescriptor

For i = 0 To 2
Remplace.SearchString = Ancien(i)
Remplace.ReplaceString = Nouveau(i)
oDoc.replaceAll(Remplace)
Next i

End Sub

Comment insérer un saut de page à l'emplacement du curseur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub Insertion_SautDePage
Dim oCurseur As Object
Dim Cible As Object

oCurseur = ThisComponent.getCurrentController().getViewCursor()
Cible = oCurseur.getText()
Cible.insertControlCharacter( oCurseur, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False
)
oCurseur.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
End Sub

Comment créer un lien hypertexte dans le document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure suivante ajoute un lien hypertexte à l'emplacement du curseur.

Sub InsererLien_EmplacementCurseur
Dim oCurseur As Object , oTexte As Object

oCurseur = ThisComponent.CurrentController.getViewCursor()
oTexte = oCurseur.getText()
oTexte.insertString(oCurseur, "La description", True)

With oCurseur
'Spécifie l'URL du lien hypertexte
.HyperLinkURL = "http://www.developpez.com"
'Spécifie le nom du lien
.HyperLinkName = "Nom lien hypertexte"

'--- pour créer un lien vers un document odt ---


'.HyperLinkURL = ConvertToURL("C:\LeDocument.odt")
'
'Pour atteindre un signet lors de l'ouverture du fichier :
'.HyperLinkURL = ConvertToURL("C:\LeDocument.odt") & "#LeSignet"
'-----------------------------------------------

- 82 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'--- Pour créer un lien à l'intérieur du même document ---


'Cet exemple permet d'atteindre un signet nommé "NomSignet"
'.HyperLinkURL = "#NomSignet"
'---------------------------------------------------------
End With
End Sub

Comment récupérer les informations statistiques d'un document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Par exemple, si vous souhaitez connaître le nombre de pages, de mots, de caractères, d'images, de
paragraphes, de tableaux ou de lignes dans un document :

• lorsque le fichier est ouvert ;


• utilisez le menu Fichier ;
• propriétés ;
• Onglet « Statistiques ».

Pour récupérer ces informations par macro :

Sub LireProprietes_Statisques_Writer
Dim Resultat As String
Dim Curseur As Object

Curseur = ThisComponent.currentController.getViewCursor
Curseur.jumpToLastPage()

Resultat = "Nombre de caractères: " & ThisComponent.CharacterCount & Chr(10) & _


"Nombre d'images: " & ThisComponent.GraphicObjects.Count & Chr(10) & _
"Nombre de mots: " & ThisComponent.WordCount & Chr(10) & _
"Nombre de paragraphes: " & ThisComponent.ParagraphCount & Chr(10) & _
"Nombre de tableaux: " & ThisComponent.TextTables.Count & Chr(10) & _
"Nombre de pages: " & Curseur.Page & Chr(10) & _
"Nombre de lignes: " & ThisComponent.CurrentController.LineCount

MsgBox Resultat
End Sub

Comment récupérer le nom et la taille de la police à l'emplacement du curseur ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub NomPolice_EmplacementCurseur
Dim Curseur As Object

Curseur = ThisComponent.CurrentController.ViewCursor

MsgBox "Nom: " & Curseur.CharFontName & Chr(10) & _


"Taille: " & Curseur.CharHeight

- 83 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment extraire tout ce qui se trouve entre deux mots clés ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure extrait le texte contenu entre deux mots identiques « MotCle ».
La procédure fonctionne uniquement si les deux mots servant de balise sont dans le même paragraphe.

Sub ExtractionPlageTexteDelimite
Dim Plage As Object
Dim Cible As String
Dim oCSD As Object

oCSD = ThisComponent.createSearchDescriptor
Cible = "MotCle" & ".*" & "MotCle"

With oCSD
.SearchString = Cible
.SearchRegularExpression = True
End With

Plage = ThisComponent.FindFirst( oCSD )

If IsNull(Plage) Then
Msgbox "Non trouvé"
Else
Msgbox Plage.String
End If

End Sub

Comment afficher un document en plein écran ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Sans macro, vous pouvez utiliser le Menu Affichage/Plein écran
La procédure suivante permet d'obtenir le même résultat :
Noubliez pas de créer un bouton pour revenir en mode normal, en cas de besoin.
La macro ne fonctionne pas toujours lorsqu'elle est lancée depuis l'éditeur de macros.

Sub AffichagePleinEcran
Dim oFrame As Object
Dim oDispatcher As Object
Dim Args(0) As New com.sun.star.beans.PropertyValue

oFrame = ThisComponent.CurrentController.Frame
oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Args(0).Name = "FullScreen"
Args(0).Value = True
oDispatcher.executeDispatch( oFrame , ".uno:FullScreen", "", 0, Args() )
End Sub

- 84 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Cette macro peut également être utilisée dans Tableur.

Comment scinder chaque page d'un fichier Traitement


de texte pour créer de nouveaux documents ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'objectif est d'extraire chaque page du document pour créer de nouveaux fichiers.
La macro boucle sur toutes les pages, sélectionne le contenu de chaque page, copie la sélection, effectue
un collage dans un nouveau fichier et l'enregistre.
Une option permet de créer une copie de chaque fichier au format PDF.

Sub ExtractionPages_Dans_DocumentWriter
Dim NbPages As Integer , NumPage As Integer
Dim Curseur As Object , oTextCurseur As Object
Dim Debut As Variant , Fin As Variant
Dim ArgsProprietes(2) As New com.sun.star.beans.PropertyValue
Dim Document As Object , Dispatcher As Object
Dim Args()
Dim oDesktop As Object , oDoc As Object
Dim Fichier As String , NomFichier As String
Dim Destination As Variant

'Fige l'écran
ThisComponent.LockControllers

'Compte le nombre de pages dans le document


Curseur = ThisComponent.currentController.ViewCursor
Curseur.GoToEnd(False)
NbPages = Curseur.Page

'On sort s'il n'y a qu'une page


If NbPages = 1 Then Exit Sub

'Positionne le curseur au début du document


Curseur.GoToStart( True )

'--- Spécifie le filtre de conversion ---


ArgsProprietes(0).Name = "FilterName"
ArgsProprietes(0).Value = "writer_pdf_Export"
ArgsProprietes(1).Name = "CompressMode"
ArgsProprietes(1).Value = 1

'Boucle sur toutes les pages


For NumPage = 1 To NbPages
'Source:
'http://www.oooforum.org/forum/viewtopic.phtml?t=20670&sid=1c0970c54c1cdd27e6659496a86851f7
'JohnV
oTextCurseur = ThisComponent.Text.createTextCursor
Curseur.gotoRange( oTextCurseur , False )

Do While Curseur.Page <> NumPage


If Not oTextCurseur.gotoNextParagraph( False ) Then
End
End If
Curseur.gotoRange( oTextCurseur , False )
Loop

Debut = ThisComponent.Text.createTextCursorByRange(oTextCurseur)

- 85 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Do While Curseur.Page <> NumPage + 1


If Not oTextCurseur.gotoNextParagraph( False ) Then
oTextCurseur.gotoEndOfParagraph( False )
GoTo MarkIt
End If
Curseur.gotoRange( oTextCurseur , False )
Loop

oTextCurseur.gotoPreviousParagraph( False )
oTextCurseur.gotoEndOfParagraph( False )

MarkIt:
Fin = ThisComponent.Text.createTextCursorByRange( oTextCurseur )
'Sélectionne le contenu de la Xeme page
Curseur.gotoRange( Debut , False )
Curseur.gotoRange( Fin , True )

'---
'Copie la Xeme page sélectionnée
Document = ThisComponent.CurrentController.Frame
Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dispatcher.executeDispatch(Document, ".uno:Copy", "", 0, Array())

'Crée un nouveau document Traitement de texte


oDesktop = createUnoService("com.sun.star.frame.Desktop")
Fichier = "private:factory/swriter"
oDoc = oDesktop.LoadComponentFromURL(Fichier, "_blank", 0, Args())

'Effectue un collage dans le nouveau document


Destination = oDoc.CurrentController.Frame
Dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
Dispatcher.executeDispatch(Destination, ".uno:Paste", "", 0, Array())

'Sauvegarde le nouveau fichier au format odt


NomFichier = ConvertToURL( "C:\Copie Page" & NumPage & ".odt" )
oDoc.storeAsURL(NomFichier, Args())
'Crée une copie au format pdf
NomFichier = ConvertToURL( "C:\CopiePDF Page" & NumPage & ".pdf" )
oDoc.storeToUrl( NomFichier , ArgsProprietes())

'Ferme le fichier
oDoc.Close( False )
'---

'Positionne le curseur au début du document


Curseur.GoToStart( True )
Next NumPage

ThisComponent.UnlockControllers
MsgBox "Terminé."
End Sub

- 86 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Traitement de texte > Les paragraphes
Comment boucler sur les paragraphes d'un document ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub boucleSurParaGraphes
Dim leTexte As Object , TextElement As Object
Dim i As Integer

leTexte = ThisComponent.Text.createEnumeration

While leTexte.hasMoreElements
TextElement = leTexte.nextElement

If TextElement.supportsService("com.sun.star.text.Paragraph") Then _
Print TextElement.String

Wend
End Sub

Comment supprimer un paragraphe précis dans le document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La macro supprime le deuxième paragraphe dans le document Traitement de texte.

Sub SuppressionParaGraphe
Dim leTexte As Object , TextElement As Object
Dim i As Integer

leTexte = ThisComponent.Text.createEnumeration

'Boucle dans le document


While leTexte.hasMoreElements
TextElement = leTexte.nextElement

'Compte les paragraphes


If TextElement.supportsService("com.sun.star.text.Paragraph") Then _
i = i + 1

'Suppression s'il s'agit du 2eme paragraphe


If i = 2 Then
'Suppression
TextElement.Dispose
'On sort de la procédure quand le paragraphe est supprimé
Exit Sub
End If

Wend
End Sub

- 87 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Traitement de texte > Les signets
Comment insérer un signet à l'emplacement du curseur ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Pour insérer un signet manuellement:
Menu Insertion
Repère de texte

Sub creerBookmarkEmplacementCurseur
Dim Doc As Object , Cursor As Object
'insérer un bookmark(signet)à l'emplacement du curseur

Doc = ThisComponent
Cursor = Doc.currentcontroller.ViewCursor

Bookmark = Doc.createInstance("com.sun.star.text.Bookmark")
'Spécifie le nom du nouveau signet
Bookmark.Name = "Xmark"
'Insertion du signet
Doc.Text.insertTextContent(Cursor, Bookmark, True)

'Ajoute du texte dans le signet


Doc.getBookmarks().getByName("Xmark").getAnchor.setString("test ajout texte")

End Sub

Comment positionner le curseur à l'emplacement d'un signet ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub AtteindreSignet
Dim Doc As Object , oCC As Object , oCursor As Object
Dim BookMark As Object

Doc = ThisComponent
oCC = Doc.getCurrentController()

'Définit le signet cible


BookMark = Doc.BookMarks.GetByName("Xmark")

oCursor = Doc.text.createTextCursorByRange(BookMark.Anchor)
oCC.Select(oCursor)

End Sub

Pour visualiser manuellement la liste des signets contenus dans le document, faites un clic droit en bas à
gauche dans la barre d'état (à l'emplacement du numéro de la page active).
Vous pouvez ensuite sélectionner un des noms pour positionner le curseur à l'emplacement du signet.

Comment boucler sur les signets d'un document ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub BoucleSignets
Dim Doc As Object , Signets As Object

- 88 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim i As Integer

Doc = ThisComponent
Signets = Doc.getBookmarks()

For i = 0 to Signets.Count() - 1
MsgBox "Nom: " & Signets.getByIndex(i).Name & Chr(13) & _
"Contenu: " & Signets.getByIndex(i).Anchor.String
Next i

End Sub

- 89 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Traitement de texte > Les images
Comment créer une planche contact dans Traitement de
texte, à partir de toutes les images JPG d'un répertoire ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure Traitement de texte permet de choisir un répertoire à partir d'une boîte de dialogue. Toutes
les images .jpg sont ensuite affichées en miniature dans le document.
Remarque :
La procédure est sensible à la casse: jpg n'est pas identique à JPG.

Sub CreationPlancheContact_Writer

'Testé avec WinXP et OOo 2.0.3

Dim sGraphicURL As String , Chemin As String , NextFile as String


Dim oDrawPage As Object , oGraphic As Object
Dim oFolderDialog as Object, oUcb as Object
Dim choix As Integer
Dim Taille as new com.sun.star.awt.Size
Dim Emplacement as new com.sun.star.awt.Point
Dim oLeft As Double , oTop as Double

oCurseur = ThisComponent.getCurrentController().getViewCursor()

'--- Affiche la boîte de dialogue pour sélectionner le répertoire contenant les fichiers .jpg ---
oFolderDialog = CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess")

choix = oFolderDialog.Execute()
If choix = 1 Then Chemin=ConvertFromUrl(oFolderDialog.getDirectory())

'Boucle sur toutes les images du répertoire cible


'Attention la procédure est sensible à la casse
'(jpg n'est pas identique à JPG)
NextFile=Dir(Chemin & "\*.JPG",0)

Do While Len(NextFile) >0

sGraphicURL =ConvertToURL(Chemin & "\" & NextFile)

oDrawPage =ThisComponent.getDrawpage()
oGraphic =ThisComponent.createInstance("com.sun.star.drawing.GraphicObjectShape")
oGraphic.GraphicURL =sGraphicURL
oDrawPage.add(oGraphic)

Taille.width = 3000 'Dimension horizontale image


Taille.height = 3000 'Dimension verticale image
oGraphic.setsize(Taille)
Emplacement.X = oLeft
Emplacement.Y = oTop
oGraphic.setposition(Emplacement)
oGraphic.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER

NextFile=Dir()
Loop
End Sub

- 90 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Traitement de texte > Les tableaux dans le traitement
de texte
Comment insérer un tableau dans le document ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure ajoute un tableau dans le document puis remet en forme les cellules.

Sub InsertionTableauWriter
Dim oDoc As Object , oText As Object , oCurseur As Object
Dim oTable As Object
Dim NumLigne As Integer , NimColonne As Integer
Dim Cellule As Object
Dim Tcs()

oDoc = ThisComponent
oText = oDoc.getText()
oCurseur = oText.createTextCursor()

'--- création tableau ---


oTable = oDoc.createInstance( "com.sun.star.text.TextTable" )
'Définit les dimensions du tableau:
'Table de 5 colonnes et 20 lignes
oTable.initialize( 20 , 5 )
'Insertion du tableau dans le document, à l'emplacement du curseur
oText.insertTextContent( oCurseur, oTable, False )
'-----------------------

'--- Modifie la largeur de la 1ere colonne ---


Tcs = oTable.TableColumnSeparators
Tcs(0).Position = 1000
oTable.TableColumnSeparators = Tcs()
'---------------------------------------------

'Boucle sur les cellules du tableau pour la mise en forme


For NumLigne = 0 To oTable.Rows.getCount() - 1
For NumColonne = 0 To oTable.Columns.getCount() - 1

'Définit la cellule du tableau


Cellule = oTable.getCellByPosition( NumColonne, NumLigne )

'Modifie la couleur de fond de la cellule


Cellule.BackColor = RGB( 235 , 235 , 125 )

oText = Cellule.getText()
oCurseur = oText.createTextCursor()

'Spécifie l'alignement des données dans la cellule


'oCurseur.paraAdjust = com.sun.star.style.ParagraphAdjust.RIGHT
oCurseur.paraAdjust = com.sun.star.style.ParagraphAdjust.CENTER
'oCurseur.paraAdjust = com.sun.star.style.ParagraphAdjust.LEFT

'Applique une mise en forme particulière dans la 1ere colonne


If NumColonne = 0 Then
oCurseur.setPropertyValue("CharRotation", 900) 'Rotation 900 = 90°
oCurseur.CharColor = RGB(255,0,0) 'couleur des caractères
oCurseur.CharHeight = 8 'Taille catactères
oCurseur.CharWeight = com.sun.star.awt.FontWeight.BOLD 'gras
oCurseur.CharPosture = com.sun.star.awt.FontSlant.ITALIC 'italique
oCurseur.CharFontName = "Arial" 'Font
oCurseur.CharUnderline = _
com.sun.star.awt.FontUnderline.SINGLE 'souligné simple
oCurseur.CharBackcolor = RGB(0,0,0) 'couleur de fond du texte

- 91 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End If

'Insère du texte dans la cellule


oText.insertString( oCurseur, "C" & NumColonne + 1 & "/R" & _
NumLigne + 1 , False )

Next NumColonne
Next NumLigne
End Sub

Comment ajouter une ligne dans un tableau ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple montre comment ajouter une ligne à la 5eme ligne du premier tableau.

Sub AjoutLignesTableau
Dim oTable As Object , Lignes As Object

'Spécifie le 1er tableau du document


oTable = ThisComponent.TextTables.getByIndex(0)

Lignes = oTable.getRows()
'Ajoute une ligne à la 5eme ligne
'insertByIndex(numéro de ligne pour l'insertion , nombre de lignes à insérer)
'L'index de la 1ere ligne = 0
Lignes.insertByIndex(4, 1)
End Sub

Comment savoir sur quelle page est positionné un tableau spécifique ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub PositionTableau_NumeroPage
Dim oDoc As Object , oCurseur As Object , oTable As Object
Dim oVueCurseur As Object
Dim NumPage As Integer

oDoc = ThisComponent
oVueCurseur = oDoc.CurrentController.ViewCursor

'getByIndex(2) correspond au 3eme tableau dans le document


oTable = oDoc.TextTables.getByIndex(2)
'Pour spécifier un tableau à partir de son nom, utilisez:
'oTable = oDoc.TextTables.getByName("LeNom")

oCurseur = oTable.getCellByName("A1").createTextCursor

oVueCurseur.gotoRange(oCurseur, FALSE)

NumPage = oVueCurseur.getPage
MsgBox "Le Tableau est sur la page: " & NumPage

- 92 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment insérer une image dans une cellule d'un tableau dans le Traitement de texte ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub InsertionImage_Dans_TableauWriter
Dim oTable As Object , oImage As Object
Dim Cellule As Object , Texte As Object , Curseur As Object

'--- Définit l'image qui va être insérée dans la cellule du tableau ---
oImage = ThisComponent.createInstance( "com.sun.star.text.GraphicObject" )
'Nécessite d'être connecté à internet
oImage.GraphicURL = "http://www.developpez.com/template/logo.gif"
oImage.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
'---

'getByIndex(0) correspond au 1er tableau dans le document


oTable = ThisComponent.TextTables.getByIndex(0)

'Définit la première cellule dans le tableau


Cellule = oTable.getCellByPosition(0,0)

Texte = Cellule.getText()
Curseur = Texte.createTextCursor()
Texte.insertTextContent( Curseur , oImage , False )

End Sub

- 93 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Traitement de texte > Les cadres - TextFrames
Comment boucler sur les cadres contenus dans un document ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les cadres (aussi appelés TextFrames) sont accessibles en utilisant le menu Insertion/Cadres.
Cet exemple boucle sur tous les cadres du document pour en récupérer certaines informations :

• le nom ;
• e texte contenu ;
• Les dimensions.

Et modifie :

• la propriété d'impression du cadre ;


• la protection de la taille, de la position et du contenu

Sub BoucleCadres
Dim i As Integer

For i = 0 To Ubound( ThisComponent.TextFrames.ElementNames() )


'Affiche le nom de chaque cadre
MsgBox ThisComponent.TextFrames.ElementNames (i)

'--- quelques exemples d'actions sur les cadres


With ThisComponent.TextFrames.getByIndex( i )

'Récupère le contenu du cadre


MsgBox .String

'Récupère les dimensions du cadre


MsgBox .Height & " x " & .Width

'Désactive l'option d'impression de chaque cadre


.setPropertyValue( "Print" , False )

'protége la taille du cadre


.Text.SizeProtected = True

'protège la position du cadre


.Text.PositionProtected = True

'protège le contenu du cadre


.Text.ContentProtected = True

End With

Next i
End Sub

Comment atteindre un cadre spécifique ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'exemple positionne le curseur dans le premier cadre du document.

Sub AtteindreCadreSpecifique

- 94 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim oFrame As Object

'Spécifie le 1er cadre dans le document


oFrame = ThisComponent.TextFrames.getByIndex(0)
'Positionne le curseur dans le cadre
ThisComponent.CurrentController.Select( oFrame.Text.Start )

End Sub

Comment récupérer et modifier la position d'un cadre ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Utilisez la macro ci-dessous pour récupérer la position d'un cadre:

Sub RecupererPositionCadre
Dim oFrame As Object

'Spécifie un cadre nommé "Cadre1"


oFrame = ThisComponent.TextFrames.getByName("Cadre1")

MsgBox oFrame.HoriOrientPosition & " x " & oFrame.VertOrientPosition


End Sub

La procédure suivante modifie la position du cadre:

Sub ModifierPositionCadre
Dim oFrame As Object

'Spécifie un cadre nommé "Cadre1"


oFrame = ThisComponent.TextFrames.getByName("Cadre1")

With oFrame
.HoriOrientPosition = 4000
.VertOrientPosition = 6000
End With
End Sub

Comment créer un cadre par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub CreationCadre
Dim oFrame As Object
Dim Curseur As Object

Curseur = ThisComponent.Text.createTextCursor()
oFrame = ThisComponent.createInstance( "com.sun.star.text.TextFrame" )

'Insertion du cadre à l'emplacement du curseur


ThisComponent.Text.insertTextContent( Curseur , oFrame , False )

With oFrame
.Name = "LeCadre"
.setString( "Mon texte dans le cadre" )
.BackColor = RGB( 255 , 0 , 0 )

- 95 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'Définit le type d'ancrage


.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE

'Définit la largeur du cadre par rapport à la largeur de la page (en pourcentage)


'.FrameWidthPercent = 90

'Position horizontale
.HoriOrient = com.sun.star.text.HoriOrientation.NONE
.HoriOrientRelation = com.sun.star.text.RelOrientation.PAGE_FRAME
.HoriOrientPosition = 4000

'Position verticale
.VertOrient = com.sun.star.text.VertOrientation.NONE
.VertOrientRelation = com.sun.star.text.RelOrientation.PAGE_FRAME
.VertOrientPosition = 10000

.Width = 5000
'.FrameIsAutomaticHeight = False
'.Height = 5000

'Pour adapter le cadre à la taille du texte


'.WidthType = 2
End With

End Sub

Comment modifier les bordures d'un cadre ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ModificationBordures
Dim oFrame As Object
Dim Tableau As Variant

'Spécifie un cadre nommé "LeCadre"


oFrame = ThisComponent.TextFrames.getByName("LeCadre")

'Array( Color , InnerLineWidth , OuterLineWidth , LineDistance )


Tableau = Array(0, 0, 0, 0)

With oFrame
.setPropertyValue( "TopBorder" , Tableau )
.setPropertyValue( "BottomBorder" , Tableau )
.setPropertyValue( "LeftBorder" , Tableau )
.setPropertyValue( "RightBorder" , Tableau )
End With

End Sub

- 96 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC


Comment afficher une boîte de dialogue BASIC ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les boîtes de dialogue permettent de créer une interface utilisateur adaptée à votre projet. Vous pouvez y
ajouter des contrôles afin d'effectuer des saisies depuis ce support personnalisé ou pour visualiser des
informations.
Pour créer une boîte de dialogue :

• placez-vous dans l'éditeur de macros ;


• faites un clic-droit dans la barre d'onglets des modules, en bas de la page ;
• sélectionnez l'option « Insérer » dans la liste déroulante ;
• sélectionnez « Boîte de dialogue BASIC ».

Placez cette macro dans un module.

Global oDialog1 As Object

Sub AfficherBoiteDialogue

DialogLibraries.LoadLibrary( "Standard" )
'Dialog1 est le nom de la Form (clic-droit sur l'objet / propriétés / onglet Général / Nom)
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

'Attribue un titre dans la fenêtre


odialog1.Title = "Le titre"

'Modifie la couleur de fond de la boîte de dialogue


oDialog1.Model.BackgroundColor = RGB(235,235,125)

'Redéfinit les dimensions de la boîte de dialogue


oDialog1.Model.Height = 200 'Hauteur
oDialog1.Model.Width =400 'Largeur

'Redéfinit les position de la boîte de dialogue à l'écran


oDialog1.Model.PositionX = 0 'Position horizontale
oDialog1.Model.PositionY = 100 'Position verticale

'Affiche la boîte de dialogue


oDialog1.Execute()

End Sub

Pour fermer la boîte de dialogue par macro, utilisez :

Sub FermetureFormBasic
'Ferme la boîte de dialogue
oDialog1.endExecute

'Libère les ressources


oDialog1.Dispose
End Sub

- 97 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Comment adapter les dimensions de la boîte de dialogue à la taille de l'écran ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long


Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long,ByVal nIndex As Long) As Long

Private Const Largeur As Long = 8


Private Const Hauteur As Long = 10

Sub affichageBoiteDialogue_adapterTailleEcran
Dim Hdc As Long , H As Long , V As Long
Dim oDialog1 As Object

Hdc = GetDC(0)

DialogLibraries.LoadLibrary( "Standard" )
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

H = GetDeviceCaps(Hdc, Largeur)
V = GetDeviceCaps(Hdc, Hauteur)-50
iXPos = 0
iYPos = 0

oDialog1.setPosSize(iXPos, iYPos, H, V, com.sun.star.awt.PosSize.POSSIZE)

oDialog1.Execute()

'Ferme la boîte de dialogue


oDialog1.endExecute

'Libère les ressources


oDialog1.Dispose
End Sub

Comment lister le nom des boîtes de dialogues contenues dans le fichier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ListerNomsDialogues
Dim Tableau() As String
Dim i As Integer

Tableau = DialogLibraries.Standard.getElementNames()

For i = 0 To UBound(Tableau)
Msgbox Tableau(i)
Next i
End Sub

Comment boucler sur l'ensemble des contrôles de la boîte de dialogue ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La variable oDialog1 est supposée déclarée en type « Global » lors du lancement de la boîte de dialogue.

- 98 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sub BoucleControles
Dim Tableau()
Dim i As Integer

Tableau = oDialog1.Controls

For i = 0 To UBound(Tableau)
MsgBox Tableau(i).Model.Name & " --> " & Tableau(i).ImplementationName
Next i
End Sub

Comment ajouter un objet dynamiquement dans une boîte de dialogue BASIC ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple crée dynamiquement une listBox dans la boîte de dialogue en cours d'affichage.
Ajoutez préalablement un bouton dans la boîte de dialogue et associez-y la macro suivante:

Sub AjoutListBox
Dim oDialogModel As Object , oListBoxModel As Object
Dim NomObj As String
Dim i As Integer
Dim oActionListener As Object

NomObj = "NomListBox"

oDialogModel = oDialog1.Model
'Définit le modèle d'objet à ajouter (ListBox)
'http://api.openoffice.org/docs/common/ref/com/sun/star/awt/module-ix.html
oListBoxModel = oDialogModel.createInstance( "com.sun.star.awt.UnoControlListBoxModel" )

With oListBoxModel
.Name = NomObj
.PositionX = 80 'position horizontale
.PositionY = 10 'position verticale
.Width = 50 'largeur
.Height = 100 'hauteur
End With

'Ajoute la ListBox dans la boîte de dialogue


oDialogModel.insertByName( NomObj , oListBoxModel )

For i = 1 To 10
'Ajout des données dans la ListBox
oDialog1.getControl( NomObj ).AddItem ("Donnée" & i , i - 1 )
Next i

'Association des évènements à l'objet créé dynamiquement


oActionListener = createUnoListener("ListBox_", "com.sun.star.awt.XActionListener")
oDialog1.getControl( NomObj ).addActionListener( oActionListener )

End Sub

'--- Les évènements de la ListBox


Sub ListBox_disposing(oEvent)
End Sub

'Affiche le contenu de la ligne sélectionnée lors d'un double clic


Sub ListBox_actionPerformed(oEvent)
MsgBox oEvent.Source.SelectedItem & " Ligne: " & oEvent.Source.SelectedItemPos + 1

- 99 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

- 100 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > Les cases à cocher:
CheckBox
Comment identifier le statut d'une case à cocher ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub StatutCheckBox
Dim oCheck As Object

'Définit la case à cocher dans la boîte de dialogue


oCheck = oDialog1.getControl("CheckBox1")

'Vérifie le statut:
Select Case oCheck.State
Case 0
'Attribue un texte dans le Label de la case à cocher
oCheck.Label = "Décoché"
MsgBox "Décoché"

Case 1
oCheck.Label = "Coché"
MsgBox "Coché"

Case 2
'La propriété "Statut triple" doit être paramétrée à vrai
'Pour attribuer ce statut par macro, utilisez:
'oDialog1.getControl("CheckBox1").Model.TriState = True
oCheck.Label = "Null"
MsgBox "Null"

End Select
End Sub

Une autre possibilité en utilisant le gestionnaire d'évènement:

Sub StatutCheckBox_V02(Event As Object)


Dim oCheck As Object

oCheck = Event.Source

'Vérifie le statut:
Select Case oCheck.State
Case 0
'Attribue un texte dans le Label de la case à cocher
oCheck.Label = "Décoché"
MsgBox "Décoché"

Case 1
oCheck.Label = "Coché"
MsgBox "Coché"

Case 2
'La propriété "Statut triple" doit être paramétrée à vrai
'Pour attribuer ce statut par macro, utilisez:
'oDialog1.getControl("CheckBox1").Model.TriState = True
oCheck.Label = "Null"
MsgBox "Null"

End Select
End Sub

- 101 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > Le contrôle picto:
ImageControl
Comment choisir un fichier image sur le disque et l'afficher dans la boîte de dialogue ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple nécessite d'insérer un contrôle Picto dans la boîte de dialogue BASIC.

Sub AffichageImage
Dim oImage As Object
Dim Fichiers() As Variant
Dim oFilePicker As Object

'Définit le contrôle Picto


oImage = oDialog1.getControl( "ImageControl1" )

'Définit la boîte de dialogue qui va permettre de sélectionner un fichier


oFilePicker = CreateUnoService( "com.sun.star.ui.dialogs.FilePicker" )
'Définit les types de fichiers à afficher dans la fenêtre de recherche
oFilePicker.appendFilter( "FichiersImage (bmp, gif, jpg)", "*.bmp;*.gif;*.jpg" )
'Définit un titre.
oFilePicker.setTitle( "Sélectionnez un fichier:" )

'Si un fichier a été sélectionné ...


If oFilePicker.Execute() Then
Fichiers = oFilePicker.getFiles()

'Pour récupérer le chemin du fichier sélectionné.


'MsgBox ConvertFromURL(Fichiers(0))

'--- Affichage de l'image -----


oImage.Model.ImageURL = ConvertToURL( Fichiers(0) )
'------------------------------

Else
MsgBox "Opération annulée"
End If

End Sub

Comment déplacer un objet ImageControl dans une boîte dialogue BASIC ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple montre comment donner l'effet de mouvement à un contrôle image placé dans la boîte de
dialogue.
La boîte de dialogue est nommée « Dialog1 ».
Ajoutez un objet image nommé « ImageControl1 » et un CommandButton nommé « CommandButton1 ».
Placez l'image de votre choix dans l'objet image : clic-droit sur le contrôle / Propriétés / Onglet « général
» / Image.
(Privilégiez une image simple et de petite taille pour améliorer l'effet visuel).
Associez la macro « DeplacementImage » à l'évènement « lors du déclenchement » du CommandButton :
clic-droit sur le contrôle / Propriétés / Onglet « évènements » / cliquez sur le bouton « Assigner » /
Sélectionnez la macro « DeplacementImage » / Cliquez sur le bouton OK dans toutes les fenêtres ouvertes.

Global oDialog1 As Object

Sub AfficherBoiteDialogue

- 102 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

DialogLibraries.LoadLibrary( "Standard" )
'Dialog1 est le nom de la Form (Clic droit sur l'objet / propriétés / onglet Général / Nom)
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

'Masque l'objet image nommé "ImageControl1" au démarrage


oDialog1.getControl("ImageControl1").Visible = False

'Modifie la couleur de fond de la boîte de dialogue


oDialog1.Model.BackgroundColor = RGB(200,235,225)

'Redéfinit les dimensions de la boîte de dialogue


oDialog1.Model.Height = 300 'Hauteur
oDialog1.Model.Width = 330 'Largeur

'Affiche la boîte de dialogue


oDialog1.Execute()

End Sub

Sub DeplacementImage
Dim oImage As Object
Dim x As Integer

'Masque le bouton de lancement


oDialog1.getControl("CommandButton1").Visible = False

'Définit l'objet image


oImage = oDialog1.getControl("ImageControl1")

'définit la position initiale


With oImage
.Visible = True
.Model.PositionX = 30
.Model.PositionY = 25
.Model.Height = 40
.Model.Width = 50
End With

'Déplacement de l'image dans la boite de dialogue Basic


With oImage
For x = 1 To 30
.Model.PositionX = .Model.PositionX + x
.Model.PositionY = .Model.PositionY + x
.Model.Height = .Model.Height + (x * 2)
.Model.Width = .Model.Width + (x * 2)

Wait (40)
Next x

.Visible = False
End With

'Réaffiche le bouton de lancement


oDialog1.getControl("CommandButton1").Visible = True
End Sub

- 103 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > Les zones de liste:
ListBox
Comment remplir une ListBox en utilisant les données contenues dans une colonne ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Global oDialog1 As Object

Sub AfficherBoiteDialogue_RemplissageListBox
Dim lesCellules As Object , Plage As Object
Dim Cellule As Object
Dim X As Long

DialogLibraries.LoadLibrary( "Standard" )
'Dialog1 est le nom de la Form (clic-droit sur l'objet / propriétés / onglet Général / Nom)
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

'Indique la colonne A dans la feuille


Colonne = ThisComponent.Sheets("Feuille1").Columns(0)
lesCellules = ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
lesCellules.insertByName("",Colonne)
Plage = lesCellules.Cells.createEnumeration

'Boucle sur les cellules de la colonne A.


While Plage.hasMoreElements
Cellule = Plage.nextElement

'--- Remplissage de la ListBox:


'AddItem (Donnée à ajouter , Position dans ListBox )
'0 correspond à la 1ere ligne de la ListBox
oDialog1.getControl("ListBox1").AddItem (Cellule.String, X )
'-----------------------------

X = X + 1
Wend

'Affiche la boîte de dialogue


oDialog1.Execute()

End Sub

Comment récupérer l'élément sélectionné dans la ListBox ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub LireContenuLigneSelectionnee
Dim j As Integer

'Récupère la position de l'élément sélectionné.


j = oDialog1.getControl("ListBox1").getSelectedItemPos()

'Vérifie si un élément de la ListBox est sélectionné


'Renvoie -1 si rien n'est sélectionné.
If j = -1 Then Exit Sub

MsgBox "Vous avez sélectionné la ligne " & j +1 & " qui contient la donnée: " & _
oDialog1.getControl("ListBox1").SelectedItem

- 104 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment boucler sur tous les éléments de la ListBox ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub BoucleElementsListBox
Dim i As Integer, X As Integer

i = oDialog1.getControl("ListBox1").getItemCount()

For X = 0 TO i - 1
MsgBox oDialog1.getControl("ListBox1").getItem(X)
Next
End Sub

Comment remplir une ListBox à partir d'un tableau ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RemplissageListBox_Par_Tableau
Dim Tableau(19) As Integer
Dim i As Integer
Dim Mini As Integer, Maxi As Integer

'--- Remplissage du tableau à partir de données numériques


'générées de façon aléatoire.
Mini = 10
Maxi = 15

'Initialise le générateur de nombres aléatoires


Randomize

For i = 0 To 19
'Insère un nombre aléatoire entre 10 et 15 dans le tableau
Tableau(i) = Int((Maxi - Mini + 1) * Rnd + Mini)
Next i
'-------------

'Remplissage de la ListBox en utilisant le tableau


oDialog1.getControl("ListBox1").Model.StringItemList = Tableau()
End Sub

Comment boucler sur les sélections multiples d'une ListBox ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub BoucleElements_MultiSelection_ListBox
Dim Tableau() As Variant
Dim i As Integer

Tableau = oDialog1.getControl("ListBox1").SelectedItems

For i = 0 To UBound( Tableau() )


MsgBox Tableau(i)
Next i

- 105 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

La propriété doit être préalablement paramétrée pour autoriser la multisélection.


Cela peut être effectué manuellement dans les propriétés de l'objet ou par macro lors de l'intialisation de
la boîte de dialogue :

oDialog1.getControl("ListBox1").Model.MultiSelection = True

Comment supprimer un élément dans la ListBox ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple supprime le premier élément dans la ListBox.

Sub SuppressionElementListBox
Dim Obj As Object

'Définit la ListBox dans la boîte de dialogue


Obj = oDialog1.GetControl("ListBox1")
'Supprime le 1er élément dans la ListBox
Obj.RemoveItems( 0 , 1 )
End Sub

Pour supprimer l'élément sélectionné, utilisez :

Sub SuppressionElementSelectionne
Dim Obj As Object
Dim j As Integer

'Récupère la position de l'élément sélectionné.


j = oDialog1.getControl("ListBox1").getSelectedItemPos()

'Vérifie si un élément de la ListBox est sélectionné


'Renvoie -1 si rien n'est sélectionné.
If j = -1 Then Exit Sub

'Définit la ListBox dans la boîte de dialogue


Obj = oDialog1.GetControl("ListBox1")
'Supprime l'élément sélectionné
Obj.RemoveItems( j , 1 )
End Sub

Comment changer le type de police dans une ListBox ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oListBox As Object


Dim oFont As Object

'Spécifie la ListBox dans la boîte de dialogue.


oListBox = oDialog1.getControl("ListBox1")

oFont = oListBox.Model.FontDescriptor

'Définit la nouvelle police

- 106 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oFont.Name = "Mistral"
'Modifie la taille de la police
oFont.Height = "16"

'Applique le changement de police


oListBox.Model.FontDescriptor = oFont

- 107 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > Les barres de
progression: ProgressBar
Comment utilise t'on les barres de progression ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub BarreDeProgression
Dim x As Integer
Dim oBar As Object

'Définit la barre de progression dans la boîte de dialogue


oBar = oDialog1.getControl("ProgressBar1")

'Définit les valeurs mini et maxi de la barre


oBar.setRange(0, 1000)
'Attribue une valeur à la barre
oBar.setValue(0)

'Boucle pour modifier la valeur de la barre


For x = 0 To 1000 Step 10
'Attribue une valeur à la barre
oBar.setValue(x)
'Temporisation pour permettre de visualiser la progression
Wait 10 '(en millisecondes)
Next

End Sub

- 108 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > Les zones de texte:
TextField
Comment lire et écrire dans une zone de texte ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

'Insère la date du jour dans la zone de texte.


odialog1.getControl("TextField1").Text = Date

'Lit le contenu de la zone de texte


MsgBox oDialog1.getControl("TextField1").getText

Comment changer la mise en forme d'une zone de texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple modifie la couleur du texte et la couleur de fond.

Dim Obj As Object


'Définit la zone de texte
Obj = oDialog1.GetControl("TextField1")
'Modifie la couleur du texte (Blanc)
Obj.Model.TextColor = RGB(255 , 255, 255)
'Modifie la couleur de fond (Noir)
Obj.Model.BackgroundColor = RGB(0, 0, 0)

Comment sélectionner la totalité du contenu de la zone de texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Dim oSelection As New com.sun.star.awt.Selection

'Remplit la zone de texte pour le test


oDialog1.getControl("TextField2").Text = "Ma chaîne"

'Définit le début de la sélection


oSelection.Min = 0
'Définit la fin de la sélection (L'exemple prend en compte tous les caractères
'de la zone de texte).
oSelection.Max = Len(oDialog1.getControl("TextField2").Text)

'Applique le focus sur la zone de texte.


oDialog1.getControl("TextField2").setFocus
'Sélectionne la zone définie
oDialog1.getControl("TextField2").Selection = oSelection

Comment remplacer la chaîne de caractères sélectionnée dans la zone de texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RemplacementSelection
Dim Avant As String , Apres As String
Dim Cible As String, LaChaine As String
Dim NouvelleChaine As String

- 109 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'Indique la chaîne qui va remplacer la sélection


NouvelleChaine = "La description"

'Vérifie si la zone de texte est vide.


If odialog1.getControl("TextField1").Text = "" Then Exit Sub
'Vérifier s'il y a une sélection dans la zone de texte
If odialog1.getControl("TextField1").SelectedText = "" Then Exit Sub

'Récupère la chaine sélectionnée dans la zone de texte


Cible = odialog1.getControl("TextField1").SelectedText
'Récupère le contenu complet de la zone de texte
laChaine = odialog1.getControl("TextField1").Text
'Récupère la position de la donnée à remplacer dans la zone de texte
Position = Instr ( laChaine , Cible )

If laChaine = Cible Then


odialog1.getControl("TextField1").Text = NouvelleChaine
Exit Sub
End If

'Récupère la position de la chaine avant la sélection


Avant = Left ( laChaine , Position - 1 )
'Récupère la position de la chaine après la sélection
Apres = Right ( laChaine , Len ( laChaine) -Len( Cible) - Position + 1 )

'Modifie la zone de texte


odialog1.getControl("TextField1").Text = Avant & NouvelleChaine & Apres
End Sub

Comment identifier la saisie du clavier dans le


TextField et n'autoriser que les données numériques ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Ajoutez la procédure ci-dessous dans un module du fichier Open Office.
Créez une zone de texte nommée TextField1 dans la boîte de dialogue.
Clic droit sur l'objet
Propriétés
Onglet Evènements
Pour attribuer la macro « UtilisationClavier » à l'évènement « Touche "enfoncée »:
Cliquez sur le bouton « Assigner » dans la fenêtre « Assignation de macro ».
Recherchez le module contenant la macro dans l'arborescence de gauche (liste des bibliothèques, et les
modules des fichiers OOo ouverts.)
Ensuite, sélectionnez la macro « UtilisationClavier » dans la liste de droite.
Cliquez sur OK pour valider.
Cliquez sur OK dans la fenêtre « Assignation de macro ».
Fermez la fenêtre « Propriétés TextField ».

'Source adaptée: Basic Programmer's Guide Dialogs


Sub UtilisationClavier(Event As Object)
Dim Cible As String
Dim Msg As String
Dim oSelection As New com.sun.star.awt.Selection

Select Case Event.KeyCode


Case com.sun.star.awt.Key.RETURN
Msg = "Touche Entrée"

Case com.sun.star.awt.Key.TAB

- 110 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Msg = "Touche tabultation"

Case com.sun.star.awt.Key.DELETE
Msg = "Touche suppression"

Case com.sun.star.awt.Key.ESCAPE
Msg = "Touche Echap"

Case com.sun.star.awt.Key.DOWN
Msg = "Touche Flèche bas"

Case com.sun.star.awt.Key.UP
Msg = "Touche Flèche haut"

Case com.sun.star.awt.Key.LEFT
Msg = "Touche Flèche gauche"

Case com.sun.star.awt.Key.RIGHT
Msg = "Touche Flèche droite"

Case Else
Select Case Event.KeyChar
'Si les touches ne correspondent pas au clavier numérique:
Case Is < 48, Is > 57
Msg = "Vous devez saisir uniquement des valeurs numériques."

'--- Supprime le contenu le caractère erroné


Cible = odialog1.getControl("TextField1").getText
odialog1.getControl("TextField1").Text = Left( Cible , Len(Cible) - 1 )

'--- Repositionne le curseur en fin de zone


oSelection.Min = Len(odialog1.getControl("TextField1").Text)
oSelection.Max = Len(oDialog1.getControl("TextField1").Text)
oDialog1.getControl("TextField1").Selection = oSelection
End Select
End Select

If Msg <> "" Then MsgBox Msg


End Sub

Comment identifier quelle zone de texte a pris le focus ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous pouvez utiliser le Listener (gestionnaire d'évènement) XFocusListener pour identifier la prise ou la
perte de focus sur un contrôle.
L'exemple ci-dessous applique le gestionnaire d'évènement sur les zones de texte contenues dans la boîte
de dialogue Dialog1. Chaque objet type "TextField" (UnoEditControl) change ensuite de couleur lorsqu'il
prend le focus.

Global oDialog1 As Object


Private oFocusListener As Object

Sub AfficherBoiteDialogue
Dim Tableau()
Dim i As Integer

DialogLibraries.LoadLibrary( "Standard" )
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

'Définit le Listener (gestionnaire d'évènements)


oFocusListener = createUnoListener("TextBox_", "com.sun.star.awt.XFocusListener")

- 111 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Tableau = oDialog1.Controls

'Boucle sur les contrôles de la boîte de dialogue BASIC.


For i = 0 To UBound(Tableau)
'Identie les TextBox et associe le Listener
If Tableau(i).ImplementationName = "stardiv.Toolkit.UnoEditControl" Then _
Tableau(i).addFocusListener( oFocusListener )
Next i

'Affiche la boîte de dialogue BASIC.


oDialog1.Execute()

End Sub

'Evènement perte du focus


Sub TextBox_focusLost( oEvent As Object )
Dim Cible As Object

'Identifie le contrôle
Cible = oEvent.Source.Model
'Modifie la couleur de fond du contrôle
Cible.Backgroundcolor = RGB(255, 255, 255)
End Sub

'Evènement prise du focus


Sub TextBox_focusGained( oEvent As Object)
Dim Cible As Object

'Identifie le contrôle
Cible = oEvent.Source.Model
'Modifie la couleur de fond du contrôle
Cible.Backgroundcolor = RGB(150, 150, 200)
End Sub

- 112 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > Les champs Date /
Calendriers
Commment transférer la date sélectionnée dans un
contrôle DateField vers une cellule de la feuille de calcul ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

'---
'La boîte de dialogue est composée:
' d'un objet CommandButton
' d'un objet DateField (calendrier) dont le format d'affichage est JJ.MM.AAAA,
' et d'une propriété "déroulante" = oui.
'---

Option Explicit

Global oDialog1 As Object

Sub AfficheBoiteDeDialogue()
DialogLibraries.LoadLibrary( "Standard" )
'Dialog1 est le nom de la Form
'(Clic droit sur l'objet / propriétés / onglet Général / Nom)
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

'--- Indique la date qui va s'afficher par défaut dans le contrôle "DateField1"
oDialog1.getControl("DateField1").Date = 20070101 'AAAAMMJJ

'--- Permet de définir une date mini et maxi utilisable dans le calendrier
oDialog1.getControl("DateField1").Model.DateMin = 20070101
oDialog1.getControl("DateField1").Model.DateMax = 20071231
'---

'Affiche la boîte de dialogue


oDialog1.Execute()
End Sub

'--- La macro est rattachée au CommandButton de la boite de dialogue ---


'La date sélectionnée dans le DateField est insérée dans la cellule A2 de la feuille de calcul.
Sub InsertionDate()
Dim Feuille As Object
Dim oNumberFormats As Variant
Dim Loc As New com.sun.star.lang.Locale

'Définit la 1ere feuille du classeur


Feuille = ThisComponent.Sheets(0)

oNumberFormats = ThisComponent.NumberFormats

'Insére la date sélectionnée dans la cellule A2


With Feuille.getCellByPosition( 0 , 1 )
'spécifie le format de la cellule
.NumberFormat = oNumberFormats.getStandardFormat( com.sun.star.util.NumberFormat.DATE , Loc )
.Value = CDateFromIso( oDialog1.getControl("DateField1").Date )
End With
End Sub

Comment afficher la date du jour dans un contrôle DateField ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

- 113 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oDialog1.getControl("DateField1").Date = CDateToISO( Date )

- 114 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les boîtes de dialogue BASIC > La sélection de
fichiers: FileControl
Comment utiliser l'objet FileControl ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'objet FileControl permet d'afficher la boîte de dialogue « Ouvrir » et de sélectionner un fichier.
Après avoir choisi un fichier, vous pouvez récupérer le chemin complet en utilisant cette macro:

Sub Main
Dim oFichier As Object

'Définit le contrôle "Sélection de fichier" dans la boîte de dialogue BASIC.


oFichier = oDialog1.getControl("FileControl1")

'Affiche le texte contenu dans le contrôle (le chemin du fichier sélectionné).


MsgBox oFichier.Text
End Sub

Vous pouvez spécifier un chemin par défaut lors de l'initialisation de la boîte de dialogue BASIC.
Si le chemin indiqué n'existe pas, c'est le répertoire courant qui sera affiché par défaut.

Global oDialog1 As Object

Sub AfficherBoiteDialogue

DialogLibraries.LoadLibrary( "Standard" )
oDialog1 = CreateUnoDialog( DialogLibraries.Standard.Dialog1 )

'Définit le contrôle "Sélection de fichier" dans la boîte de dialogue.


oFichier = oDialog1.getControl("FileControl1")
'Définit le chemin par défaut.
'Si le chemin indiqué n'existe pas c'est le répertoire courant qui est affiché.
oFichier.Text = "C:\Documents and Settings\mimi"

'Affiche la boîte de dialogue


oDialog1.Execute()

End Sub

- 115 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les sauvegardes


Comment sauvegarder un fichier ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple montre comment sauvegarder un classeur.

Sub EnregistrerSous
Dim Fichier As String
Dim Args(0) As New com.sun.star.beans.PropertyValue

Fichier = ConvertToURL("C:\Documents and Settings\michel\dossier\monClasseur.ods")

'****************************************
'Propriété pour ajouter un mot de passe lors de l'enregistrement :
'Args(0).Name = "Password"
'Args(0).Value = "123456"

'La liste des propriétés:


'http://api.openoffice.org/docs/common/ref/com/sun/star/document/MediaDescriptor.html
'*****************************************

ThisComponent.storeAsURL(Fichier, Args())

End Sub

lien : Consultez l'API Guide pour obtenir la liste des propriétes de sauvegarde

Comment enregistrer les modifications ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

ThisComponent.Store

Comment créer une copie de sauvegarde ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les copies de sauvegarde permettent l'enregistrement sans modifier le fichier ouvert en mémoire.

Sub Creer_CopieDeSauvegarde
Dim Fichier As String
Dim Args(0) As New com.sun.star.beans.PropertyValue

'--- Ajoute la date du jour dans le nom de la sauvegarde : YYYYMMDD


Fichier = _
ConvertToURL("C:\Documents and Settings\michel\Sauvegarde " & CDateToIso(Date) & ".ods"

ThisComponent.storeToURL(Fichier,Args())

- 116 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment afficher la boîte de dialogue Enregistrer Sous ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub boiteDialogueEnregistrerSous
Dim oFrame As Object ,oDisp As Object
Dim Array()

oFrame = ThisComponent.CurrentController.getFrame()
oDisp = createUnoService("com.sun.star.frame.DispatchHelper")
oDisp.executeDispatch(oFrame , ".uno:SaveAs", "", 0 , Array())
end Sub

Comment récupérer des informations sur la sauvegarde d'un fichier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub informations_Sauvegardes

'--- Retrouve le chemin de stockage du fichier ---

'Nota: Renvoie une chaîne vide si le fichier n'est pas enregistré


MsgBox ConvertFromURL( ThisComponent.getURL() )
'Renvoie chemin complet du fichier
'(Renvoie une chaîne vide s'il s'agit d'un document non sauvegardé)
MsgBox ConvertFromUrl(ThisComponent.GetLocation)
'--------------------------------------------------

'--- Vérifie si le fichier est enregistré sur le disque ---

MsgBox ThisComponent.HasLocation
'Renvoie False si le document n'a jamais été sauvegardé
'----------------------------------------------------------

'Vérifie si le document contient des modifications non enregistrées


MsgBox ThisComponent.isModified
'False : pas de modification
'True : modifications non enregistrées

End Sub

Comment annuler l'indicateur de modifications ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure permet de spécifier qu'il n'y a pas de modifications non enregistrées dans le fichier.

Sub Annule_IndicationModifications

'Vérifie le statut de l'indicateur de modification


MsgBox ThisComponent.IsModified

'Annule l'indication de modification

- 117 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

ThisComponent.setModified(False)

'Vérifie le statut de l'indicateur de modification


MsgBox ThisComponent.IsModified

End Sub

- 118 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les répertoires


Comment lister tous les fichiers d'un répertoire depuis Open Office ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Première méthode :

Sub ListeFichiersDuRepertoire_V01
'
'Liste tous les fichiers d'un répertoire
'Les fichiers masqués sont pris en compte
'Cet exemple permet aussi de vérifier si le répertoire est vide
'
Dim Direction As String , Resultat As String

'Indiquez le répertoire cible


'(La procédure ne renvoie pas d'erreur si le dossier n'existe pas)
Direction=Dir("C:\Documents and Settings\michel\dossier\general\*.*",0)
'
'------
'Un autre exemple pour lister uniquement les fichiers de type PDF :
'Direction=Dir("C:\Documents and Settings\michel\dossier\general\*.pdf",0)
'------

Do While Len(Direction) > 0


Resultat = Resultat & Chr(13) & Direction
Direction=Dir()
Loop

If Resultat="" then
MsgBox "Le répertoire est vide."
Else
Msgbox Resultat ,,"Liste des fichiers."
End If
End Sub

Une deuxième solution : le chemin complet est renvoyé.

Sub ListeFichiersDuRepertoire_V02
'
'Liste tous les fichiers d'un répertoire
'Les fichiers masqués sont pris en compte
'Cet exemple permet aussi de vérifier si le répertoire est vide
'
Dim Chemin As String , NomObj As String , Resultat As String
Dim oSimpleFileAccess As Object
Dim i As Integer
Dim Tableau()

'Attention : la procédure provoque une erreur si le dossier n'existe pas


Chemin ="C:\Documents and Settings\michel\dossier\general\"

oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )


'Transfert la liste des fichiers dans un Tableau
Tableau = oSimpleFileAccess.getFolderContents(ConvertToURL( Chemin ), True )

If UBound(Tableau)= -1 Then MsgBox "Le répertoire est vide."

For i = 1 To UBound(Tableau) + 1
NomObj = Tableau( i-1 )
If Not oSimpleFileAccess.isFolder( NomObj ) Then _
Resultat = Resultat & ConvertFromURL( NomObj ) & Chr(13)
Next i

- 119 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

MsgBox Resultat
End Sub

Comment lister les dossiers contenus dans un répertoire ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Première méthode.
Nota : les sous répertoires ne sont pas pris en compte.

Sub listerRepertoires_V01
Dim Cible As String , Chemin As String

Chemin ="C:\Documents and Settings\michel\dossier\general\"


Cible =Dir(Chemin ,16)

If Cible <> "" Then


Do
If Cible <>"." And Cible <>".." Then MsgBox Cible
'".." et "." correspondent aux dossiers Parent et courant
Cible =Dir
Loop Until Cible =""
End If
End Sub

Deuxième possibilité.

Sub listerRepertoires_V02
Dim Chemin As String , NomObj As String
Dim oSimpleFileAccess As Object
Dim i As Integer
Dim Tableau()

Chemin ="C:\Documents and Settings\michel\dossier\general\"

oSimpleFileAccess = CreateUnoService( "com.sun.star.ucb.SimpleFileAccess" )


Tableau = oSimpleFileAccess.getFolderContents(ConvertToURL( Chemin ), True )

For i = 1 To UBound(Tableau) + 1
NomObj = Tableau( i-1 )
If oSimpleFileAccess.isFolder( NomObj ) Then _
MsgBox ConvertFromURL( NomObj )
Next i
End Sub

Comment vérifier l'existence d'un répertoire ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub VerifieExistenceRepertoire_V01
Dim Chemin As String

Chemin = "C:\Documents and Settings\michel\dossierOOo"

If Dir(Chemin,vbDirectory) > "" then


MsgBox "Ce dossier existe."
Else

- 120 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

MsgBox "Ce dossier n'existe pas."


End If
End Sub

Une deuxième solution consiste à utiliser la fonction FileExists.

Sub VerifieExistenceRepertoire_V02
Dim Dossier As String, urlDossier As String

Dossier = "C:\Documents and Settings\michel\dossierOOo"

urlDossier = ConvertToURL( Dossier )


'Renvoie False ou True
MsgBox FileExists( urlDossier )
End Sub

Comment créer un nouveau répertoire ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub creerRepertoire
'Crée un nouveau dossier nommé "DossierSauvegarde"
'Les répertoires parents seront aussi créés s'ils n'existaient pas
MkDir "C:\mon projet\DossierSauvegarde\Archives"
End Sub

Comment afficher une boîte de dialogue pour sélectionner un dossier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub selectionRepertoire
Dim Dossier As Object
Dim Valeur As Integer

Dossier = _
CreateUnoService("com.sun.star.ui.dialogs.FolderPicker")
Valeur = Dossier.Execute()

If Valeur = 1 Then _
MsgBox ConvertFromUrl(Dossier.getDirectory())
End Sub

Comment lister les répertoires spécifiques d'Open Office (PathSettings) ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple doit être placé dans un classeur Tableur: le résultat s'affiche dans la feuille de calcul.

Sub lister_PathSettings
Dim j As Integer , i As integer , x As Integer
Dim oPathSettings As Object , objProprieteSetInfo As Object
Dim Tableau() , TabChemin()
Dim objPropriete As Object , Feuille As Object
Dim ValPropriete As String , NomPropriete As String , Chemin As String

- 121 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

oPathSettings = CreateUnoService( "com.sun.star.util.PathSettings" )

objProprieteSetInfo = oPathSettings.getPropertySetInfo()
'Transfert les données dans le tableau
Tableau = objProprieteSetInfo.getProperties()

'Spécifie la 1ere feuille du classeur


Feuille = ThisComponent.Sheets(0)

'Boucle sur le tableau pour extraire les résultats


For i = LBound( Tableau ) To UBound( Tableau )
objPropriete = Tableau( i )
NomPropriete = objPropriete.Name
ValPropriete = oPathSettings.getPropertyValue( NomPropriete )
Feuille.getCellByPosition( 0 , x ).setString( NomPropriete )

If Len( ValPropriete ) > 0 Then


TabChemin = Split( ValPropriete, ";" )

For j = LBound( TabChemin ) To UBound( TabChemin )


Chemin = ConvertFromURL( TabChemin( j ))
Feuille.getCellByPosition( 1 , x ).setString( NomPropriete & " : " & Chemin )
x = x + 1
Next
End If

x = x + 1
Next i
End Sub

Comment ouvrir l'explorateur Windows sur un répertoire précis ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ouvrirExplorateurWindows()
Dim oShell As Object
oShell = createUnoService("com.sun.star.system.SystemShellExecute")

'La procédure renvoie un message d'erreur si le répertoire n'existe pas


oShell.execute(ConvertToUrl("C:\Documents and Settings\michel\dossier"), "", 0)
End Sub

Comment créer un raccourci sur le bureau ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure crée un raccourci sur le bureau pour le fichier contenant cette macro.

Sub CreerRaccourciBureau()
Dim WshShell As Object , Raccourci As Object
Dim dirBureau As String

oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")
WshShell = oObj.createInstance("WScript.Shell")
dirBureau = Environ("USERPROFILE") & "\Bureau\" 'adaptez le chemin du bureau

Raccourci = WshShell.createShortcut( dirBureau & "monFichier.lnk")

Raccourci.TargetPath = ConvertFromURL( ThisComponent.Location )

- 122 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'Raccourci.IconLocation = "C:\dating.ico" 'Attribue un icône spécifique au raccourci


Raccourci.Save

End Sub

- 123 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les fichiers


Comment vérifier l'existence d'un fichier ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Première méthode :

Sub VerifierExistenceFichier_V01
Dim oSFA As Object
Dim Fichier As String, urlFichier As String

oSFA = createUnoService( "com.sun.star.ucb.SimpleFileAccess" )


Fichier = "C:\Documents and Settings\michel\dossier\nomFichier.txt"

urlFichier = ConvertToURL( Fichier )


If oSFA.exists( urlFichier ) Then MsgBox "Le fichier existe."

End Sub

Cette deuxième méthode utilise la fonction FileExists

Sub VerifierExistenceFichier_V02
Dim Fichier As String, urlFichier As String

Fichier = "C:\Documents and Settings\michel\dossier\nomFichier.txt"

urlFichier = ConvertToURL( Fichier )


MsgBox FileExists( urlFichier )
End Sub

Comment copier un fichier sur le disque ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure crée une copie de fichier vers un autre répertoire.
Nota :
Le fichier original n'est pas supprimé.

Sub CopierFichier
Dim Source As String , Destination As String
Dim oSFA As Object

Source = ConvertToUrl("C:\monFichier.ods")
Destination = ConvertToUrl("C:\Documents and Settings\michel\dossier\monFichier.ods")

oSFA = createUNOService ("com.sun.star.ucb.SimpleFileAccess")


oSFA.copy(Source, Destination)
End Sub

Comment afficher une boîte de dialogue pour sélectionner un fichier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple affiche la boîte de dialogue « Ouvrir ».
Le fichier sélectionné est ensuite ouvert.

- 124 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sub selectionFichier_puisOuverture()
Dim Fichier As Object , ShExec As Object
Dim X As Integer

Fichier = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
'Spécifie le chemin par défaut lors de l'affichage de la boîte de dialogue
Fichier.SetDisplayDirectory("C:\Documents and Settings\michel\dossier")
'Affiche la boîte de dialogue "Ouvrir"
X = Fichier.Execute()

If X = 1 Then
MsgBox ConvertFromURL( Fichier.Files(0) )

'Permet d'ouvrir le fichier sélectionné


ShExec = createUnoService("com.sun.star.system.SystemShellExecute")
ShExec.execute(Fichier.Files(0), "", 0)
End If
End Sub

Comment récupérer des informations sur les propriétés des fichiers ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Il est possible de récupérer certaines informations sur différents types de fichiers, sans les ouvrir.
Cet exemple affiche les données qui apparaissent dans l'onglet « Général » lorsque vous faites un clic-
droit sur un fichier, depuis l'explorateur Windows.

Sub Test()
proprietesFichier_getFile "C:\Documents and Settings\mimi\dossier\Nom Classeur.xls"

proprietesFichier_getFile "C:\dossier\monAppli.exe"

proprietesFichier_getFile "C:\dossier\le fichier.pdf"


End Sub

Sub proprietesFichier_getFile( Fichier As String )


Dim oObj As Object , Cible As Object
Dim Valeur As Object
Dim Resultat As String

oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")
Cible = oObj.createInstance("Scripting.fileSystemObject")
Valeur = Cible.GetFile(Fichier)

Resultat = "Chemin : " & Valeur.ParentFolder.Path & Chr(10) & Chr(10) & _
"Chemin court : " & Valeur.shortpath & Chr(10) & Chr(10) & _
"Nom court : " & Valeur.ShortName & Chr(10) & Chr(10) & _
"Date creation : " & CDate( Valeur.DateCreated.Value ) & Chr(10) & Chr(10) & _
"Date derniere modification : " & CDate( Valeur.DateLastModified.Value ) & Chr(10) & Chr(10) & _
"Date dernier acces : " & CDate( Valeur.DateLastAccessed.Value ) & Chr(10) & Chr(10) & _
"Taille fichier : " & Valeur.Size & " octets" & Chr(10) & Chr(10) & _
"Type fichier : " & Valeur.Type & Chr(10) & Chr(10) & _
"Extension fichier : " & Cible.GetExtensionName(Valeur) & Chr(10) & Chr(10) & _
"Nom fichier sans extension : " & Cible.GetBaseName(Valeur) & Chr(10) & Chr(10) & _
"Nom fichier : " & Cible.GetFileName(Valeur) & Chr(10) & Chr(10) & _
"Chemin et nom complet : " & Cible.GetAbsolutePathName(Valeur)

MsgBox Resultat

- 125 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment retrouver la date et l'heure de création ou de dernière modification d'un fichier ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La fonction FileDateTime permet de récupérer la date et l'heure de création ou de dernière modification
d'un fichier, sans avoir besoin de l'ouvrir :

Sub Main
Dim Fichier As String

'La procédure renvoie une erreur si le fichier n'existe pas.


Fichier = "C:\repertoire\NomFichier.pdf"
MsgBox FileDateTime( Fichier )
End Sub

- 126 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les filtres


Comment lister le nom des filtres disponibles ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ListerFiltresConversion()
Dim oDesktop As Object , oDoc As Object
Dim Fichier As String
Dim Args()
Dim filtresFact As Object
Dim nomFiltres As Variant
Dim i As Integer

'--------
oDesktop = createUnoService("com.sun.star.frame.Desktop")
Fichier = "private:factory/scalc"
'Création d'un nouveau tableur pour lister le résultat de la macro
oDoc = oDesktop.LoadComponentFromURL(Fichier, "_blank", 0, Args())

'Spécifie la 1ère feuille du classeur


Feuille = oDoc.getSheets.getByIndex(0)
'-------

'--- Liste les filtres ---


filtresFact = createUnoService( "com.sun.star.document.FilterFactory" )

nomFiltres = filtresFact.getElementNames()
For i = LBound(nomFiltres) To UBound(nomFiltres)
Feuille.getCellByPosition( 0 , i ).String = nomFiltres( i )
Next
'-------------------------

'--- Ajuste la taille de la colonne en fonction du contenu ---


Feuille.Columns(0).OptimalWidth = true
'-------------------------------------------------------------
End Sub

Comment créer une copie du classeur au format PDF ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Le classeur doit être préalablement sauvegardé au format natif.
L'exemple va créer un copie au format PDF dans le même répertoire. Si le classeur contient plusieurs
onglets, ils seront tous enregistrés, à la suite, dans le même fichier PDF.

Sub Convertir_Calc_Vers_PDF
dim ArgsProprietes(2) as new com.sun.star.beans.PropertyValue
dim Fichier as string
dim oDoc as object

'--- Le fichier Tableur doit être préalablement enregistré ---


'sinon .URL renvoie une chaîne vide.
'----------------------------------------------------------

'Indique le nom de la sauvegarde au format pdf.


'(Le fichier PDF sera créé dans le même répertoire que le tableur.)
Fichier = _
Left( ThisComponent.URL , Len(ThisComponent.URL) - 4 ) & ".pdf"

'--- Sauvegarde les modifications dans le classeur ---


ThisComponent.Store

- 127 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'--- Spécifie le filtre de conversion ---


ArgsProprietes(0).Name = "FilterName"
ArgsProprietes(0).Value = "calc_pdf_Export"
ArgsProprietes(1).Name = "CompressMode"
ArgsProprietes(1).Value = 1

'--- Crée une copie de sauvegarde au format PDF ---


'Remarque : Tous les onglets non vides sont enregistrés à la suite, dans le
'même fichier PDF.
ThisComponent.storeToUrl( Fichier , ArgsProprietes())
End Sub

Comment créer une copie d'une présentation Présentation au format Flash (.swf) ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub Conversion_Impress_Flash
Dim ArgsProprietes(1) As new com.sun.star.beans.PropertyValue
Dim Fichier As String

Fichier = ConvertToURL( "C:\leFichier.swf" )

'--- Spécifie le filtre de conversion ---


ArgsProprietes(0).Name = "FilterName"
ArgsProprietes(0).Value = "impress_flash_Export"

'--- Crée une copie de sauvegarde au format Flash (.swf) ---


ThisComponent.storeToUrl( Fichier , ArgsProprietes())
End Sub

Comment convertir un fichier sxw au format odt par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Dans la version 1.x, les documents texte étaient créés au format .sxw.
Ces formats sont toujours utilisables dans la version 2.x mais vous pouvez aussi les convertir aux
formats .odt qui sont le nouveau standard OpenDocument:
Pour effectuer la conversion d'un ou plusieurs documents :

• menu Fichier ;
• Assistants
;
• Convertisseur de documents ;
• sélectionnez les types de documents à convertir :
• cochez l'option « StarOffice », puis les « Documents texte » et « Classeurs »,
• cliquez sur le bouton « Suivant » :
• décochez ou cochez les options qui vous interessent dans la nouvelle fenêtre et paramétrez les
différentes zones d'information :
• le champ « Import depuis: » correspond au dossier contenant les fichiers à convertir,
• le champ « enregistrer dans: » correspond au dossier de destination pour les nouveaux
fichiers convertis,
• cliquez sur le bouton « Suivant » ;
• la fenêtre de paramétrage s'affiche une nouvelle fois si vous avez choisi de convertir plusieurs types
de fichiers (Documents texte et Classeurs) ;
• cliquez sur le bouton « Suivant » ;

- 128 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

• cliquez sur le bouton « Convertir » pour lancer l'opération ;


• cliquer sur le bouton « Fermer » dans la boite de dialogue ;
• ouvrez le répertoire de destination que vous avez précédemment indiqué afin de visualiser le
résultat de la conversion.

Vous pouvez aussi effectuer les conversions par macro:


cet exemple ouvre un fichier sxw et le convertit au format odt.

Sub Conversion_SXW_Vers_ODT
Dim Cible As String , CibleURL As String
Dim Fichier As Object
Dim Args(0) As New com.sun.star.beans.PropertyValue
Dim Args2(2) As New com.sun.star.beans.PropertyValue

'Les arguments pour masquer le fichier pendant le traitement


Args(0).Name = "Hidden" 'nom de l'argument
Args(0).Value = True 'valeur de l'argument

Cible = "C:\essai.sxw"

'Adresse au format URL, du document sxw à convertir


CibleURL = convertToURL(Cible)
'Ouverture du document sxw
Fichier = StarDesktop.LoadComponentFromURL( CibleURL , "_blank", 0 , Args() )

'Modification de l'adresse en .odt


CibleURL = convertToURL( left( Cible, len(Cible)-3 ) + "odt" )

'Les arguments pour enregistrer le document en .odt


Args2(0).Name = "URL"
Args2(0).Value = CibleURL
Args2(1).Name = "FilterName"
Args2(1).Value = "writer8"
Args2(2).Name = "SelectionOnly"
Args2(2).Value = True

'Sauvegarde du fichier
Fichier.storeAsURL( CibleURL , Args2() )

'Fermeture
Fichier.Close( True )
End Sub

Comment convertir chaque feuille d'un classeur au format CSV ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'exemple boucle sur les feuilles du classeur et enregistre chacune au format CSV, dans le même répertoire
que le fichier original.
Le classeur original est supposé déjà enregistré sur le disque.

Dim oDoc As Object


Dim i As Integer
Dim EnrArgs(1) As New com.sun.star.beans.PropertyValue
Dim Chemin As String , NomFeuille As String

oDoc = ThisComponent

' Boucle sur les feuilles


For i = 1 to oDoc.Sheets.Count

- 129 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

NomFeuille = oDoc.Sheets(i-1).Name

' Active la feuille


ThisComponent.CurrentController.ActiveSheet = oDoc.Sheets(i-1)

Chemin = Left(oDoc.URL, Len(oDoc.URL) - Len(Dir(ConvertFromURL(oDoc.URL)))

'--- Spécifie le filtre de conversion ---


EnrArgs(0).Name = "FilterName"
EnrArgs(0).Value = "Text - txt - csv (StarCalc)"

' Sauvegarde dans le même répertoire que le classeur original


oDoc.storeToURL( ConvertToURL(Chemin & NomFeuille & ".csv"), EnrArgs())

Next

- 130 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > L'éditeur de macros


Comment lister le nom des modules contenus dans le document ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette procédure permet de récupérer le nom des modules contenus dans le fichier.

Sub ListeModules
Dim Tableau()
Dim I As Integer

Tableau()= ThisComponent.BasicLibraries.getByName("Standard").ElementNames

For I = 0 To UBound(Tableau())
MsgBox Tableau(I)
Next I
End Sub

Comment récupérer le contenu d'un module ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RecupererContenuModule
MsgBox ThisComponent.BasicLibraries.getByName("Standard").getByName("Module1")

'Deuxième possibilité
MsgBox ThisComponent.LibraryContainer.getByName("Standard").ModuleContainer. _
getByName("Module1").Source
End Sub

Comment afficher l'éditeur de macros par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub AfficherEditeurMacros()
Dim oDisp As Object
Dim Args()

oDisp = createUnoService( "com.sun.star.frame.DispatchHelper" )


oDisp.executeDispatch( StarDesktop, "slot:30783", "", 0, Args() )
End Sub

Comment créer dynamiquement un nouveau module et une macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Ces procédures permettent de créer un nouveau module et d'y insérer une macro dynamiquement.
Remarque :
Si l'éditeur de macro est ouvert lorsque vous lancez la procédure : fermez puis rouvrez-le afin de visualiser
le résultat.

Sub CreationNouveauModule
Dim Librairie As Object

- 131 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Librairie = ThisComponent.BasicLibraries.GetByName("Standard")
Librairie.InsertByName("NomModule", "REM Test")
End Sub

Un autre exemple :

Sub CreerModule_Et_MacroDynamiquement
Dim laMacro As String
Dim Librairie As Object

Librairie = ThisComponent.BasicLibraries.GetByName("Standard")

'Prépare le contenu de la nouvelle macro


laMacro = Chr(13) & Chr(13) & "Sub Test" & Chr(13)
laMacro = laMacro & "MsgBox " & Chr(34) & "Coucou" & Chr(34) & Chr(13)
laMacro = laMacro & "End Sub"

'Crée le module et la macro


Librairie.InsertByName("NomModule2", laMacro)

End Sub

Comment supprimer un module ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple permet de supprimer un module nommé « Module1 ».
Remarque :
Si l'éditeur de macro est ouvert lorsque vous lancez la procédure : fermez puis rouvrez-le afin de visualiser
le résultat.

Sub SupprimerModule
Dim Librairie As Object
Librairie = ThisComponent.BasicLibraries.getByName("Standard")
Librairie.removeByName("Module1")
End Sub

Important :
Cette macro, placée dans le module à supprimer, provoque un plantage du fichier.

- 132 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Automation


Comment utiliser LibO/AOO avec Delphi ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Consultez la FAQ DELPHI

Comment utiliser LibO/AOO avec VB et VBA ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Consultez le tutoriel: piloter LibO/AOO depuis Excel

Comment récupérer la valeur d'une constante ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Lorsque vous pilotez LibO/AOO depuis VB ou VBA, il n'est pas possible d'utiliser directement les
constantes de l'application OOo.
Vous devez remplacer la constante par sa valeur afin de faire fonctionner vos procédures.
Par exemple, ces lignes LibO/AOO :

ArgsDoc(0).Name = "MacroExecutionMode"
ArgsDoc(0).Value = com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN

seront utilisées ainsi lors d'un pilotage depuis VB ou VBA :

ArgsDoc(0).Name = "MacroExecutionMode"
ArgsDoc(0).Value = 4

Pour connaitre la valeur d'une constante, vous pouvez créer une macro dans LibO/AOO comme dans
l'exemple ci-dessous :

Sub Main
MsgBox com.sun.star.document.MacroExecMode.ALWAYS_EXECUTE_NO_WARN
End Sub

Comment masquer LibO/AOO pendant le traitement d'une macro VB/VBA ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Dans l'exemple suivant, LibO/AOO reste masqué pendant le déroulement de la procédure :
La macro VB/VBA ouvre un classeur OOo pour insérer une donnée dans la cellule A1, puis referme le fichier.

Option Explicit

Sub Test()

- 133 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim serviceManager As Object, Desktop As Object, Document As Object


Dim Fichier As String
Dim Args(0) As Object
Dim T As Date

'Appel fonction de conversion


Fichier = ConvertToURL("C:\LeClasseur.ods")

'Création d'une instance Open Office


Set serviceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = serviceManager.createInstance("com.sun.star.frame.Desktop")

'--------------
'Tableau pour les paramètres du mode masqué
Set Args(0) = _
serviceManager.Bridge_getStruct("com.sun.star.beans.PropertyValue")

'Arguments Open Office pour masquer le fichier


Args(0).Name = "Hidden" 'nom de l'argument
Args(0).Value = True 'valeur de l'argument

'Ouverture du fichier
Set Document = _
Desktop.loadComponentFromURL(Fichier, "_blank", 0, Args())
'--------------

'Ecrit dans la cellule A1 de la feuille


Document.getSheets.getByName("Feuille1").getCellRangeByName("A1").Value = 1234

'Enregistre les modifications


Document.store
DoEvents

'--------
'Ajoute une temporisation de 2 secondes pour empêcher que le fichier
'ne se ferme avant la fin de l'enregistrement.
T = Timer + 2: Do Until Timer > T: DoEvents: Loop
'--------

'Fermeture du fichier :
Document.Close (True)

MsgBox "Opération terminée"


End Sub

Function ConvertToURL(Fichier As String)


'Fonction de conversion au format URL
Dim Cible As String

Cible = Fichier
Cible = Replace(Cible, "\", "/")
ConvertToURL = "file:///" & Cible
End Function

- 134 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les chaines de caractères


Quelles sont les fonctions disponibles pour manipuler les chaînes de caractères ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Compter le nombre de caractères dans une chaine.
Utilisez la fonction Len.

MsgBox Len("Developpez") 'renvoie 10

Extraire une portion de caractères en partant de la gauche.


Utilisez la fonction Left.

'Renvoie les 3 premiers caractères d'un texte


MsgBox Left("Developpez", 3) 'renvoie "Dev"

Extraire une portion de caractères en partant de la droite.


Utilisez la fonction Right.

'Renvoie les 3 derniers caractères d'un texte


MsgBox Right("Developpez", 3) ' renvoie "pez"

Extraire une chaîne de caractères à l'intérieur d'une autre chaîne.


Utilisez la fonction Mid.

'5 est la position du caractère qui marque le début de la partie à extraire


'et 2 correspond au nombre de caractères à renvoyer)
MsgBox Mid("Vendredi", 5, 2) ' renvoie "re"

Si vous souhaitez récupérer toute la chaîne à partir du 5eme caractère, n'indiquez pas le dernier argument.

MsgBox Mid("Vendredi", 5) 'Renvoie "redi"

Renvoyer la position d'une chaîne dans une autre chaîne.


Utilisez la fonction InStr.
Remarque : cette fonction renvoie 0 si aucune occurrence n'est trouvée.

'Renvoie la position de la première occurrence d'une chaîne ("e")


MsgBox InStr("Developpez", "e") 'renvoie 2

Les arguments de la fonction : InStr(start, string1, string2, compare)


Le premier argument "start" (facultatif) permet de définir la position de départ de la recherche.

MsgBox InStr(1, "Developpez", "e") 'renvoie 2

Un autre exemple :

- 135 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim x As Integer
x = InStr(1, "Developpez", "e") + 1
MsgBox InStr(x, "Developpez", "e") 'renvoie 4

string1 contient la chaîne de caractères qui va être contrôlée.


String2 contient la chaîne à rechercher.
La recherche est sensible à la casse si le dernier argument « compare » (facultatif) est égal à 0, ou omis.
(Casse: signifie que la recherche n'est pas sensible aux majuscules et aux minuscules)

MsgBox InStr(1, "Developpez", "Z", 0) 'renvoie 0


MsgBox InStr(1, "Developpez", "z", 0) 'renvoie 10

La recherche n'est pas sensible à la casse si le dernier argument « compare » est égal à 1.

MsgBox InStr(1, "Developpez", "z", 1) 'renvoie 10


MsgBox InStr(1, "Developpez", "Z", 1) 'renvoie 10

Nota :
La fonction Instr peut aussi servir à contrôler si le contenu d'une chaîne est égal à un des mots « cible »
défini dans la procédure.
Cet exemple vérifie si le contenu de la cellule A1 est égal à un des 3 mots indiqué dans la variable « Cible ».
(Ne fonctionne pas si la cellule A1 est vide).

Vba
Sub RechercheMultiple
Dim Cible As String, strCellule As String
Dim Feuille As Object

Feuille = ThisComponent.getSheets.getByName("Feuille1")
'Récupère le contenu de la cellule A1
strCellule = Feuille.getCellRangeByName("A1").getString

Cible = "engrenage,reducteur,courroie"

If InStr(Cible, strCellule) = 0 Then


MsgBox "Non"
Else
MsgBox "Oui"
End If
End Sub

Remplacer des caractères dans une chaîne.

'mimi est transformé en fifi


MsgBox Join(Split("mimi", "m"), "f")

Passer l'ensemble d'une chaîne en majuscule.


Utilisez la fonction UCase.

MsgBox UCase("Developpez")

Passer l'ensemble d'une chaîne en minuscule.


Utilisez la fonction LCase

- 136 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

MsgBox LCase("Developpez")

Extraire un nombre placé au début d'une chaîne de caractère.


Utilisez la fonction Val.

Dim Chaine As String


Chaine = " 21ieme siècle"
MsgBox Val(Chaine) ' renvoie 21

Chaine = " siècle 21"


MsgBox Val(Chaine) ' renvoie 0

Chaine = "123,456"
MsgBox Val(Chaine) ' renvoie 123456

Chaine = "123.456"
MsgBox Val(Chaine) ' renvoie 123,456

Supprimer tous les espaces à gauche et à droite d'une chaîne de caractères.


Utilisez la fonction Trim.

MsgBox Trim(" Un essai ")

Utilisez la fonction LTrim pour supprimer tous les espaces à gauche d'une chaîne de caractères.
Utilisez la fonction RTrim pour supprimer tous les espaces à droite d'une chaîne de caractères.
Créer une jonction entre les chaînes contenues dans un tableau.
Utilisez la fonction Join.
Join (Text As String Array, delimiter)
Text As String Array est le tableau à une dimension contenant les chaînes à joindre.
Delimiter (facultatif) spécifie le séparateur à utiliser entre les éléments du tableau, lors de la jonction. Les
éléments sont séparés par un espace si l'argument Delimiter n'est pas spécifié.

Dim Tableau(2) As String

Tableau(0) = "Chaine01"
Tableau(1) = "Chaine02"
Tableau(2) = "Chaine03"

'Regroupe les chaînes du tableau, séparés par un point-virgule ";"


MsgBox Join(Tableau, ";")

'Regroupe les chaînes du tableau sans séparateur


MsgBox Join(Tableau, "")

'Les éléments sont séparés par un espace si l'argument Delimiter n'est


'pas spécifié.
MsgBox Join(Tableau)

'Regroupe les chaînes du tableau et ajout d'un saut de ligne


'entre chaque élément.

- 137 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

MsgBox Join(Tableau, Chr(10))

Comment extraire les données séparées par un espace dans une chaine de caractères ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub ExtraireChaine
Dim Tableau() As String
Dim i As Integer

'La fonction Split permet d'extraire les données d'une chaine en fonction
'du séparateur spécifié. (Espace dans l'exemple)
Tableau = Split("Ma Chaine de caractères", " ")

'Boucle dans le tableau pour visualiser le résultat


For i = LBound(Tableau) To UBound(Tableau)
MsgBox Tableau(i)
Next i
End Sub

Comment extraire les données numériques dans une chaîne alphanumérique ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les deux exemples proposés extraient (de la cellule A1) les données numériques contenues dans une
chaîne alphanumérique.
Une première possibilité :
La procédure fonctionne même si les sous chaînes alphas et numériques sont accolées.

Sub extraireValeursNumeriquesCellule_V01()
Dim i As Integer
Dim Cible As String
Dim Nombre As Double

'Définit la cellule A1 dans la 1ere feuille du classeur


Cible = ThisComponent.Sheets(0).getCellRangeByName("A1").String

'Pour que fonction Val puisse reconnaitre les décimales


Cible = Join(Split( Cible , ","), ".")
'Pour gérer deux nombres qui se suivent
Cible = Join(Split( Cible , " "), "x")

For i = 1 To Len(Cible)
If IsNumeric( Mid( Cible, i, 1) ) Then
Nombre = Val( Mid( Cible, i, Len( Cible ) - i + 1 ) )
MsgBox Nombre

i = i + Len( Str(Nombre) ) - 1
End If
Next
End Sub

Une deuxième possibilité :


Cette version est utilisable uniquement si chaque donnée numérique est séparée par un espace.

Sub extraireValeursNumeriquesCellule_V02()
'Cette version est utilisable uniquement si chaque élément de la chaine est

- 138 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'séparé par un espace.


Dim Tableau() As Variant
Dim i As Integer
Dim Cible As String

'Définit la cellule A1 dans la 1ere feuille du classeur


Cible = ThisComponent.Sheets(0).getCellRangeByName("A1").String

Tableau = Split( Cible , " ")

'Boucle dans le tableau pour visualiser le résultat


For i = LBound(Tableau) To UBound(Tableau)
'Vérifie si l'élément du tableau est une valeur numériqe
If IsNumeric(Tableau(i)) Then MsgBox Tableau(i)
Next i

End Sub

Comment scinder les phrases longues sans couper les mots ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cette fonction permet d'appliquer un retour à la ligne dans une chaîne, tous les 30 caractères, sans couper
les mots.

Sub Test
MsgBox ScinderChaine
("Le club Developpez.com est le principal site d'entraide des développeurs francophones avec jusqu'à 70 000 " &
_

"visites par jour. Le club est fréquenté par 800 000 développeurs (développeurs, chefs de projets, DBA,...) to
_

" vous apporte gratuitement une multitude d'avantages : newsletter, magazine, actualités, cours, tutoriels, ar
_

"comparatifs, débats, sondages, outils, sources, composants et exemples de codes, les BLOGs des développeurs,
_

"développeurs. Le club est animé bénévolement par tous les membres du club et en particulier par l'équipe de r
_
"L'inscription est facile, rapide et gratuite : Inscrivez-vous." , 30 )
End Sub

Function ScinderChaine( DonneesDeBase As String , NbCar As Integer )


Dim Cible As String
Dim Resultat As String , Chaine As String
Dim i As Integer , X As Integer

Cible = DonneesDeBase

For i = 1 To Len(Cible)
X = InStr( NbCar , Cible, " " )

If X = 0 Then
Chaine = Cible
Resultat = Resultat & Chaine
Exit For
End If

Chaine = Mid(Cible, 1, X)
Resultat = Resultat & Chaine & Chr(10)

- 139 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Cible = Mid( Cible, Len(Chaine) + 1 )


Next

ScinderChaine = Resultat
End Function

Comment utiliser la fonction Switch afin de renvoyer une donnée associée à une expression ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Switch permet d'évaluer l'expression transférée dans la fonction, puis de renvoyer la donnée associée.
Une erreur d'exécution se produit si l'expression n'est pas trouvée.

Sub ExempleSwitch
'Attention la procédure est sensible aux majuscules et minuscules
MsgBox Correspondance( "Jour" )
End Sub

Function Correspondance (sName As String) As String


On Error GoTo Fin
Correspondance = Switch(sName = "Jour", "riri" , sName = "Nuit", "fifi" ,
sName = "Astreinte", "loulou")
Exit Function

Fin:
Correspondance = "Indéterminé"
End Function

- 140 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > L'interaction avec d'autres applications


Comment créer un mail par macro ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub EnvoiMail
Dim Fichier1 As String , Fichier2 As String
Dim oSystemMail As Object
Dim oMailClient As Object
Dim oMailMessage As Object
Dim lgMailClientFlags As Long

lgMailClientFlags = com.sun.star.system.SimpleMailClientFlags.NO_USER_INTERFACE

'Définit les pièces jointe


Fichier1 = ConvertToURL( "C:\Fichier test.ods" )
Fichier2 = ConvertToURL( "C:\Documents and Settings\mimi\dossier\Rapport.odt" )

oSystemMail = createUnoService( "com.sun.star.system.SimpleSystemMail" )


oMailClient = oSystemMail.querySimpleMailClient()
oMailMessage = oMailClient.createSimpleMailMessage()

With oMailMessage
'Destinataire
'Nota1:
'Solution non trouvée pour définir plusieurs destinataires dans ce champ
.setRecipient( "destinataire1@mail.fr" )
'En copie conforme
.setCcRecipient( Array("destinataire2@mail.fr" , "destinataire3@mail.fr") )
'Le sujet
.setSubject( "Rapport mensuel " & Date )
'Les fichiers attachés
.setAttachement( Array( Fichier1 , Fichier2 ) )
End With

'Nota2:
'Solution non trouvée pour ajouter du texte dans le corps du message.

oMailClient.sendSimpleMailMessage( oMailMessage, lgMailClientFlags )

End Sub

Un autre exemple qui permet d'intégrer du texte dans le corps du message, mais sans pièce jointe :

Sub CreerMail_SystemShellExecute()
Dim oShell As Object

oShell = createUnoService("com.sun.star.system.SystemShellExecute")

'
permet d'insérer un saut de ligne dans le corps du message.
oShell.Execute("mailto:destinataire@mail.fr" & _
"?subject=test envoi mail" & _
"&Body=Bonjour,
Je vous confirme notre rendez-vous de la semaine prochaine.

Cordialement" & _
"
" & Environ("username") , "", 0)
End Sub

Utilisez cette syntaxe pour définir des multi destinataires:

- 141 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

mailto:dest1@mail.fr;dest2@mail.fr

Comment envoyer un mail en pilotant Outlook ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub EnvoiMail_Outlook( )
Dim oObj As Object , AppOutlook As Object
Dim oMail As Object

oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")
AppOutlook = oObj.createInstance("Outlook.Application")

oMail = AppOutlook.CreateItem(0)

With oMail
.To = "destinataire@mail.fr"
.Subject = "Rapport mensuel " & Date
.Body = "Bonjour," & Chr(10) & _
"Je vous souhaite une bonne lecture." & Chr(10) & Chr(10) & _
"Cordialement" & Chr(10) & _
Environ("username") & Chr(10) & Chr(10)
.Attachments.Add("C:\Fichier test.ods")
.send
End With

End Sub

Comment ouvrir une autre application ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Ces deux exemples montrent comment lancer des application externes.

Sub AfficheCalculatriceWindows
Dim RetVal As Long

'RetVal = Shell("C:\windows\System32\calc.exe" , 1 )
RetVal = Shell("calc.exe" , 1 )
End Sub

Sub OuvrirAutreApplication
Dim RetVal As Long
Dim Cible As String

Cible = "C:\Program Files\Paint Shop Pro\Psp.exe"


RetVal = Shell( Cible , 1 )
End Sub

La procédure suivante ouvre un fichier dans l'application définie par défaut (utilisation de
SystemShellExecute).

Sub OuvrirFichier()
Dim oShell As Object
Dim Fichier As String

- 142 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Fichier ="C:\Documents and Settings\mimi\dossier\fourmiz.JPG"


'Fichier ="C:\windows\system32\BuzzingBee.wav"
oShell = createUnoService("com.sun.star.system.SystemShellExecute")

oShell.execute(ConvertToUrl( Fichier ), "", 0)

End Sub

Pour ouvrir une page html dans FireFox, utilisez :

Sub OuvrirPageHtml_FF
Dim RetVal As Long

'10 : Affichage en plein écran


RetVal = Shell("C:\Program Files\Mozilla Firefox\FireFox.exe" _
, 10 , "http://www.developpez.com")

End Sub

Comment piloter l'application Internet Explorer et son contenu ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Cet exemple permet d'ouvrir une page html dans Internet Explorer puis d'en extraire les métas informations :

Sub metaInformations_PageHtml_IE( )
Dim oObj As Object
Dim IE As Object

oObj = createUnoService( "com.sun.star.bridge.OleObjectFactory")

IE = oObj.createInstance("InternetExplorer.Application.1")

'Indiquez False pour masquer la fenêtre Internet Explorer pendant l'opération


IE.Visible = True
IE.Navigate("http://www.developpez.com/")

'Attend la fin du chargement de la page avant de poursuivre la procédure


Do Until IE.ReadyState = 4
Wait(50)
Loop

MaPageHtml = IE.Document
'Récupère le titre de la page
MsgBox MaPageHtml.Title

'Boucle sur les méta données de la page


For i = 0 To MaPageHtml.all.tags("meta").Length - 1
htmlRef = MaPageHtml.all.tags("meta").Item(i)
MsgBox htmlRef.content
Next i

'Referme la fenêtre Internet Explorer


IE.Quit

- 143 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment remplir les champs d'une page html puis déclencher un bouton ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RemplissageChamps_PageHtml_IE( )
Dim oObj As Object
Dim IE As Object
Dim MaPageHtml As Object , Helem As Object

oObj = createUnoService( "com.sun.star.bridge.OleObjectFactory")

IE = oObj.createInstance("InternetExplorer.Application.1")

'Indiquez False pour masquer la fenêtre Internet Explorer pendant l'opération


IE.Visible = True
IE.Navigate("http://www.MonSiteWeb.fr/")

'Attend la fin du chargement de la page avant de poursuivre la procédure


Do Until IE.ReadyState = 4
Wait(100)
Loop

MaPageHtml = IE.Document
'A adapter en fonction du type d'objets à manipuler dans la page html
Helem = MaPageHtml.getElementsByTagName("input")

'--- Adaptez le nom des objets contenus dans la page html ---
'remplissage champs
Helem.Item("Profil").InnerText = "NomUtilisateur"
Helem.Item("PassWord").InnerText = "MotDePasse"

'Déclenchement bouton de connection


Helem.Item("NomBouton").Click
'------------------------------------------------------------

End Sub

Comment récupérer la source et le contenu texte d'une page html ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Si Internet Explorer est installé sur le poste, vous pouvez utiliser cette procédure qui récupère la source,
ainsi que le contenu texte de la page html.

Sub Informations_PageHtml_IE( )
Dim oObj As Object
Dim IE As Object

oObj = createUnoService( "com.sun.star.bridge.OleObjectFactory")

IE = oObj.createInstance("InternetExplorer.Application.1")
IE.Visible = True
IE.Navigate("http://www.developpez.com")

'Attend la fin du chargement


Do Until IE.ReadyState = 4
Wait(50)
Loop

- 144 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

MaPageHtml = IE.Document
MsgBox MaPageHtml.Body.innerHTML
MsgBox MaPageHtml.Body.innerText

IE.Quit
End Sub

Cette autre possibilité ne nécessite pas Internet Explorer. La source de la page html s'affiche dans un
classeur :

Sub RecupererSourcePageHtml
'Source: linuxtalk
Dim oDoc As Object
Dim Cible As String
Dim Args(1) As New com.sun.star.beans.PropertyValue

Cible = "http://www.developpez.com"

Args(0).Name = "FilterOptions"
Args(0).Value = "44"
Args(1).Name = "FilterName"
Args(1).Value = "Text - txt - csv (StarCalc)"

oDoc = starDeskTop.loadComponentFromURL( Cible , "_blank" , 0 , Args )


End Sub

Comment récupérer des informations sur l'environnement du


système d'exploitation : utilisation de la fonction Environ ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub Infos_Environnement

MsgBox Environ("USERNAME")

MsgBox Environ("PROCESSOR_IDENTIFIER")

'--- Liste des variables d'environnement ---


'ALLUSERSPROFILE
'APPDATA
'CLIENTNAME
'CommonProgramFiles
'COMPUTERNAME
'ComSpec
'FP_NO_HOST_CHECK
'HOMEDRIVE
'HOMEPATH
'LOGONSERVER
'NUMBER_OF_PROCESSORS
'OS
'Path
'PATHEXT
'PROCESSOR_ARCHITECTURE
'PROCESSOR_IDENTIFIER
'PROCESSOR_LEVEL
'PROCESSOR_REVISION
'ProgramFiles
'SESSIONNAME
'SystemDrive
'SystemRoot

- 145 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

'TEMP
'TMP
'USERDOMAIN
'USERNAME
'USERPROFILE
'windir

'Nota:
'Les variables d'environnement dépendent du système d'exploitation utilisé.
End Sub

Comment récupérer la version d'une application ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub versionApplication()
Dim Fso As Object
Dim Appli As String

Appli = "C:\Program Files\Mozilla Firefox\firefox.exe"

oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")
Fso = oObj.createInstance("Scripting.FileSystemObject")

If Fso.FileExists(Appli) Then
MsgBox Fso.GetBaseName(Appli) & " " & Fso.getFileVersion( Appli )
Else
MsgBox "le chemin spécifié n'existe pas:" & Chr(10) & "'" & Appli & "'"
End If

End Sub

Comment retrouver la lettre du lecteur de CD et vérifier si le disque est prêt ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La macro teste l'existence des disques sur le PC (lettres C à J), renvoie un message si un lecteur de CD
est trouvé et indique si le lecteur est prêt pour utilisation.

Sub LettreLecteurCD()
Dim oObj As Object
Dim Fso As Object
Dim Drv As Integer

oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")
Fso = oObj.createInstance("Scripting.FileSystemObject")

'Teste les lecteurs C à J


For Drv = 67 To 74
If FSO.DriveExists( CHR(Drv) ) Then
If FSO.Drives.Item( CHR(Drv) ).DriveType = 4 Then
MsgBox "Lecteur: " & CHR(Drv)
If FSO.Drives.Item( CHR(Drv) ).IsReady Then
MsgBox "Disque pret."
Else
MsgBox "Disque pas pret."
End If
End If
End If
Next

- 146 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Comment lire un fichier wave par macro ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Declare Function sndPlaySound32 Lib "winmm.dll" Alias _


"sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Sub LireFichier_Wav
sndPlaySound32 "C:\windows\system32\BuzzingBee.wav", 1
End Sub

Et pour arrêter la lecture en cours :

Sub ArreterLecture_Wav
sndPlaySound32 0 , 0
End Sub

- 147 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > L'interaction avec d'autres applications > Les fichiers
texte
Comment écrire dans un fichier texte en utilisant l'instruction Output ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Si le fichier .txt existe déjà, les anciennes données seront écrasées.
Si le fichier n'existe pas, il sera créé automatiquement.

Sub EcrireDansFichierTexte_OutPut
Dim Fichier As String

Fichier = "C:\NomFichier.Txt"

Open Fichier For Output As #1


Print #1, "Test 1ere ligne"
Print #1, "Test 2eme ligne"
Close #1
End Sub

Comment écrire dans un fichier texte en utilisant l'instruction Append ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les données viennent s'inscrire à la suite des lignes existantes.
Si le fichier .txt n'existe pas, il sera créé automatiquement.

Sub EcrireDansFichierTexte_Append
Dim Cible As Integer
Dim Fichier As String

Fichier = "C:\NomFichier.Txt"

Cible = freeFile
Open Fichier For Append As #Cible
Print #Cible, "Mon texte dans le fichier"
Close #Cible
End Sub

Comment lire le contenu d'un fichier texte en utilisant l'instruction Input ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La procédure suivante permet de boucler sur toutes les lignes du fichier texte.

Sub LireFichierTexte_Input
Dim Ligne As String
Dim Fichier As String

Fichier = "C:\NomFichier.Txt"

Open Fichier For Input As #1

'--- Boucle sur les lignes du fichier


Do While Not EOF(1)
Line Input #1, Ligne

- 148 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Msgbox Ligne
Loop

Close #1
End Sub

Comment imprimer le contenu d'un fichier texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Shell "notepad.exe /P""C:\NomFichier.Txt""", 1

Comment supprimer une ou plusieurs lignes dans un fichier texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La macro supprime les lignes 1, 3 et 10 dans le fichier texte :

Sub SupprimerQuelquesLignes
Dim Fichier As String
Dim Collect As New Collection
Dim F As Integer, i As Integer
Dim Ligne As String

Fichier = "C:\NomFichier.Txt"

F = FreeFile
'Lecture du fichier : ajoute chaque ligne dans la collection
Open Fichier For Input As #F
While Not EOF(F)
Line Input #F, Ligne
Collect.Add Ligne
Wend
Close #F

'Suppression des lignes 1, 3 et 10 dans la collection


Collect.Remove 10
Collect.Remove 3
Collect.Remove 1

'Réécriture du fichier txt sans les données supprimées


Open Fichier For Output As #F
For i = 1 To Collect.Count
Print #F, Collect(i)
Next
Close #F

Collect = Nothing
End Sub

Comment supprimer les lignes en doublon dans un fichier texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub SupprimerLignesDoublons
Dim Fichier As String
Dim Collect As New Collection

- 149 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim F As Integer, i As Integer


Dim Ligne As String

Fichier = "C:\NomFichier.Txt"

F = FreeFile

On Error Resume Next

'Lecture du fichier
Open Fichier For Input As #F
While Not EOF(F)
Line Input #F, Ligne
'Le 2eme argument, key = Cstr(Ligne), est unique et permet donc de filtrer les doublons
'dans la collection.
Collect.Add Ligne , Cstr(Ligne)
Wend
Close #F

On Error GoTo 0

'Réécriture du fichier txt sans les doublons


Open Fichier For Output As #F
For i = 1 To Collect.Count
Print #F, Collect(i)
Next
Close #F

Collect = Nothing
End Sub

Comment compter le nombre de lignes dans un fichier texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub nombreLignesFichierTexte_V01()
Dim strLigne As String
Dim nbLignes As Long
Dim Fichier As String

Fichier = "C:\NomFichier.Txt"

Open Fichier For Input As #1


Do While Not EOF(1)
Line Input #1, strLigne
nbLignes = nbLignes + 1
Loop
Close #1

MsgBox "Nombre de lignes : " & nbLignes


End Sub

Une deuxième possibilité :

Sub nombreLignesFichierTexte_V02()
Dim oObj As Object , Fso As Object , oFile As Object
Dim Fichier As String

Const ForReading = 1
Fichier = "C:\NomFichier.Txt"

oObj = createUnoService("com.sun.star.bridge.OleObjectFactory")

- 150 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Fso = oObj.createInstance("Scripting.FileSystemObject")
oFile = Fso.OpenTextFile( Fichier , ForReading )

oFile.ReadAll
MsgBox "Nombre de lignes : " & oFile.Line
oFile.Close
End Sub

Comment remplacer des chaînes de caractères dans un fichier texte ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale

Sub RemplacerChaine_Dans_FichierTexte
Dim Chaine As String , Cible As String
Dim Fichier2 As String , Fichier1 As String
Dim Ancien As String , Nouveau As String

Ancien = "42"
Nouveau = "29"

'Le fichier original


Fichier1 = "C:\NomFichier.txt"
'Le nouveau fichier qui va être créé
Fichier2 = "C:\NomFichierModifié.txt"

Open Fichier1 For Input As #1


Open Fichier2 For Append As #2
'Boucle sur toutes les lignes du fichier texte
Do While Not EOF(1)
Line Input #1, Chaine
'Remplace les caractères dans la chaine
Cible = Join(Split(Chaine , Ancien), Nouveau)
'Ecrit le résultat dans un nouveau fichier texte
Print #2, Cible
Loop
'Fermeture des fichiers
Close #1
Close #2

'Suppression Fichier d'origine


'Kill Fichier1

MsgBox "Terminé."
End Sub

- 151 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Sommaire > Programmation OBasic > Les variables


À quoi servent les variables et comment les utiliser ?
Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les variables servent à stocker et manipuler des informations dans une macro.
Une variable possède :

• un nom qui permet d'accéder aux données qu'elle contient : « maVariable » ;


• un type de données : par exemple, String et Integer dans les procédures ci-dessous.

La macro affecte une chaîne de caractères (Bonjour !) dans une variable (maVariable), puis l'affiche dans
un MsgBox :

Sub afficherMessage
Dim maVariable As String

maVariable = "Bonjour !"


MsgBox maVariable
End Sub

Les données peuvent être modifiées pendant l'exécution de la macro.


Un exemple pour affecter une valeur numérique à une variable, l'afficher dans un MsgBox, ajouter 20 à la
valeur de cette variable, puis afficher le nouveau résultat :

Sub afficherValeur()
Dim maVariable As Integer

maVariable = 10
MsgBox maVariable

maVariable = maVariable + 20
MsgBox maVariable
End Sub

Evitez de nommer les variables en utilisant des mots clés ou instructions/fonctions réservés par
l'application (par exemple Val, Left...).
Le nom des variables doit commencer par un caractère alphabétique et ne pas excéder 255 caractères.
Les noms ne doivent pas contenir de caractères spéciaux.
Le caractère underscore _ est accepté. Essayez de donner des noms les plus explicites possibles afin de
faciliter la relecture de votre programme.
Le type de données doit être défini en fonction de la valeur prise par la variable. Une variable définie de
façon incorrecte pour un contexte particulier, peut générer un message d'erreur. Chaque type de donnée
utilise un espace mémoire. Il est donc important de définir le bon type de données pour libérer de l'espace
mémoire et ne pas ralentir inutilement le traitement de la macro.
Toutes les variables sont converties en type Variant si aucun autre type de données n'est explicitement
déclaré.
En cas de déclaration de plusieurs variables avec le même Dim, vous devez préciser le type de donnée
pour chaque variable.
Par exemple, si pour définir trois variables de type String (strVar1, strVar2 et strVar3) vous écrivez :
Dim strVar1 , strVar2 , strVar3 As String
Dans ce cas strVar1 et strVar2 seront de type Variant.
Pour y remédier et obtenir trois variables String, Il faut écrire :

- 152 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Dim strVar1 As String , strVar2 As String , strVar3 As String

Quels sont les types de variables disponibles dans AOO/LibO ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Le type de données doit être défini en fonction de la valeur prise par la variable.
Boolean :
Données pouvant prendre exclusivement les valeurs logiques True et False.
Les variables Boolean sont stockées sous la forme de nombres codés sur 16 bits .
Integer :
Données contenant des nombres entiers, de 16 bits, compris entre -32 768 et 32 767.
Le signe % est le caractère de déclaration du type Integer.
Remarque :
Si vous écrivez « Dim X As Integer », alors que la donnée est décimale (par exemple X=5.9), la valeur
renvoyée sera égale à 6. La valeur de la variable est arrondie à l'entier le plus proche.
Long :
Nombre entier de 32 bits dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647.
Le signe et commercial (&) est le caractère de déclaration du type Long.
Si vous lui affectez un nombre décimal, la valeur de la variable est arrondie à l'entier le plus proche.
Currency :
Données de 64 bits dont la plage de valeurs s'étend de -922 337 203 685 477,5808 à 922 337 203 685 477,5807.
Le signe @ est le caractère de déclaration du type Currency.
Ce type de donnée est utilisé dans les calculs monétaires ou dans les calculs à virgule fixe pour lesquels
une grande précision est requise.
Single :
Type de donnée, sur 32 bits, qui regroupe des variables à virgule flottante en simple précision sous forme
de nombres à virgule flottante, dont la valeur est comprise entre -3,402823E38 et -1,401298E-45 pour les
valeurs négatives, et entre 1,401298E-45 et 3,402823E38 pour les valeurs positives.
Le point d'exclamation (!) est le caractère de déclaration du type Single.
Double :
Type de donnée, sur 64 bits, stockant les nombres à virgule flottante en double précision
compris entre -1,79769313486231E308 et -4,94065645841247E-324 pour les valeurs négatives, et entre
4,94065645841247E-324 et 1,79769313486232E308 pour les valeurs positives.
Le signe dièse (#) est le caractère de déclaration du type Double.
Date :
Type de données, sur 64 bits, utilisé pour stocker les dates et les heures.
String :
Type de données,sur 64 bits, utilisé pour stocker des chaînes de caractères.
Une donnée de type String peut inclure lettres, nombres, espaces et signes de ponctuation.
Le signe dollar ($) est le caractère de déclaration du type String.
Variant :
Peut contenir tous les types de données.
Toutes les variables sont converties en type Variant si aucun autre type de données n'est explicitement
déclaré.
Object :
Type de données représentant toute référence Objet.

- 153 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Que signifie l'instruction Option Explicit ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'instruction Option Explicit est utilisée pour imposer la déclaration explicite de toutes les variables dans
un module. Cette instruction doit apparaître en tête de module, avant toute procédure.
L'instruction Option Explicit permet d'identifier une variable non déclarée ou mal orthographiée (une erreur
se produit).

Comment est définie la portée des variables ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les variables locales :
Une variable déclarée à l'intérieur d'une procédure (Sub ou Function) ne sera valide qu'à l'intérieur de celle-
ci et uniquement jusqu'à sa fermeture.
Les variables publiques :
Dans certains cas, une variable doit rester valide pour toutes les procédures, tous les modules de toutes
les bibliothèques, ou après la fermeture d'une procédure ou d'une fonction. La déclaration des variables
doit alors se faire en tête de module et en dehors des procédures Sub ou Function :
GLOBAL VarName As TYPENAME
La variable est valide tant que la session OpenOffice.org est ouverte.
PUBLIC VarName As TYPENAME
La variable est valide dans tous les modules.
PRIVATE VarName As TYPENAME
La variable est valide dans ce module.
DIM VarName As TYPENAME
La variable est valide dans ce module.

À quoi sert l'instruction Const ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
L'instruction Const permet de déclarer les constantes.
Une constante est un élément nommé conservant une valeur (chaîne, donnée numérique...) identique
pendant toute l'exécution d'un programme.
Les constantes peuvent remplacer des valeurs réelles partout dans votre code.
Il y a plusieurs avantages à utiliser une constante :
Si la donnée doit être modifiée dans une macro complexe, vous n'avez plus besoin de parcourir toute la
procédure pour la retrouver : il suffit de modifier la constante qui est généralement placée en début de
macro ou en tête du module. Vous évitez ainsi les recherches fastidieuses et les erreurs de saisie.
Les constantes permettent aussi d'améliorer la lisibilité des macros.

Sub Test_Utilisation_Constantes
Const LaValeur As Integer = 100
Const LeTexte As String = "essai"

MsgBox LeTexte & " " & LaValeur * 2


End Sub

- 154 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Quelles sont les fonctions de conversion des types de données ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Ces fonctions convertissent une expression en un type de données spécifié. Elles sont particulièrement
intéressantes pour réadapter un format, par exemple suite à un transfert de données brutes que vous
souhaitez utiliser en type Date, numérique...

Fonction Type renvoyé Type de conversion


CBool Boolean Convertit une comparaison de
chaînes de caractères ou une
comparaison numérique en
expression logique,
ou bien une expression
numérique en expression
logique.
CByte Byte Convertit une chaîne de
caractères ou une expression
numérique en type Byte.
CCur Currency Convertit une expression de
chaîne ou une expression
numérique en expression
monétaire.
CDate Date Convertit une expression au
format chaîne de caractères
ou numérique en valeur de
date.
CDbl Double Convertit une expression au
format chaîne de caractères
ou numérique en valeur de
type Double.
CDec Decimal Convertit une expression de
chaîne ou une expression
numérique en expression
décimale.
CInt Integer Convertit une expression au
format chaîne de caractères
ou numérique en nombre
entier.
CLng Long Convertit une expression au
format chaîne de caractères
ou numérique en nombre
entier long.
CSng Single Convertit une expression au
format chaîne de caractères

- 155 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

ou numérique en valeur de
type Single (simple).
CStr String Convertit une expression
numérique en expression au
format chaîne de caractères.
CVar Variant Convertit une expression de
chaîne ou une expression
numérique en expression de
type variant.

Un exemple qui transforme une chaîne de caractères (String) en type Integer pour l'utilisation dans un
calcul.

Sub Main
Dim x as String

x = "1234"
MsgBox CInt(x) * 2
End Sub

Comment tester la présence d'un argument optionnel dans une fonction ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Les arguments Optional (optionnels) permettent de définir les paramètres transmis à une fonction comme
facultatifs.
Ces arguments doivent être placés en dernière position dans la liste des paramètres.
Il est parfois utile de vérifier la présence de ces arguments optionnels pour éviter les erreurs dans la
procédure : dans ce cas, utilisez la fonction IsMissing pour déterminer si des arguments facultatifs ont
été fournis lors de l'appel de la procédure. La fonction renvoie True si aucune valeur correspondant à
l'argument spécifié n'a été passée, sinon elle renvoie la valeur False.
Nota :
Lorsque vous utilisez la fonction IsMissing, il est préférable que les arguments Optional soient déclarés
en type Variant.

Sub Test
maFonction( "OOo" )
maFonction( "OOo" , 50 )
maFonction( "OOo" , 50 , 100 )
maFonction( "OOo" , , 100 )
End Sub

Function maFonction( Arg1 As String , Optional Arg2 As Variant , Optional Arg3 As Variant ) As
Long
MsgBox "Arguments manquants: " & IsMissing( Arg2 ) & " - " & IsMissing( Arg3 )
End Function

- 156 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

Comment déterminer si une variable contient une valeur Null ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
La fonction IsNull permet d'effectuer cette vérification en renvoyant la valeur True si la variable testée
(Variant ou Object) est de type Null, et la valeur False dans le cas contraire.

Sub Test_IsNull
Dim vVar As Variant
Dim oVar As Object

'--- test variable Variant


MsgBox IsNull( vVar ) 'False
vVar = ""
MsgBox IsNull( vVar ) 'False
vVar = "x"
MsgBox IsNull( vVar ) 'False
vVar = Null
MsgBox IsNull( vVar ) 'True

'--- test variable Object


MsgBox IsNull( oVar ) 'True
oVar = ThisComponent
MsgBox IsNull( oVar ) 'False
oVar = Nothing
MsgBox IsNull( oVar ) 'True

End Sub

Comment vérifier si une variable type Variant a été initialisée ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous pouvez utiliser la fonction IsEmpty.
La fonction renvoie la valeur True si la variable contient la valeur Empty, et la valeur False dans le cas
contraire.
IsEmpty fonctionne uniquement pour les variables de type Variant.

Sub Test_IsEmpty
Dim vVar As Variant

'--- test variable Variant


MsgBox IsEmpty( vVar ) 'True

vVar = "x"
MsgBox IsEmpty( vVar ) 'False

vVar = ""
MsgBox IsEmpty( vVar ) 'False

vVar = Null
MsgBox IsEmpty( vVar ) 'False

vVar = Empty
MsgBox IsEmpty( vVar ) 'True

- 157 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.
FAQ OpenOffice et LibreOffice

End Sub

Null est différent d'Empty, qui indique qu'une variable n'a pas encore été initialisée.

Comment retrouver le type de donnée contenu dans une variable Variant ?


Auteurs : Atlantis - Michaël - Silkyroad - Vincent Viale
Vous pouvez utiliser la fonction TypeName pour récupérer le type d'information contenu dans la variable :

Sub Exemple_TypeName
Dim Cible As Variant

Msgbox TypeName( Cible ) 'Empty

Cible = ThisComponent
Msgbox TypeName( Cible ) 'Object

Cible = "mimi"
Msgbox TypeName( Cible ) 'String

Cible = 10
Msgbox TypeName( Cible ) 'Integer

Cible = True
Msgbox TypeName( Cible ) 'Boolean

Cible = 99999999
Msgbox TypeName( Cible ) 'Double

Cible = CDate( "26/05/2006" )


Msgbox TypeName( Cible ) 'Date

Cible = 10
Msgbox TypeName( Cible ) 'Integer

Cible = Null
Msgbox TypeName( Cible ) 'Null
End Sub

- 158 -
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2013 Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Cette
page est déposée à la SACD.

Vous aimerez peut-être aussi