Introduction aux Macro-commandes
Le langage de programmation à utiliser pour écrire une macro-commande dépend de l'environnement d'exécution de la macro-commande.
En effet
- avec MS Excel on programme en VBA (Visual Basic pour Application) : une version adaptée programmation objet du BASIC
- avec Google Sheet, on utilise JavaScript
- avec Libre Office Calc on peut utiliser VBA, Javascript ou python...
Cela aura pour conséquence, qu'une macro-commande écrite pour une feuille de calcul MS Excel ne sera pas copiable (couper-coller) dans G Sheet ou dans LO Calc ou réciproquement. Il existe cependant un convertisseur de macros MS Excel vers G Sheet.
Mais, même lorsque la macro-commande est écrite en VBA pour Libre Office Calc ou pour Excel, le copier-coller ne fonctionne pas car :
- les classes définissant les objets utilisés dans les macro-commandes sont différentes
- et les objets instanciés utiliseront des méthodes ( fonctions) et des propriétés (attributs) différentes.
Exemple 1 : l'accès au classeur actif se fait en utilisant :
- l' objet thisComponent en LO Basic, instancié au lancement du tableur ;
- l'objet workSheet ou thisWorksheet en VBA Excel, instancié au lancement du tableur ;
- la méthode getActiveSpreadsheet() de la classe SpreadsheetApp( SpreadsheetApp.getActiveSpreadsheet()) pour Google Sheet,
Exemple 2 : l'accès à la feuille active se fait en utilisant :
- une combinaison des méthodes currentController et activeSheet sur thisComponent (thisComponent.currentController.activeSheet) en LO Basic
- l'objet activeSheet pour VBA Excel, instancié au lancement du tableur ;
- la méthode getActiveSheet() de la classe SpreadsheetApp (SpreadsheetApp.getActiveSheet()) pour Google Sheet,
Dans les onglets ci-dessous figure le code d'une macro-commande qui colorie le fond de la cellule A1 de la feuille de calcul active d'un tableur. Elle est écrite en 3 versions : MS Excel, LO Calc et GoogleSheet.

- LibreOffice Calc 1/2 (Basic)
- LibreOffice Calc 2/2 (Basic)
- MS Excel (Basic)
- Google Sheet (Javascript)
un exemple expliqué de macro-commandes : calcul d'une moyenne pondérée
dans le presse papier
sub etude() Dim laFeuille as Object Dim laCellule as Object laFeuille = thisComponent.currentController.activeSheet laCellule = laFeuille.getCellRangeByName("A1") laCellule.CellBackColor = RGB(255, 245, 157) end sub
dans le presse papier
Sub etude() Dim laCellule Set laCellule = ActiveSheet.Range("A1") laCellule.Interior.Color = RGB(255, 245, 157) End Sub
dans le presse papier
function etude(){ var leClasseur = SpreadsheetApp.getActiveSpreadsheet(); var laFeuille = leClasseur.getActiveSheet(); var laCellule = laFeuille.getRange("A1"); laCellule.setBackgroundRGB(255, 245, 157); }