Problème incrémentation
Bonjour tout le monde,
J'ai un petit souci avec un script.
Je souhaite que ma valeur qui apparait en colonne B ligne 2 "MD1" soit incrémenter en colonne B ligne 38 par la valeur "MD2" et que ce schéma ce répète toutes les 36 lignes pour arriver à une valeur de "MD382"
Je n'arrive pas malheureusement à trouve l'erreur. Est-ce que vous pourriez m'éclairer s'il vous plait.
Je vous remercie
function duplicateRowsWithLinks() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getRange(2, 1, 36, sheet.getLastColumn()); // Lignes 2 à 37
const data = range.getValues(); // Récupère les données des lignes 2 à 37
let mdCounterA = 2; // Commencer à "md2" pour la colonne A
let mdCounterB = 2; // Commencer à "MD2" pour la colonne B
let linkCounter = 2; // Le lien en colonne AB commence à "MD2"
// Répéter 380 fois
for (let i = 0; i < 380; i++) {
const newData = data.map((row) => {
return row.map((cell, colIndex) => {
// Modification de la colonne A (index 0)
if (colIndex === 0) {
// Remplacer "md1" par "mdX" dans la colonne A, débutant par "md2"
return cell.toString().replace(/md1/g, `md${mdCounterA}`);
}
// Modification de la colonne B (index 1)
if (colIndex === 1) {
// Remplacer "md1" par "MDX" dans la colonne B, débutant par "MD2"
return cell.toString().replace(/md1/g, `MD${mdCounterB}`);
}
// Modification de la colonne AB (index 27) pour le lien de l'image
if (colIndex === 27) {
// Remplacer "MD1" par "MDX" dans la colonne AB en utilisant linkCounter
return cell.toString().replace(/MD1/g, `MD${linkCounter}`);
}
return cell; // Les autres colonnes restent inchangées
});
});
// Coller les nouvelles données à la fin du tableau
sheet.getRange(sheet.getLastRow() + 1, 1, 36, newData[0].length).setValues(newData);
// Incrémenter le compteur A (md2 -> md3 -> md4 -> ...)
mdCounterA++;
// Incrémenter le compteur B tous les 36 lignes pour qu'il change seulement aux nouvelles duplications
if ((i + 1) % 36 === 0) {
mdCounterB++;
}
// Incrémenter le compteur de lien en colonne AB
linkCounter++;
}
}Tu veux débuter en B2 avec la valeur MD1 et terminer en B13752 avec MD382 ?
Oui exactement... Malheureusement je ne sais pas pourquoi il me copie juste la valeur MD1 toutes les 36 lignes mais il ne l'incrémente pas.
Alors, le + simple possible :
function myFunction() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
for(i=1;i<382;i++){
sheet.getRange((2+i*36),2).setValue('MD'+i)
}
}Mais c'est lent, car on setValue à chaque itération
Plus rapide, mais insère des données vides sur la colonne B là où il n'y a pas de MD :
function myFunction() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let values = Array(382 * 36).fill(['']);
for (i=1;i<382; i++) {
const rowIndex = 1 + i * 36;
values[rowIndex - 1] = ['MD' + i];
}
sheet.getRange(3, 2, values.length, 1).setValues(values);
}