Transformer une macro Microsoft Office en macro ONLYOFFICE

6 juillet 2023By Dasha

Avez-vous déjà pensé à convertir vos macros VBA de Microsoft Office en macros fonctionnant de manière transparente avec ONLYOFFICE ? Bien qu’il n’y ait pas de solution directe à cette conversion, dans cet article, nous allons vous apprendre à transformer une macro VBA qui nous a été envoyée par l’un de nos utilisateurs.

Transforming a Microsoft Office macro into an ONLYOFFICE macro

Macro VBA

Voici la macro VBA originale :

Sub Button1_Click()
    Dim mycel As Range
    For Each mycel In Columns("D:D").SpecialCells(xlCellTypeConstants, 23)
        If mycel = [TODAY()] Then mycel.Offset(0, 1) = [This_value]
    Next
End Sub

Cette macro recherche dans la colonne D les cellules ayant une valeur constante de 23 et vérifie si la valeur de chaque cellule est égale à la valeur de la cellule intitulée [TODAY(]. Si les valeurs correspondent, elle met à jour la cellule de la colonne suivante, décalée d’une colonne vers la droite, avec la valeur de la cellule intitulée [This_value].

Transforming a Microsoft Office macro into an ONLYOFFICE macro

Construction de la macro ONLYOFFICE

Pour convertir cette macro en une macro JavaScript compatible avec ONLYOFFICE, nous pouvons utiliser l’API ONLYOFFICE.

Dans la macro ONLYOFFICE, nous commençons par obtenir la feuille active à l’aide de la fonction Api.GetActiveSheet(). Nous récupérons ensuite les valeurs des cellules A2 et A4, qui correspondent à [TODAY()] et [This_value] dans la macro VBA :

var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();

Ensuite, nous définissons la plage de cellules sur laquelle nous voulons itérer en utilisant sheet.GetRange(“D1:D10”). Cette plage représente la colonne D dans cet exemple, mais vous pouvez l’adapter à vos besoins spécifiques :

var dateRange = sheet.GetRange("D1:D10");

Nous utilisons la fonction ForEach pour parcourir chaque cellule de la plage définie. Pour chaque cellule, nous récupérons la valeur actuelle à l’aide de range.GetValue() et la comparons à la valeur de la cellule A2. En cas de correspondance, nous obtenons le numéro de ligne de la cellule actuelle à l’aide de range.GetRow(), puis nous obtenons la cellule correspondante dans la colonne E à l’aide de sheet.GetRange(“E” + ligne) :

dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // Check if the current date matches the value in cell A2
  if (currentDate === dateValue) {
    // Get the corresponding cell in column E
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);  }
});

Enfin, nous mettons à jour la valeur de la cellule suivante (décalée d’une colonne vers la droite) avec la valeur de la cellule A4 en utilisant oRange.SetValue(updateValue) :

   // Update the value in the next cell
    oRange.SetValue(updateValue);
  }
});

Le code macro complet est le suivant :

(function()
{
    var sheet = Api.GetActiveSheet();
var dateValue = sheet.GetRange("A2").GetValue();
var updateValue = sheet.GetRange("A4").GetValue();
var dateRange = sheet.GetRange("D1:D10");
dateRange.ForEach(function(range) {
  var currentDate = range.GetValue();
  // Check if the current date matches the value in cell A2
  if (currentDate === dateValue) {
    // Get the corresponding cell in column E
    var row = range.GetRow();
    var oRange = sheet.GetRange("E" + row);
    // Update the value in the next cell
    oRange.SetValue(updateValue);
  }
});
})();

Exécutons la macro et voyons comment elle fonctionne !

En conclusion, il n’y a pas de conversion directe des macros VBA en macros JavaScript pour ONLYOFFICE. Cependant, vous pouvez utiliser vos macros VBA existantes comme référence pour construire des macros pour ONLYOFFICE. En exploitant les méthodes de l’API ONLYOFFICE et en faisant les ajustements nécessaires, vous pouvez obtenir des fonctionnalités similaires.

Bien que cela puisse nécessiter une certaine restructuration du code, le processus est réalisable. Nous espérons qu’avec les conseils donnés dans cet article, vous pourrez créer des macros ONLYOFFICE puissantes. Saisissez les possibilités, profitez des avantages, et bonne chance dans vos efforts exploratoires !