[JavaScript] Etendre la formule sur la colonne
P
Bonjour à tous,
Mon nouveau client me partage des accès sur 365 FR. J'utilise donc depuis peu Excel 100% en ligne.
Les macro et le VBA ne fonctionnent pas, étant donné que je dois les créer pour le travail qui m'est confié.
J'essaye de réaliser l'équivalent d'une macro petit à petit, avec des codes simples que j'applique via le complément Script Lab. Ici, j'utilise le Java pour appliquer mes modifications.
- Mon fichier comporte 80 000 lignes, et va probablement grandir encore de beaucoup
- J'ai écrit une formule en J3
- Je souhaite étendre cette formule jusqu'à J80000 (avec, évidemment, une mise à jour de la formule à chaque ligne)
- Le classeur a des difficultés pour gérer toutes ces lignes. Afin d'y parvenir et avoir un code qui tourne, j'ai été obligée de passer par une itération de 3000
- Problème = dès que j'arrive à la ligne 3002, le code repart comme si il était en J3 et les lignes suivantes ont une formule qui s'intéresse à la ligne J3 puis J4 puis...
- Objectif : Au même titre que le code se duplique toutes les 3000 lignes pour traiter l'ensemble du fichier, je dois distinguer l'évolution de la formule qui doit repartir de la dernière ligne traitée +1 pour continuer la nouvelle itération
Je n'arrive pas à modifier le code pour faire fonctionner la formule jusqu'au bout. Je débute, et n'ai pas beaucoup de notion Java, désolée.
Merci beaucoup pour votre aide.
// Fonction pour copier et adapter la formule de la cellule J3 jusqu'à J80000
function copierFormuleJ() {
Excel.run(function (context) {
const feuilleActive = context.workbook.worksheets.getActiveWorksheet();
const plageJ = feuilleActive.getRange("J3");
// Charger la formule de la cellule J3
plageJ.load("formulas");
return context.sync()
.then(function () {
// Copier la formule de la cellule J3
const formuleJ3 = plageJ.formulas[0][0];
// Nombre total de lignes
const totalLignes = 80000;
// Nombre de lignes à traiter à la fois
const lignesParIteration = 3000;
// Nombre total d'itérations
const iterations = Math.ceil(totalLignes / lignesParIteration);
// Définir une fonction pour traiter chaque itération
function traiterIteration(index) {
const debutLigne = index * lignesParIteration + 3; // Commencer à partir de la ligne 3
const finLigne = Math.min((index + 1) * lignesParIteration + 2, totalLignes + 2); // Terminer à la ligne 80002
// Créer une plage pour les lignes de cette itération
const plageLignes = feuilleActive.getRange(`J${debutLigne}:J${finLigne}`);
// Adapter la taille de la plage pour correspondre au nombre de lignes
plageLignes.formulas = formuleJ3;
return context.sync()
.then(function () {
// Si ce n'est pas la dernière itération, traiter la suivante
if (index < iterations - 1) {
return traiterIteration(index + 1);
} else {
console.log("Formules copiées et adaptées avec succès dans la colonne J jusqu'à la ligne 80000.");
}
});
}
// Démarrer le traitement de la première itération
return traiterIteration(0);
});
})
.catch(function (erreur) {
console.error(erreur);
});
}
// Appeler la fonction pour copier et adapter la formule de la cellule J3 jusqu'à J80000
copierFormuleJ();