Cet article s'intéresse à la mise en place de groupes de cases d'options de contrôle de formulaire et une programmation associée en VBA. 

 

Rappelons qu'il est possible de placer les cases d'options de deux manières :

- les cases d'options de contrôles de formulaire

- les cases d'options issues de la bibliothèque ActiveX.

 

La figure ci-dessous montre trois groupes de cases d'options issues des contrôles de formulaire. La mise en place de ces options nécessitent l'utilisation d'une zone de groupe par groupe d'options. Il y a donc ici 3 zones de groupes.


options1.jpg

 

Pour mettre en place un groupe d'options : 

1. Insérez d'abord un objet zone de groupe dans la feuille

2. Renommez la zone

3. Sélectionnez la zone par le bouton droit de la souris et insérez les cases d'options

4. Sélectionnez la première case d'option, cliquez droit, puis choisissez Format de contrôle.

5. Sélectionnez l'onglet "Contrôle" puis définissez une cellule liée.

Vous constaterez que cette cellule liée sera la même pour toutes les autres cases d'options de la zone de groupe.


options2.jpg

 

Il y aura donc autant de cellules liées que de zones de groupe. Par la suite, lorsque vous cocherez la première option, Excel mettra la valeur 1 dans la cellule liée, si vous cochez la 2ème, Excel mettra la valeur 2, etc.

 

Le code suivant VBA initialise les options en mettant la valeur 0 dans chaque cellule liée.

 

Private Sub BT_OPTIONS_INIT_Click()

'je demande une confirmation

rep = MsgBox("Confirmez la remise à blanc des options", vbDefaultButton2 + vbQuestion + vbYesNo, "ATTENTION")

If rep = vbNo Then

Exit Sub

End If

'je mets à zéro la valeur de chaque cellule liée

Range("D3").Value = 0

Range("D8").Value = 0

Range("D15").Value = 0

End Sub

 

Prochain article : les cases d'options de type Contrôle ActiveX

Cet article montre comment remettre à zéro un groupe de cases à cocher qui ont été insérées dans une feuille. 

La figure suivante montre les cases à cocher préparées dans la feuille


acocher1.jpg

 

Voici le code qui décoche toutes les cases.

 

Private Sub bt_case_decoche

'je demande une confirmation

rep = MsgBox("Confirmez la remise à blanc des cases", vbDefaultButton2 + vbQuestion + vbYesNo, "ATTENTION")

If rep = vbNo Then

Exit Sub

End If

'je récupère le nombre d'objets présents sur la feuille

Z = ActiveSheet.OLEObjects.Count

'je boucle

For i = 1 To Z

    'je récupère le nom de l'objet

           'si l'objet est une case à cocher et cochée

            If Left(ActiveSheet.OLEObjects(i).Name, 5) = "Check" Then

               'si la case est cochée

If ActiveSheet.OLEObjects(i).Object.Value = True Then

                'je décoche

                ActiveSheet.OLEObjects(i).Object.Value = False

               End If

            End If

Next


End Sub

 

Prochain article : Les cases d'options de type contrôle de formulaire

Cet article porte sur l'utilitaire XRAY. Cet utilitaire peut vous aider à visualiser et découvrir les différentes composantes d'un objet.


XRAY est un outil pour le programmeur de macros BASIC qui vous permet de consulter les différentes méthodes, propriétés, services et interfaces disponibles sur une variable objet. 

 

 

COMMENT INSTALLER LA BIBLIOTHEQUE XRAY ?

1. Vous devez d'abord télécharger le document référence du projet Openoffice qui s'appelle  XrayTool_fr.sxw à l'adresse suivante :


 http://www.openoffice.org/fr/Documentation/How-to/indexht-programmation.html 

 

2. Vous cliquez sur le bouton "Installer Xray" pour installer automatiquement la bibliothèque. cette dernière sera stockée dans la racine MesMacros.


XRAY1.jpg

 

 

Une fois la bibliothèque installée, on peut visualiser le contenu d'une variable comme dans le code ci-dessous :


Sub Main

'je récupère le contenu de la cellule B2

recup=thiscomponent.sheets.GetByName("Feuille2").GetCellRangeByName("B2")

'je regarde l'intérieur

XRAY recup

End Sub

 

 

L'image ci-dessous montre la boîte de dialogue permettant de consulter les propriétés, méthodes, services et interfaces mis en oeuvre dans le code.

 

 

XRAY2.jpg

 

 

Si vous désirez connaitre le contenu d'une propriété, mettez le pointeur sur celle-ci, par exemple AbsoluteName, puis cliquez sur le bouton "XRAY sur la propriété/Méthode. Une autre fenêtre s'ouvrira avec la valeur de la propriété.

 

XRAY3.jpg

 

 

DEMARRER LA BIBLIOTHEQUE XRAY A L'OUVERTURE D'OPENOFFICE.ORG

 

Afin d'éviter de répéter la procédure précédente, on peut demander de charger la bibliothèque dès l'ouverture de OpenOffice.

 

On utilise la commande BASICLIBRARIES.LOADLIBRARY("nom_de_la_bib")

Sub demarre_XRAY

GlobalScope.BasicLibraries.LoadLibrary("XrayTool")

End Sub

 

 

Attention : faites attention à la casse dans le nom de la bibliothèque. Le mot GlobalScope n'est pas obligatoire. On aurait pu écrire BasicLibraries.LoadLibrary("XrayTool").

 

 

Une fois la procédure écrite, affectez-là à l'événement "Démarrage de l'application" dans la fenêtre Outils / Personnaliser / Evénements / Enregistrer dans Openoffice.org

 

 

XRAY4.jpg

 

 

LE SDK


Le SDK ou Software Development Kit est la bible des programmeurs puisqu'elle contient toutes les commandes des interfaces de programmation. Il s'agit simplement de plus de 900 wiki-pages en anglais. 

 

 

L'adresse internet est : http://www.openoffice.org/api/SDK/index.html

 

 

Jetez un coup d'oeil à : 

http://wiki.services.openoffice.org/wiki/Documentation/FAQ/Macros

 

 

Voici un autre exemple de code BASIC qui utilise XRAY

 

Sub Main

DIM T(4)

T(0)=10

T(1)="BASIC"

T(2)=TRUE

T(3)=DATEVALUE("12/02/2012")

XRAY  T

End Sub

 

La figure ci-dessous montre le résultat

 

 

XRAY5.jpg

 

 

Prochain article : rechercher une information avec FINDALL

 

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html


Dans cet article, vous découvrirez le dispositif qui permet de contrôler et visualiser le contenu des variables simples mais aussi objet. On l'appelle le témoin.

 

Considérez le code suivant qui déclare une variable objet et qui prend en compte l'application en cours (ici le tableur).

 

 

Sub Main

dim mondoc as object

mondoc = thisComponent

End Sub

 

Si je cherche à visualiser l'ensemble des propriétés, méthodes et constantes de l'objet mondoc, je dois le stocker dans la fenêtre témoin placée dans le bas de l'environnement de développement, comme le montre l'image ci-dessous.

 

temoin 

 

 

 Tapez le mot ThisComponent dans la zone témoin, validez avec la touche Entrée, et enfin déroulez le code avec la touche F8 en mode pas à pas.

 

Vous constaterez l'apparition d'un petit plus (+) qui se place devant l'objet ThisComponent lorsque la flèche jaune du pas à pas se trouve au niveau de l'instruction End Sub.

Après l'avoir coché, toutes les caractéristiques de l'objet sont visibles.

 

Voici un autre exemple.

 

Le code suivant récupère le contenu de la cellule B2 de la feuille Feuille2

 

Sub Main

'je récupère le contenu de la cellule B2

recup=thiscomponent.sheets.GetByName("Feuille2").GetCellRangeByName("B2")

End Sub

 

La figure ci-dessous montre la varibale RECUP placée dans la zone Témoin.

Faites du pas à pas et constatez l'apparition de toutes les propriétés de la cellule B2.

 

temoin2-copie-1.jpg

 

Vous pouvez voir une propriété appelée AbsoluteName qui renvoie la position absolue de la cellule : "$Feuille2.$B$2". Cette propriété peut être utilisée directement dans le code comme dans l'exemple ci-dessous :


Sub Main

'je récupère le contenu de la cellule B2

recup=thiscomponent.sheets.GetByName("Feuille2").GetCellRangeByName("B2")

msgbox recup.absolutename

End Sub

 

Prochain article : Visualiser autrement les caractéristiques d'une variable objet avec la bibliothèque XRAY.

 

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

Cet article s’intéresse à la manipulation des cellules.

 

1. UN TEXTE DANS UNE CELLULE

 

Ici on place un texte dans une cellule

Sub CELLULE_TEXTE

'je place un texte dans une cellule

ThisComponent.Sheets.GetByName("GESTION").GetCellRangeByName("B1").string = "PROGRAMMEUR"

END SUB

 

 

2. UN NUMERIQUE DANS UNE CELLULE

 

 

Ici on place une valeur numérique dans une cellule

 

Sub CELLULE_NUM

'je place un texte dans une cellule

  ThisComponent.Sheets.GetByName("GESTION").GetCellRangeByName("B1").value = 100

END SUB

 

 

Ici on place une date danns une cellule

 

Sub CELLULE_DAT

'je place un texte dans une cellule

ThisComponent.Sheets.GetByName("GESTION").GetCellRangeByName("B1").value =
DATEVALUE("27/02/2012")

END SUB

 

 

 

 3. TRAVAILLER AVEC LES COORDONNEES

 

Ici on travaille avec les coordonnées (colonne, ligne) de la cellule.

A1 correspond à la coordonné (0,0)

 

Sub CELLULE_COL_LIGNE

 

 'je place des valeurs dans des cellules

 WITH ThisComponent.Sheets.GetByName("GESTION")

.GetCellByPosition(0,0).value = 1

.GetCellByPosition(0,1).value = 2

.GetCellByPosition(0,2).value = 3 

END WITH

END SUB

 

 

4. DEPLACER LE POINTEUR AVEC L'INTERFACE UNO

Dans Basic il n’existe pas de commande OFFSET de Excel. Pour effectuer le même résultat on utilise les instructions fournies automatiquement par une macro et par l’intermédiaire de l’interface UNO.

 

 

Ici on pointe sur une feuille sur la cellule A1, puis on va à la dernière ligne du tableau (la ligne 1048576) puis on remonte sur la dernière ligne d’un bloc de données et enfin on descend d’une ligne.

 

SUB CELLULE_OFFSET

 

 'j'active la feuille gestion

thiscomponent.CurrentController.ActiveSheet = _

thiscomponent.sheets.GetByName("GESTION")

 

 'je me place en A1

 'je définis le cadre de travail

document = ThisComponent.CurrentController.Frame

 

 ‘j’appelle une fonction de déplacement de l’interface UNO

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

 

 ‘je définis un tableau arg1 à une case qui va servir pour des propriétés de déplacement

dim args1(0) as new com.sun.star.beans.PropertyValue

 

 ‘je définis les propriétés

args1(0).Name = "ToPoint"

args1(0).Value = "$A$1"

 

 ‘je vais sur la cellule A1 physiquement

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

 

 'je vais à la ligne 1048876

args1(0).Name = "ToPoint"

args1(0).Value = "$A$1048576"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

 

 'je remonte vers la dernière ligne du tableau

dim args2(1) as new com.sun.star.beans.PropertyValue

args2(0).Name = "By"

args2(0).Value = 1

args2(1).Name = "Sel"

args2(1).Value = false

 

 dispatcher.executeDispatch(document, ".uno:GoUpToStartOfData", "", 0, args2())

 

 'je descends d'une ligne

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())

 

End sub

 

 

5. LES DIFFERENTES MOTS CLES DE L’INTERFACE UNO POUR LE DEPLACEMENT

 

.uno:GoToCell va vers une cellule spécifique

 

.uno:GoUpToStartOfData remonte vers la dernière valeur du bloc de données

 

.uno:GoDown descend d’une ligne

 

.uno:GoUp remonte d’une ligne

 

.uno:GoRight va à droite

 

.uno:GoLeft va à gauche

 

.uno:EnterString appuie sur la touche Entrée

 

 

 

6. INSERER UNE FORMULE PAR PROGRAMME

 

On insère une formule CALC dans la feuille par BASIC

 

SUB CELLULE_FORMULE

 

'je place dans la cellule D5 de la feuille GESTION une formule

ThisComponent.Sheets.GetByName("GESTION").GetCellRangeByName("D5").formula = "=sum(B2:B16)"

 

END SUB

 

 

 

7. INSERER DES STATISTIQUES

 

Ici on insère des formules statistiques

 

SUB CELLULE_STATISTIQUES

WITH ThisComponent.Sheets.GetByName("GESTION")

.GetCellRangeByName("D5").string = "le total des salaires est : "

 

.GetCellRangeByName("E5").formula = "=sum(B2:B16)"

 

.GetCellRangeByName("D6").string = "la moyenne des salaires est : "

 

.GetCellRangeByName("E6").formula = "=average(B2:B16)"

 

.GetCellRangeByName("D7").string = "le plus gros salaire est : "

 

.GetCellRangeByName("E7").formula = "=MAX(B2:B16)"

 

.GetCellRangeByName("D8").string = "le plus petit salaire est : "

 

.GetCellRangeByName("E8").formula = "=MIN(B2:B16)"

 

END WITH

END SUB

 

 

Prochain article : Le témoin espion

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

 

 

Dans cet article vous découvrirez la manière de créer des feuilles, d’en activer, de les renommer, de les déplacer.


ACTIVER UNE FEUILLE (pointer dessus)

 

Ici on pointe sur la feuille SECTEUR

 

sub ACTIVE_FEUILLE

'j'active une feuille

thiscomponent.CurrentController.ActiveSheet = thiscomponent.sheets.GetByName("SECTEUR")

end sub

 

Ici on définit une procédure avec un passage de paramètre

 

sub ACTIVE(nom_feuille as string)

'j'active une feuille

thiscomponent.CurrentController.ActiveSheet = _

thiscomponent.sheets.GetByName(nom_feuille)

end sub

 

 

Puis la procédure TEST appelle cette procédure

 

sub test

call ACTIVE("SECTEUR")

end sub

 

CREER UNE FEUILLE


Ici on crée une feuille, c'est-à-dire qu’on mémorise la position d’une feuille donnée puis on crée une nouvelle feuille après la position

 

Sub CREE_FEUILLE

 

'je pointe en mémoire la feuille qui sera placée avant la nouvelle feuille

lafeuille= thiscomponent.sheets.GetByName("SECTEUR")

 

'je récupère sa position

indexSecteur=lafeuille.RangeAddress.sheet

 

'je crée une nouvelle feuille après cette position

thiscomponent.sheets.InsertNewByName("NEW",indexSecteur+1)

 

End Sub


 

COMPTER LE NOMBRE DE FEUILLES


Ici on dénombre le nombre de feuilles

 

Sub COMPTER_FEUILLE

'je compte le nombre de feuilles

msgbox thiscomponent.sheets.count

End Sub


 

AFFICHER LE NOM DE LA 1ER FEUILLE


Ici on pointe sur la 1ère feuille qui a un index de 0

 

Sub NOM_FEUILLE

'j'affiche le nom d'une feuille

msgbox thiscomponent.sheets(0).name

End Sub

 

CREER UNE FEUILLE APRES LA DERNIERE


Ici on créer une nouvelle feuille après la dernière

 

SUB CREER_LAST

 

'je récupère l'index de la dernière feuille

dernum=thiscomponent.sheets.count-1

 

'je récupère le nom de la dernière feuille

dernom = thiscomponent.sheets(dernum).name

 

'je pointe sur la dernière feuille

lafeuille= thiscomponent.sheets.GetByName(dernom)

 

'je récupère sa position

indexSecteur=lafeuille.RangeAddress.sheet

 

'je crée une nouvelle feuille après cette position

thiscomponent.sheets.InsertNewByName("NEW",indexSecteur+1)

 

END SUB

 

 

Ici le même code est compacté sur deux lignes

 

SUB CREER_LAST2

 

'je pointe sur la dernière feuille

lafeuille= thiscomponent.sheets.GetByName( thiscomponent.sheets(thiscomponent.sheets.count-1).name)

 

'je crée une nouvelle feuille après cette position

thiscomponent.sheets.InsertNewByName("NEW",lafeuille.RangeAddress.sheet + 1)

 

END SUB

 

 

RENDRE INVISIBLE UNE FEUILLE


Ici on rend invisible la feuille Feuille2

 

Sub INVISIBLE_FEUILLE

'je rends invisible une feuille

ThisComponent.sheets.GetByName("Feuille2").IsVisible=False

End Sub


 

RENOMMER UNE FEUILLE


Ici on change le nom d’une feuille

 

SUB RENOMMER_FEUILLE

'je pointe sur la feuille

maFeuille=thiscomponent.sheets.GetByName("Feuille2")

'je change le nom

maFeuille.name="GESTION"

End Sub


 

SUPPRIMER UNE FEUILLE


Ici on supprime la feuille Feuille2

 

SUB SUPPRIMER_FEUILLE

'je supprime la feuille "Feuille2"

thiscomponent.sheets.removeByName("Feuille2")

END SUB


 

TESTER L’EXISTENCE D’UNE FEUILLE


Ici on teste l’existence d’une feuille

 

SUB EXIST_FEUILLE

'je teste l'existence du nom d'une feuille

if thiscomponent.sheets.HasByName("Feuille2")= false then

msgbox "Cette feuille n'existe pas"

end if

 


LISTER TOUTES LES FEUILLES


Ici on énumère le nom de toutes les feuilles du classeur et on les stocke dans une nouvelle feuille appelée LISTE

 

Sub LIST_FEUILLE

 

'je récupère le nombre de feuille dans le classeur

DERNUM=thiscomponent.sheets.count

 

'je dimensionne un tableau en mémoire

DIM T(DERNUM) AS STRING

 

'je boucle pour récupérer les noms des feuilles

FOR I=0 to DERNUM-1

'je stocke dans le tableau

T(I)=thiscomponent.sheets(I).name

NEXT

 

'je récupère le nom de la dernière feuille

DERNOM=thiscomponent.sheets(dernum-1).name

 

'je crée une nouvelle feuille après ma dernière.  je pointe sur la dernière feuille

lafeuille= thiscomponent.sheets.GetByName( DERNOM)

 

'je crée une nouvelle feuille après cette position

thiscomponent.sheets.InsertNewByName("LISTE",lafeuille.RangeAddress.sheet + 1)

 

'Je pointe sur une feuille spécifique

maFeuille=ThisComponent.Sheets.GetByName("LISTE")

 

'je stocke le nom des feuilles dans les cellules

FOR I=0 to DERNUM-1

'je stocke dans le tableau

maFeuille.GetCellByPosition(0,I).string = T(I)

 

NEXT

End Sub

 

 

CREER 1 FEUILLE PAR MOIS


Ici on crée 12 feuilles auquelles on donne le nom des mois

 

Sub 12MOIS

 

DIM T(12) AS STRING

T(1)="janvier" : T(2)="février" : T(3)="Mars" : T(4)="Avril" : T(5)="Mai"

T(6)="juin" : T(7)="Juillet" : T(8)="Août" : T(9)="Septembre" : T(10)="Octobre"

T(11)="Novembre" : T(12)="Décembre"

 

'je crée 12 nouvelles feuilles

 

for i=1 to 12

 

'je récupère le nombre de feuille dans le classeur

DERNUM=thiscomponent.sheets.count

 

'je récupère le nom de la dernière feuille

DERNOM=thiscomponent.sheets(dernum-1).name

 

'je pointe sur la dernière feuille

lafeuille= thiscomponent.sheets.GetByName( DERNOM)

 

'je crée une nouvelle feuille après cette position

thiscomponent.sheets.InsertNewByName(T(I),lafeuille.RangeAddress.sheet + 1)

 

next i

End Sub

 

 

 

Prochain article : La gestion des cellules

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

 

 

 

Dans cet article vous découvrirez la gestion des documents et les mots clés provenant de l'interface de programmation d'application API.


Comme avec VBA de Microsoft Excel, il est très facile de manipuler des cellules, des feuilles , des classeurs avec BASIC.

La syntaxe est différente mais les grands principes restent les mêmes. Vous pointez vers un objet, par exemple un classeur, puis vous manipuler ses propriétés à l’aide de mots clés et de fonctios qui sont issues de l’interface de programmation d’applications ou API.


API et UNO


Avec L’API ou Application Programming Interface (Interface de Programmation d'Application), vous manipulez les objets de CALC mais aussi de de TEXTE, PRESENTATION et BASE. En d’autres termes, vous contrôlez complètement OpenOffive, comme VBA contrôle totalement EXCEL.

 

API est une montagne d’instructions et d’expression qui concernent des objets.

 

Vous pouvez trouver de la documentation (en anglais) à l’adresse suivante :

 

http://api.openoffice.org/ 

  • API permet d'utiliser OpenOffice.org en tant que prestataire de services dans d'autres applications.

 

  • API permet de mettre en place de nouvelles fonctionnalités

 

  • API permet de personnaliser et contrôler OpenOffice.org.

 

Grâce aux expressions de l’interface API, vous pouvez agir sur OpenOffice par l’intermédiaire du Basic mais aussi avec d'autres langages de programmation tels que Java et C + +.

 

API est capable de fournir des commandes pour d’autres langages :

 

  • API/Samples/Java
  • API/Samples/Cpp
  • API/Samples/StarBasic
  • API/Samples/Python
  • API/Samples/Groovy
  • API/Samples/Any_Language

 

L'interface entre l'API et les divers langages de programmation est assurée par quelque chose appelé Universal Network Objects (UNO).

 

UNO ou Universal Network Objects est une interface de programmation orientée objet divisée en différents objets permettant un accès contrôlé par programme au package OpenOffice.

 

Dans BASIC, vous manipulez des objets qui savent faire des choses et qui rendent des services.

Très souvent vous emploierez un verbe d'action (appelé méthode) accroché à un objet.

Vous pourrez également manipuler des propriétés dont les constante sont modifiables.


OBJET.METHODE

OBJET.PROPRIETE=CONSTANTE

 

 

 

Voici quelques expessions API

 

 

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 de  ActiveWorkbook dans Excel.

 

 

ConvertFromURL( ThisComponent.getURL )

Renvoie le chemin complet et le nom du fichier actif.

 

 

ConvertFromURL( StarDesktop.getCurrentComponent.getURL )

Renvoie le chemin et le nom du fichier mais seulement si la macro est lancée hors de l'environnement de développement.

 

 

ThisComponent.CurrentController.Frame.Title = "Nous sommes le " & date

Modifie la barre de titre du document

 

 

ThisComponent.LockControllers

Fige l'écran pendant le déroulement d'une macro.

 

 

ThisComponent.UnlockControllers

Réactive l'écran pendant le déroulement d'une macro.

 

 

GetSolarVersion

Renvoie la version interne d'OpenOffice

 

 

CREATION DE NOUVEAUX DOCUMENTS


MOTS CLES API

 

StarDesktop.LoadComponentFromURL

"private:factory/scalc"

"private:factory/swriter"

"private:factory/sdraw"

"private:factory/simpress"

 

Ici on crée quatre nouveaux documents vierges

 

REM  *****  BASIC  *****

 

Sub CreerNouveauDocuments

 

Dim mondoc as object

dim args()

 

'je crée un nouveau document tableur

mondoc=StarDesktop.LoadComponentFromURL( "private:factory/scalc", "_blank", 0, Args())

 

'je crée un nouveau document texte

mondoc=StarDesktop.LoadComponentFromURL( "private:factory/swriter", "_blank", 0, Args())

 

'je crée un nouveau document dessin

mondoc=StarDesktop.LoadComponentFromURL( "private:factory/sdraw", "_blank", 0, Args())

 

'je crée un nouveau document presentation

mondoc=StarDesktop.LoadComponentFromURL( "private:factory/simpress", "_blank", 0, Args())

 

End Sub

 

 

OUVERTURE D’UN CLASSEUR EXISTANT SUR LE DISQUE

 

 

MOTS CLES API

 

ConvertToURL

StarDesktop.LoadComponentFromURL

 

Ici BASIC ouvre un document existant sur le disque.

 

REM  *****  BASIC  *****

 

Sub ouvre_article

dim monDocument as object

' je définis un tableau pour des propriétés éventuelles

dim propFich(0) as new com.sun.star.beans.PropertyValue

 

dim adresseDoc as string

 

'je définis l'adresse du document ARTICLE.ODS

adresseDoc = ConvertToURL("C:\DIVERS\ARTICLES.ODS")

 

'je charge le document CALC existant

 

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

 

End Sub

 

 

 

SAUVEGARDE D’UN DOCUMENT AVEC LE MEME NOM

 

 

MOTS CLES API

 

ThisComponent.store

 

Ici on sauvegarde le document

 

Sub ENREGISTRE_1

ThisComponent.store

end sub

 

 

 

SAUVEGARDE D’UN DOCUMENT EN DONNANT UN AUTRE  NOM


MOTS CLES API

 

convertToURL

hour(now)

minute(now)

second(now)

ThisComponent.storeAsURL

 

Ici on enregistre le document en donnant un  nom dont une partie est l’heure en cours

 

Sub ENREGISTRE_2

 

dim adresse as string

dim propfich()

'je formate l'adresse

adresse=convertToURL("C:\DIVERS\SAUVEGARDE_BASIC_" + hour(now) + "_" + minute(now) + "_" + second(now) + ".ODS" )

'je sauvegarde

ThisComponent.storeAsURL(adresse,propfich())

 

End Sub

 

 

Prochain article : La gestion des feuilles.

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

Cet article s'intéresse à la fonction INPUTBOX qui affiche une boîte de dialogue pour permettre à l’utilisateur de saisir des données. La boîte peut être positionnée sur l’écran et l'entrée est assignée à une variable.

 

Pour confirmer l'entrée, cliquez sur OK ou appuyez sur Entrée. L'entrée est renvoyée en tant que valeur de retour de la fonction. Si vous fermez la boîte de dialogue en cliquant sur Annuler, InputBox renvoie une chaîne de longueur zéro ("") que vous pouvez tester dans une fonction IF.

 

La syntaxe est la suivante :

 

INPUTBOX (Msg As String[, Title As String[, Default As String[, x_pos As Integer, y_pos As Integer]]]])

 

Msg : expression au format chaîne de caractères affichée en tant que message dans la boîte de dialogue.

 

Title: expression au format chaîne de caractères affichée dans la barre de titre de la boîte de dialogue.

 

Default : expression au format chaîne de caractères affichée dans la zone de texte en tant qu'expression par défaut en l'absence d'autre entrée.

 

x_pos : expression au format nombre entier spécifiant la position horizontale de la boîte de dialogue. La position est une coordonnée absolue et ne se rapporte pas à la fenêtre de l'application Office.

 

y_pos : expression au format nombre entier spécifiant la position verticale de la boîte de dialogue. La position est une coordonnée absolue et ne se rapporte pas à la fenêtre de l'application Office. Si  x_pos et y_pos  sont omis, la boîte de dialogue est centrée sur l'écran. La position est spécifiée dans twips.

 

Ici on demande une valeur et on teste le résultat

 

REM  *****  BASIC  *****

 Sub Main

'je demande une valeur numérique

 

 do

 

rep =INPUTBOX("Entrezcode ? (1,2 ou3)","PARAMETRAGE",1 ,2000,6000)

 

 if rep="" then

'si j'appuie sur le bouton Annuler je quitte la procédure

exit do

end if

 

'je transforme la chaîne rep en numérique entier

P=Cint(rep)

 

 select case P

 

 case 1 :

  msgbox P

  exit sub

 

 case 2 :

  msgbox P

  exit sub

 

 case 3 :

  msgbox p

  exit sub

 

 case else : 

msgbox "mauvaise valeur"

 end select

loop

End Sub

 

Le code suivant demande votre date de naissance, la date du jour pui calcule la différence en jours.

 

REM  *****  BASIC  *****

 Sub Main

 

'je démarre un gestionnaire d'erreur

ON ERROR GOTO TEST_DATE

 

DAT1 =INPUTBOX("Entrez votre date de naissance ?","PARAMETRAGE",,2000,6000)

 

IF DAT1="" then

'si j'appuie sur le bouton Annuler je quitte la procédure

exit sub

end if

 

DAT2 =INPUTBOX("Entrez la date du jour ?","PARAMETRAGE",date,2000,6000)

 

IF DAT2="" then

'si j'appuie sur le bouton Annuler je quitte la procédure

exit sub

end if

 

'Je calcule le résultat    

jours=cdate(DAT2)-cdate(DAT1)

 

 

'J'affiche la différence de jours entre les deux dates

msgbox "vous êtes né depuis : " & jours & " jours"

 

'je sors du programme pour ne pas tomber dans l'erreur

exit sub

 TEST_DATE:

msgbox "ERREUR DE SAISIR POUR LA DATE"

 

End Sub

 

Prochain article : La gestion des documents

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

Cet article s'intéresse à la fonction MSGBOX qui affiche une boîte de dialogue personnalisable.


 

SYNTAXE :  MSGBOX (TEXT AS STRING [,TYPE AS INTEGER [,DIALOGTITLE AS STRING]])

 

TEXT : expression au format chaîne de caractères se présentant sous forme de message dans la boîte de dialogue. Vous pouvez insérer des retours à la ligne à l'aide de Chr$(13).

 

DIALOGTITLE : expression au format chaîne de caractères s'affichant dans la barre de titre de la boîte de dialogue. Si ce paramètre n'est pas spécifié, le nom de l'application active s'affiche.

 

TYPE : expression au format nombre entier spécifiant le type de la boîte de dialogue et définissant le nombre et le type des boutons ou des icônes devant s'afficher.

Le paramètre Type représente une combinaison de configurations binaires (éléments de boîte de dialogue définis par ajout de leurs valeurs respectives) :

 

Les codes pour les boutons

 

0......................... affiche uniquement le bouton OK.

1......................... affiche les boutons OK et Annuler.

2......................... affiche les boutons Abandonner, Réessayer et Ignorer

3......................... affiche les boutons Oui, Non et Annuler.

4......................... affiche les boutons Oui et Non.

5......................... affiche les boutons Réessayer et Annuler.

 

Les codes pour le type de message

 

16....................... ajoute l'icône Message critique

32....................... ajoute l'icône Question

48....................... ajoute l'icône avertissement.

64....................... ajoute l'icône information avec 1 seul bouton OK  

 

Les codes pour le choix du bouton par défaut

 

0......................... le premier bouton comme bouton par défaut

256..................... désigne le deuxième bouton de la boîte de dialogue comme bouton par défaut.

512..................... désigne le dernier bouton de la boîte de dialogue comme bouton par défaut.

       

Les codes pour les valeurs de retour

 

1......................... OK

2......................... Annuler

 3........................ Abandonner

 4........................ Réessayer

 5........................ Ignorer

 6........................ Oui

 7........................ Non

 

Ici  on pose une question dans une boîte MSGBOX et si oui, on enregistre le document

 

SUB TEST_MSGBOX

 

'ce programme demande l'autorisation de sauvegarder le document en cours

rep=MSGBOX("Voulez-vous enregistrer ?",4+32+256,"BASIC")

if rep=6 then

'appelle de la procédure de sauvegarde

CALL ENREGISTREMENT

ENDIF

 

end SUB

 

La procédure d’enregistrement utilise l’interface UNO

 

Sub ENREGISTREMENT

rem ---------------------------------------------------------

rem define variables

dim document   as object

dim dispatcher as object

rem ---------------------------------------------------------

rem get access to the document

document   = ThisComponent.CurrentController.Frame

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

 

rem -------------------------------------------------------

dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array())

 

End sub

 

  msgbox.jpg

Prochain article : la fonction INPUTBOX

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

 

 

 

Cet article montre la manière d'utiliser des boucles.

 

Voici quelques expressions BASIC qui permettent de réaliser des boucles.

 

  • FOR…NEXT
  • DO … WHILE
  • DO… LOOP
  • WHILE … WEND
  • FOR EACH … NEXT

 

LA BOUCLE DO ... LOOP


Le programme suivant demande deux valeurs, les formate et les affiche.

 

Sub Main

rem je répète

DO

rem saisie de la 1ère valeur

valeur1=inputbox("Entrez la valeur 1")

IF valeur1 = "" THEN

   EXIT DO

END IF

rem saisie de la 2ème valeur

valeur2=inputbox("Entrez la valeur 2")

IF valeur2 = "" then

    EXIT DO

END IF

rem conversion de valeurs

valeur1=cdbl(valeur1)

valeur2=cdbl(valeur2)

rem appel de la procédure de calcul

RESULTAT(valeur1,valeur2)

LOOP

End Sub

 

 --------------------------

SUB RESULTAT(a,b)

msgbox "le résultat est : " & format((b-a)/a,"#.##%")

END SUB

----------------------------------------------

 

 

LA BOUCLE WHILE ... WEND

 

Le code suivant liste tous les documents ouverts à un isntant donné.

La technique utilisée est l'interface API qui permet de pointer sur les objets.

 

SUB LISTE()

'je vais énumèrer tous les documents openOffice ouverts

dim lesdocs, lacollection, ledoc

'je définis les composants ouverts sur le bureau

lesdocs=stardesktop.components

LaCollection=LesDocs.CreateEnumeration 'je crée une énumération

WHILE LaCollection.HasMoreElements 'tant qu'il y a des documents en mémoire

    ledoc=LaCollection.NextElement

    dim rep as long

    'je pose la question de la fermeture

    rep=msgbox("Fermeture du document ?",4+32+256,ledoc.url)

    'je teste le retour de la boite

        IF rep=6 then 'si je réponds oui

              on error resume next 'en cas d'erreur possible

        ledoc.close(true) ' true indique une information pour les fichiers encore ouverts

              On error goto 0 'je reprends le traitement d'erreur normal

        END IF

WEND     'retour au début de la boucle

End Sub

 

 

Prochain article : La fonction MSGBOX

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

Dans cet article vous découvrirez la manière de manipuler des variables. Vous pouvez choisir de programmer de manière rigoureuse ou non, de déclarer des variables globales ou locales puis d'y affecter des valeurs. Un exemple montre comment gérer des erreurs d'exécution.


LES BONNES PRATIQUES

 

• Une Instruction par ligne est recommandée

 

• Plusieurs instructions peuvent être séparées par le signe :

 

• Le code est insensible à la casse

 

• Les espaces et les tabulations sont autorisés sur la ligne

 

• Le signe Underscore _ est employé pour une instruction placée sur plusieurs lignes

 

• Pour placer des commentaires, insérez le mot clé REM ou bien l’apostrophe '

 

Si vous placez l’expression Option Explicit au début du module, vous serez obligé de déclarer toutes les variables.

 

LES VARIABLES GLOBALES ET LOCALES

 

DIM permet de déclarer une variable dont la portée est locale à la procédure

 

GLOBAL permet de déclarer une variable dont la portée est globale à la bibliothèque de modules. En d’autres termes, la variable est accessible par tous les modules contenus dans la bibliothèque.

 

 DIM CHANSON AS STRING déclare une variable de type chaîne

 

DIM V1 AS VARIANT est équivalent à DIM V1 Il s'agit d'une variable de type foure-tout

 

DIM A, CHANSON AS STRING, ANNE AS DATE Déclaration multiples sur une ligne

 

DIM C AS OBJECT Déclaration d'une variable de type objet

 

GLOBAL V1 AS INTEGER Déclaration d’une variable globale

 

LES TYPES DE VARIABLES

 

String type chaîne

 

Integer / Long type entier court ou long

 

Simple / Double type réel simple ou double

 

Currency type monétaire

 

Boolean type logique

 

Date type date

 

Variant type variant

 

Object API OpenOffice.org

 

AFFECTATION DE VALEURS DANS UNE VARIABLE


On affecte une valeur de la droite vers la gauche

 

VAR1= "PROGRAMME EN BASIC"

ou

A1=A1+1 ‘incrémentation

ou

T(12)=0 ‘ pour un tableau

 

Un autre exemple de travail sur les variables.

 

Sub Main

 

' je déclare une variable chaîne

DIM montexte as STRING

monTexte = "PROGRAMMATION DE VARIABLES" & chr(13) & "AVEC UN TABLEAU EN MEMOIRE"

 

Rem j'affiche la variable dans la boite de dialogue msgbox

MSGBOX montexte,0+64,"PRESENTATION"

 

'je déclare un tableau de 10 cases indexées qui commencent à 0 et une variable entière

Dim T(10) as string, I as integer

 

rem 'je remplis le tableau avec une boucle

 

For I=0 to 10

T(I)="position : " & I

Next I

 

rem je relis le tableau et j'affiche les valeurs dans une boite de dialogue simple

 

For I=0 to 10

'j'affiche le contenu de la case tableau dans une boite de dialogue simple

Print T(I)

Next I

 

End Sub

 

 

 

La fonction MSGBOX ou PRINT permet de voir le contenu d'une variable

 

La fonction INPUTBOX permet de demander la valeur d'une variable

 

 

• Dim maChaine as String est équivalent à Dim maChaine$

 

• Pour initialiser une variable à la longueur nulle : maChaine = " "

 

• Concaténation avec + : monTexte = "Il demanda " + "Pourquoi "

 

• Concaténation avec l'esperluette & ou le signe +


 

LA GESTION DES ERREURS D'EXECUTION


 

Le code suivant demande une saisie dans une boîte de dialogue puis affecte le résultat dans une variable. Une gestion d’erreur est mise en place.

 

OPTION EXPLICIT 'obligation de déclarer les variables

 

rem cette variable sera reconnue par toutes les routines dans le module

 

PRIVATE TVA AS DOUBLE

 

SUB MAIN

 

'je mets en place un gestionnaire d'erreur qui traitera les erreurs potentielles de saisie

ON ERROR GOTO TEST_ERREURS

 

rem je demande la valeur de la TVA que je transforme en réel double

TVA = CDBL(INPUTBOX ("ENTREZ LA VALEUR DE LA TVA" ))

 

'je demande la valeur d'un HT

DIM HT

HT = CDBL(INPUTBOX ("ENTREZ LA VALEUR DU HT" ))

 

'j'appelle une fonction qui va renvoyer un calcul

MSGBOX "LE TTC EST : " & CALCUL_TTC(HT)

 

'je quitte le programme qui s'est terminé normalement

EXIT SUB

 

'Début du gestionnaire d'erreur

TEST_ERREURS:

 

MSGBOX "VOUS AVEZ FAIT UNE ERREUR DE SAISIE NUMÉRIQUE" & CHR(13) & CHR(13) & _

"ERREUR N° " & ERR & CHR(13) & CHR(13)& _

"LE TEXTE DE L'ERREUR EST : " & ERROR & CHR(13) & CHR(13) & _

"LE NUMÉRO DE LIGNE QUI A PROVOQUÉ L'ERREUR EST : " & ERL

END SUB

 

'Début de la fonction personnalisée

FUNCTION CALCUL_TTC(X AS DOUBLE) AS DOUBLE

'remarquez que la variable TVA n'est pas déclarée ici

CALCUL_TTC=X*(1+TVA)

END FUNCTION

 

------------------------------------------------------------------------------------------------ 

OPTION EXPLICIT         Impose la déclaration des variables

PRIVATE                      Déclaration en haut du module

ON ERROR GOTO          Début du gestionnaire d'erreur

INPUTBOX                    Saisir une donnée dans une boîte de dialogue

CDBL                          Transformer une valeur texte-numérique en valeur réelle double

MSGBOX                      Afficher un message

&                               Concaténation

CHAR(13)                    Aller à la ligne

FUNCTION                   Fonction personnalisée

ERR                            Numéro de l'erreur

ERROR                        Description de l'erreur

ERL                            Ligne qui a déclenché l'erreur

 

 

Prochain article : les boucles et les conditions

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

Cet article montre l'environnement de développement intégré (EDI) dans lequel vous écrivez ou modifiez vos programmes BASIC.


La figure ci-dessous montre les différentes partie de l'environnement. Les modules sont accessibles dans le bas de la fenêtre et les icônes aident au développement des programmes.


EDI1

 

 

Les icônes placées dans le haut de la fenêtre permettent de déboguer les programmes, d’effectuer du pas à pas, de vérifier le contenu des variables, de placer des points d’arrêt, de jouer ou d’arrêter le programme.

 

 

EDI2

 

 

- Tant qu'une macro est en cours d'éxecution, OpenOffice.org refuse de fermer le document.


A RETENIR 

 

- C'est la 1ère macro du module qui s'exécute depuis l'éditeur (avec F5 également)

 

Le voyant rouge est actif quand la macro est en cours d'exécution

 

Pour arrêter brutalement l'exécution : CTRL MAJ Q

 

- Le témoin permet de voir le contenu d'une variable

 

La touche F8 fait du pas à pas

 

- Cliquez dans la barre verticale pour mettre un point d'arrêt

 

- N’oubliez pas de vérifier la syntaxe du programme par le bouton COMPILER

 

Prochain article : les variables

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

 

Cet article s'intéresse à la gestion des bibliothèques dans Open Office.

 

Vous stockez vos macros dans des modules qui sont eux-mêmes enregistrés dans une bibliothèque qui fait partie d’une racine spécifique.


LES RACINES

Les racines MesMacros et Macros OpenOffice.org contiennent des macros toujours disponibles tant qu’OpenOffice.org est chargé sur l’ordinateur. Elles correspondent à un seul conteneur appelé soffice.

 

Il y a une racine pour chaque document ouvert et chacune est un conteneur de bibliothèques de macros.


  BIBILIOTHEQUE1.jpg

 

Il existe également aussi une racine Standard à plusieurs emplacements. Cette bibliothèque Standard de Mes macros est systématiquement chargée au démarrage.

 

Chaque bibliothèque peut contenir plusieurs modules et peut être développée de manière totalement indépendante.

 

Mes Macros : Correspond aux macros que vous avez ajoutées et qui sont disponibles pour toute application OpenOffice.org et depuis tout document.

 

Macros OpenOffice.org : Contient des bibliothèques de macros fournies par OpenOffice.org. En réseau, l’administrateur peut y ajouter des bibliothèques qui seront alors disponibles pour tous les utilisateurs OpenOffice.org.

 

Un document OPENOFFICE.ORG contient des bibliothèques qui sont des conteneurs de modules, de dialogues et de codes basic. Vous pouvez créer autant de bibliothèques que vous le désirez mais plusieurs bibliothèques systèmes sont toujours présentes, quel que soit le document ouvert.

 

Vous devez faire attention où vous placez le code de vos macros en essayant d'être le plus organisé possible.


CHARGEMENT D’UNE BIBLIOTHEQUE AU DEMARAGE

 

BasicLibraries.LoadLibrary("MABIB") charge la bibliothèque MABIB

 

GlobalScope.BasicLibraries.LoadLibrary(MABIB) charge la bibliothèque MABIB qui se trouve dans le conteneur soffice (Mesmacros et Macro openOffice.org)

 

 

LA BOITE DE DIALOGUE

Une boîte de dialogue est un formulaire utilisateur, le UserForm d’Excel. Vous pouvez y placer les objets classiques des boîtes de dialogue comme des boutons de commandes, des boutons d’options des listes déroulantes, des cases à cocher, des images, etc.

 

Pour créer une boîte de dialogue


1. Outils

2. Macros

3. Gérer les boîtes de dialogue

4. Cliquez sur l'onglet Boîte de dialogue

5. Cliquez sur l'onglet Nouveau, donnez un nom puis cliquez sur le bouton EDITER


 

  BIBILIOTHEQUE2.jpg

 

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html

 

Prochain article : L'environnement de développement BASIC

Cet article expose une présentation générale du langage OOBASIC.

 

GENERALITES

OpenOffice.org (abrégé en OOo) est une suite bureautique multi-plates-formes dans laquelle vous manipulez vos documents bureautiques. Les applications principales sont les suivantes :

 

WRITER ou TEXTE : traitement de texte

CALC : tableur

IMPRESS ou PRESENTATION : mise en page

BASE : gestion de tables, de requêtes et de formulaires

DRAW : éditeur de diagrammes

Math : éditeur de formules

Web : contenu pour le web

OOBasic : langage de programmation

 

Le langage OOBasic est un Basic qui a été adapté pour traiter les différents objets que nous allons rencontrer dans les différentes applications. Par exemple, dans le cas du tableur CALC, le Basic saura :

- récupérer la valeur d’une cellule

- effectuez une boucle sur une plage de cellules

- modifier les polices de caractères

- gérer des formats et l’ensemble des propriétés que vous manipulez quotidiennement dans le tableur

- et manipuler tous les objets du classeur

 

OOBasic est aussi capable de récupérer des informations provenant d’une base de données, c’est-à-dire qu’il est capable de gérer des données provenant des tables ou du résultat des requêtes.

 

Pour gérer tous ces objets, OOBasic utilisera des fonctions qu’on appellera plus généralement des SERVICES qui satisferont un ou plusieurs besoins.

 

Ces services font partie de deux interfaces de composants

- les services API de OPENOFFICE.ORG

- les services de l'interface UNO.

 

Avec OOBasic vous pouvez enregistrer des macros manuellement de manière à étudier puis à utiliser le code basic créé automatiquement. Comme il s'agit d'un langage de programmation orienté objet et modulaire, vous devrez vous trouver dans Open Office pour développer des programmes et pour les exécuter.


Les macros que vous écrivez sont regroupées en modules eux-mêmes regroupés en bibliothèques. Il existe des macros déjà écrites que l’on peut réutiliser mais elles sont d'un abord compliqué au début. Elles deviendront intéressantes ultérieurement lorsque vous parlerez BASIC "fluently".

 

Remarquez que vous pouvez également écrire des macros en utilisant d’autres langages comme Javascript, Beanshell ou Python.

 

UN NIVEAU DE SECURITE DES MACROS

Le niveau de sécurité définit les conditions d’exécution des macros.

Il existe 4 niveaux différents dont certains nécessitent la création d’un répertoire de confiance dans lequel certaines macros seront stockées.

 

Pour définir le niveau de sécurité, suivez la procédure :

 

1. OUTILS

2. OPTIONS

3. SECURITE

4. SECURITE DES MACROS

 

Niveau faible : toute macro est autorisée.

 

Niveau moyen : avertit si le document contenant la macro ne se trouve dans aucun des répertoires de confiance.

 

Niveau élevé : Ce niveau autorise les macros dont le document se trouve dans le répertoire de confiance. En dehors de ce répertoire, les macros non signées sont systématiquement rejetées. Pour les macros signées, Open Office demande une confirmation de confiance.

 

Niveau très élevé : Les macros des documents situés en dehors des répertoires de confiance sont rejetés.


  presentation1.jpg

 

 ENREGISTRER UNE MACRO DANS OPENOFFICE.org

1. OUTILS

2. MACRO

3. ENREGISTRER UNE MACRO

 

Toutes les actions sur le document OpenOffice.org contenu dans la fenêtre sont enregistrées et une petite boîte de dialogue permet de terminer l’enregistrement.

Vous choisissez alors une bibliothèque et un module dans lequel seront stockées les instructions.

 

ATTENTION : L'enregistreur de macros ne fonctionne que sous CALC et WRITER.

 

EXECUTION D'UNE MACRO

 

Une fois la macro enreggistrée, vous pouvez l'exécuter de différentes façons.

 

1. A partir du menu

OUTILS

MENU

EXECUTER

 

2. A partir d’un raccourci clavier

OUTILS

PERSONNALISER

CATEGORIES

MACROS OPENOFFICE.ORG

 

3. A partir d’un bouton de barre d’outils

OUTILS

PERSONNALISER

BARRE D’OUTILS

AJOUTER

MACROS

 

4. A partir d’une entrée de menu

OUTILS

PERSONNALISER

MENU

AJOUTER

MACROS

 

5. Depuis un bouton poussoir ou un événement spécifique

 

6. Depuis un lien hypertexte

CTRL F2

FONCTIONS

EXECUTER LA MACRO

MACRO

ANNOTATION

 

ARTICLE SUIVANT : LES DIFFERENTES BIBLIOTHEQUES

D'autres informations à : http://www.openoffice.org/fr/Documentation/Index.html



 

Cet article traite de l’utilisation des objets TextBox dans un formulaire pour calculer le taux d’intérêt composé induit entre deux valeurs.

 

La figure suivante montre le formulaire et ses objets :

 

USERFORM-TXTBOX3.jpg

 

LES NOMS DES OBJETS

La liste suivante détaille les noms des zones de texte pour chaque objet présent dans le formulaire.

 

Valeur initiale du bien : txt_bien1

Valeur finale du bien : txt_bien2

Nombre d’années : txt_annee

 

Le bouton CALCUL : BT_CALCUL

Le bouton SORTIR : BT_SORTIR

La zone Intitulé du résultat : lbl_RESULTAT


LA FORMULE DE CALCUL

 

La formule générale qui calcule ce taux d’intérêt composé en fonction d’une période est la suivante :

=(valeur finale-valeur initiale)^(1/période)-1

 

Dans Excel la formule doit s’écrire différemment comme le montre la figure ci-dessous.

 

USERFORM-TXTBOX4.jpg

 

La figure ci-dessous montre le formulaire finalisé

 

USERFORM-TXTBOX5.jpg

 

 

PROGRAMMATION DU BOUTON SORTIR

 

Vous pouvez enmployer le mot clé « Me » pour indiquer le formulaire courant, à la place du nom du formulaire.

Private Sub BT_SORTIR_Click()

Me.Hide

End Sub

 

PROGRAMMATION DU BOUTON CALCUL DANS LE FORMULAIRE

Private Sub BT_CALCUL_Click()

‘je commence par un gestionnaire d’ereur au cas où l’utilisateur ne saisisse du texte ou une valeur nulle pour la période

On Error GoTo TEST_ERREUR

'je place le résultat dans la zone intitulé

 

lbl_resultat = (CDec(txt_bien2) / CDec(txt_bien1)) ^ (1 / CInt(txt_annee)) - 1

 

‘La fonction CDec transforme le texte-numérique en type décimal

‘La fonction CInt transforme le texte-numérique en type entier

 

'je formate le résultat en %, VBA multiplie par 100 automatiquement dans ce cas

lbl_resultat = Format(lbl_resultat, "0.00 %")

 

'je sors de la procédure

Exit Sub

 

'en cas d'erreur de saisie, VBA prend la main et envoie un message

 

TEST_ERREUR:

 

MsgBox "Les valeurs doivent obligatoirement être numériques et l'année non nulle" _

& vbLf & "erreur : " & Err.Number

'vblf permet d'aller à la ligne à l'intérieur de la boîte de dialogie MSGBOX

End Sub

 

Remarque : Le signe _ à la fin d’une ligne de code permet d’aller à la ligne sans provoquer d’erreur.

 

Contact : Rlent@orange.fr

Formation Professionnelle Continue

IDENTITE

REMY LENTZNER FORMATION

SIRET  399 397 892 00015

N° Formation 11 75 45998 75

 

RLENT@ORANGE.FR

 

          

 

   

BUREAUTIQUE

  • : Bienvenue sur le blog des techniques avancées d'EXCEL, VBA et OPEN OFFICE BASIC. Vous découvrirez ici des articles sur les fonctions qui aident à la réalisation de tableaux complexes. N'hésitez pas à me faire part de vos réflexions et de vos commentaires. Contact : RLENT@ORANGE.FR Cordialement Rémy LENTZNER
 
Créer un blog gratuit sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés