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.

 

en savoir plus sur les classes définissant classeurs, feuilles, cellules, etc dans les environnements
Cliquez sur le bouton pour copier le code
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
         
Cliquez sur le bouton pour copier le code
dans le presse papier
 Sub etude()

    Dim laCellule

    Set laCellule = ActiveSheet.Range("A1")
    laCellule.Interior.Color = RGB(255, 245, 157)
    
 End Sub
     
Cliquez sur le bouton pour copier le code
dans le presse papier
 function etude(){

    var leClasseur = SpreadsheetApp.getActiveSpreadsheet();
    var laFeuille = leClasseur.getActiveSheet();
    var laCellule = laFeuille.getRange("A1");
    laCellule.setBackgroundRGB(255, 245, 157);
}
     

Quel environnement choisir ?

Cliquer pour agrandir l'image