Deux macros à ONLYOFFICE : surligner les doublons et retrouver la prochaine ligne vide

15 juin 2020By Mary

Notre communauté nous demande souvent comment réécrire les macros VBA qu’ils utilisaient à Excel. Dans ce billet de blog, nous apprendrons à le faire en nous basant sur deux exemples simples.

macros in onlyoffice

A propos de macros ONLYOFFICE

Pour les macros, ONLYOFFICE utilise la syntaxe JavaScript et les APIs de ONLYOFFICE Document Builder. Cela signifie qu’il est indispensable de réécrire les macros VBA avec JavaScript pour pouvoir les utiliser à ONLYOFFICE.

Nous avons choisi JavaScript pour les raisons suivantes :
 

  • il est multiplateforme,
  • il est facile à utiliser,
  • vous pouvez utiliser le code que vous avez écrit pour la macro aussi bien que pour le module complémentaire.

Nos macros sont sécurisées parce qu’elles ne donnent pas l’accès au système. Elles représentent le code JavaScript qui est exécuté dans la même fenêtre que les éditeurs.

Apprendre à créer votre propre macro

 

  1. Dans le tableur, passez à l’onglet « Modules complémentaires » et cliquez sur l’icône « Macros ».
  2. Sélectionnez « Créer » dans la fenêtre qui apparaîtra.
  3. Consultez la documentation sur les APIs pour écrire le script.
Exemple №1: Surligner les doublons

Pour commencer, nous vous invitons à créer la macro qui permet de surligner avec les couleurs différentes les valeurs en double dans les zones sélectionnées pour que l’utilisateur puisse facilement retrouver les doublons. Nous allons nous baser sur une simple macro VBA.

Voici le script qui en résulte avec les commentaires expliquant toutes les étapes. Les couleurs sont prédéfinies dans le code de la macro.

(function () {
    // La couleur d'arrière-plan des cellules avec les valeurs uniques
    var whiteFill = Api.CreateColorFromRGB(255, 255, 255);
    // L'indice courant de la gamme de couleurs
    var uniqueColorIndex = 0;
    // La gamme de couleurs pour surligner les doublons
    var uniqueColors = [Api.CreateColorFromRGB(255, 255, 0),
        Api.CreateColorFromRGB(204, 204, 255),
        Api.CreateColorFromRGB(0, 255, 0),
        Api.CreateColorFromRGB(0, 128, 128),
        Api.CreateColorFromRGB(192, 192, 192),
        Api.CreateColorFromRGB(255, 204, 0)];
 
    // Fonction pour obtenir la couleur pour les doublons
    function getColor() {
        // Si vous avez choisi toutes les couleurs uniques, recommencer dès le début
        if (uniqueColorIndex === uniqueColors.length) {
            uniqueColorIndex = 0;
        }
        return uniqueColors[uniqueColorIndex++];
    }
 
    // Choisir une feuille active
    var activeSheet = Api.ActiveSheet;
    // Choisir plusieurs feuilles actives
    var selection = activeSheet.Selection;
    // Mappage des valeurs des cellules contenant les doublons
    var mapValues = {};
    // Toutes les cellules de la ligne
   var arrRanges = [];
    // Lancer le processus de sélection. 
    selection.ForEach(function (range) {
        // Obtenir la valeur de la cellule
        var value = range.GetValue();
        if (!mapValues.hasOwnProperty(value)) {
            mapValues[value] = 0;
        }
        mapValues[value] += 1;
        arrRanges.push(range);
    });
    var value;
    var mapColors = {};
    // Examiner toutes les cellules de la sélection et surligner celles avec les doublons 
    for (var i = 0; i < arrRanges.length; ++i) {
        value = arrRanges[i].GetValue();
        if (mapValues[value] > 1) {
            if (!mapColors.hasOwnProperty(value)) {
                mapColors[value] = getColor();
            }
            arrRanges[i].SetFillColor(mapColors[value]);
        } else {
            arrRanges[i].SetFillColor(whiteFill);
        }
    }
})();

Ci-dessous est le résultat de l’exécution de la macro :

ONLYOFFICE macro highlight duplicates

Exemple №2

Cette macro sert à retrouver la prochaine ligne vide disponible dans la feuille de calcul. Nous avons pris cette macro VBA à titre d’exemple et ont créé ce script :

(function()
{
    // Choisir une feuille active
    var activeSheet = Api.ActiveSheet;
    // L'index minimal de la colonne
    var indexRowMin = 0;
    // L'index maximal de la colonne
    var indexRowMax = 1048576;
    // Colonne 'A'
    var indexCol = 0;
    // L'index de ligne pour chercher une cellule vide
    var indexRow = indexRowMax;
    for (; indexRow >= indexRowMin; --indexRow) {
        // Chosir la cellule
        var range = activeSheet.GetRangeByNumber(indexRow, indexCol);
        // Vérifier la valeur
        if (range.GetValue() && indexRow !== indexRowMax) {
            range = activeSheet.GetRangeByNumber(indexRow + 1, indexCol);
            range.Select();
            break;
        }
    }
})();

Ce code vous permettra de sélectionner la prochaine ligne vide (le défilement sera disponible dans l’une des version à venir).
 
Veuillez noter que cette macro va ignorer les espaces qui sont entre vos données, mais pas celles qui sont à la fin.

Besoin d’aide avec les macros ?

Si vous avez besoin d’aide lors de la création d’une macro ou la méthode nécessaire ne figure pas dans nos APIs, n’hésitez pas à créer le ticket sur GitHub.

Liens utiles

ONLYOFFICE sur GitHub

Apprendre à créer des modules complémentaires. Lire maintenant >>

Inspirez-vous de l’exemple du module complémentaire : remplir les cellules avec des couleurs pour créer une vraie image à base d’une feuille de calcul. En savoir davantage >>