Accueil > Ressources > langage Visual Basic Excel Vs langage Visual Basic Open Office

langage Visual Basic Excel Vs langage Visual Basic Open Office

vendredi 20 novembre 2009, par GUIGUE, SOULENQ

Nous examinons ici les différences entre le langage Visual Basic d’Excel (VBA) et celui d’Open Office (OOo Basic).

I. VISUAL BASIC FOR APPLICATION

En VBA, tout est objet. Chaque objet peut posséder des propriétés et des méthodes.
Les principales collections d’objets du tableur Excel sont WorkBooks (classeur), Sheets (feuille de calcul) et Range (cellules). Elles sont utilisables selon une hiérarchie descendante :
• Workbooks("Ventes 2009").Sheets("Janvier").Range("B2") désigne la cellule B2 de la feuille Janvier du classeur Ventes 2009.
• Sheets("Janvier").Range("B2") désigne la cellule B2 de la feuille Janvier du classeur actif (ouvert et affiché).
• Range("B2") désigne la cellule B2 de la feuille active.
Une fois un objet désigné, vous pouvez :
• lui appliquer une méthode, à l’aide de la syntaxe NomObjet.NomMéthode. Ainsi, Range("B2").Select sélectionne la cellule B2…

Par exemple, Lorsqu’on appuie sur le bouton « gras » de la barre d’outil afin de mettre le texte des cellules A1 à B3 en gras, le code de la macro qui s’exécute par derrière est :

=>
Sub TestGras

(…)

Range("A1:B3").Select

Selection.Font.Bold = True

End Sub
<=

Lorsque la méthode Select (moment où, par devant, on appuie sur le bouton « gras ») est appliquée à l’objet A1:B3, on fixe la valeur de la propriété Font.Bold à True. Ainsi, l’activation de la propriété Font.Bold met en gras les cases sélectionnées.

Les propriétés et méthodes d’un objet portent le nom de membres. L’éditeur VBA propose d’ailleurs deux dispositifs très intéressants, la liste des membres et l’Information rapide automatique, qui simplifient considérablement le travail de rédaction de code.

D’autres parts, un avantage du VBA lors de la saisie d’instructions dans l’éditeur est l’apparition d’une boîte de liste déroulante après la saisie d’un nom d’objet suivi par un point. C’est la liste de membres, qui affiche la liste des méthodes et propriétés de l’objet qui précède le point. (voir annexe 1)

De même, lorsqu’un nom de fonction suivi d’une seule parenthèse (celle de gauche) est saisi, l’Information rapide automatique affiche les arguments requis par cette fonction dans une info bulle. Cette aide réduit les risques d’erreur de syntaxe. Elle est disponible même pour des fonctions personnalisées créées par vous-même.

II. VISUAL BASIC FOR APPLICATION

Les choses sont plus complexes avec Open office VB. En effet, lorsqu’on lance enregistrement de macro, que l’on sélectionne la plage A1:B5, puis que l’on clique sur le bouton « Gras » de la barre d’outils , le code de la macro enregistrée est le suivant :

=>
Sub TestGras

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 ---------------------------------------------------------------------

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

args1(0).Name = "ToPoint"

args1(0).Value = "$A$1 :$B$5"

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

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

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

args2(0).Name = "Bold"

args2(0).Value = true

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

End Sub
<=

Ce code semble bien plus intimidant, mais en réalité il n’est pas très compliqué, seulement plus complexe que nécessaire. Tout d’abord, tout accès à un objet OpenOffice.org s’effectue à l’aide de l’API OpenOffice.org.

L’API OpenOffice.org est une interface de programmation universelle qui sert à créer, ouvrir, modifier et imprimer des documents OpenOffice.org.
Elle peut être employée tant avec Open office Basic qu’avec d’autres langages de programmation comme Java et C++, grâce à la technique UNO (Universal Network Objects, objets réseau universels) qui fournit une interface compatible avec différents langages de programmation.

Afin de pouvoir utiliser une architecture UNO dans OOo Basic, on doit déclarer une variable pour l’objet associé. Cette déclaration se fait avec l’instruction Dim. Pour déclarer une variable objet, on doit utiliser la désignation du type Object, puis l’initialiser à l’aide de la fonction createUnoService. Dans le code précédent, on avait ainsi :
dim dispatcher as object
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

Cet appel assigne à la variable dispatcher une référence à l’objet qui vient d’être créé. com.sun.star.frame.DispatchHelper ressemble à un « type » d’objet, mais la terminologie UNO emploie plus volontiers le terme « service » que « type ». Selon la philosophie UNO, ce dispatcher est décrit comme « une référence à un objet prenant en charge le service com.sun.star.frame.DispatchHelper ». Le terme « service » employé dans OpenOffice.org Basic correspond donc aux termes « type » et « classe » employés dans d’autres langages de programmation, dont VBA.

OpenOffice.org fournit des centaines de services. Afin que l’utilisateur en ait une meilleure vue générale, ils ont été regroupés en modules. Ces modules n’ont aucun autre intérêt fonctionnel pour les programmeurs OOo Basic. Lorsque vous spécifiez le nom d’un service, seul le nom du module importe, puisqu’il doit aussi apparaître dans le nom indiqué. Le nom complet d’un service est constitué de l’expression com.sun.star, qui spécifie qu’il s’agit d’un service OOo, suivie du nom du module, frame par exemple, et enfin du nom du service en lui-même, comme DispatchHelper. Le nom complet dans ce cas est ici :
com.sun.star.frame.DispatchHelper

La sélection de la plage s’effectue en créant un objet com.sun.star.beans.PropertyValue nommé args1(0) dont on fixe les propriétés Name et Value :
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1 :$B$5"

puis on exécute la méthode execute.dispatch de l’objet dispatcher en lui fournissant comme arguments le document, une fonction uno, un argument égal à 0, puis l’object args1() :
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
La procédure pour mettre la sélection en gras est similaire.

III. En résumé

Dans VBA, la structure d’un objet est définie par la classe à laquelle il appartient. Dans OOo Basic, sa structure est définie par les services qu’il prend en charge. Un objet VBA est toujours assigné à une classe unique. Un objet OOo Basic peut quant à lui prendre en charge plusieurs services.
Le processus est donc différent, mais le résultat est identique à ce qui est obtenu en VBA.
La procédure Open Office.org Basic est un plus compliquée. En effet, l’enregistreur OOo génère un ensemble d’appels UNO d’affichage (Dispatch), lourds et peu utiles à l’apprentissage du langage.