Spreadsheet via script : incrémentation automatique

Résolu/Fermé
Mabelle-60 Messages postés 25 Date d'inscription vendredi 6 octobre 2017 Statut Membre Dernière intervention 14 septembre 2020 - 8 sept. 2020 à 15:17
Mabelle-60 Messages postés 25 Date d'inscription vendredi 6 octobre 2017 Statut Membre Dernière intervention 14 septembre 2020 - 14 sept. 2020 à 15:57
Bonjour,

Bonjour,
Ayant du importer un fichier type plan d'action Excel avec tout plein de macros qui fonctionnaient vers google sheet, je doit me remettre à l'apprentissage pour essayer de faire ce qu'excel faisait.
On passera les détail sur le pourquoi du comment... décision d'entreprise.
Ce que je souhaite faire via le script
J'ai une ligne 'Action' à laquelle je dois rattacher des tâches.
Je me positionne sur ma ligne d'action (Toujours) et je lance mon script qui insère une ligne sous cette action et en colonne A, doit y ajouter un n°
Pour ce n°, je récupère le N° de l'action auquel je colle T. (pour différencier tâches et actions) et je dois retrouver un n° incrémental à la suite.
Je parviens très bien à générer mon n° lorsque c'est la première tâche qui y est ajoutée.
Ca se corse lorsque je dois ajouter d'autres tâches ensuite puisque mon code reprend mon n° de tache dans son intégralité
exemple
N° Action = 12
j'insère une tache, le n° de tâche est 12T.1
Si je rajoute une autre tâche, il faudrait que mon n° de tâche soit 12T.2 MAIS, mon code me sort 12T.12T.11

N'étant pas familiarisé avec la programmation et me rendant compte qu'il existe des subtilité entre Java et GooglApps, je sèche un peu.
Malgré tout, il semblerait que soit les fonctions length et substring ne fonctionnent pas pour mon cas soit je n'utilise pas les bonnes fonctions (j'utilise le terme fonction par défaut ... pas encore familiarisé avec le codage ;-) )

Voici dans un premier temps le code déja construit

function Insert_Tache(){
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getActiveSheet();
//identifie la ligne active
sheet.getRange(spreadsheet.getCurrentCell().getRow() +0, 1, 1, sheet.getMaxColumns()).activate();

// fin de l'instruction si ligne active est Tâche
if (spreadsheet.getCurrentCell().offset(0,9).getValue() == "Tâche") {
}

// instruction si ligne active est Action
else {
//inserre la ligne en dessous
spreadsheet.getActiveSheet().insertRowsAfter(spreadsheet.getActiveRange().getLastRow(), 1);
//selectionne la première case de la ligne
spreadsheet.getActiveRange().offset(spreadsheet.getActiveRange().getNumRows(), 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();

//récupère le n° de l'action
var numaction = spreadsheet.getCurrentCell().offset(-1,0).getValue(); // récupère le n° de l'action
var numtache = spreadsheet.getCurrentCell().offset(1,0).getValue(); // récupère le n) de la dernière tâche
var l_numaction = numaction.length; // détermine le nb de caractère du n° d'ation
var newnumtache;
if (spreadsheet.getCurrentCell().offset(1,9).getValue() == "Tâche") {
newnumtache = numtache.substring(l_numaction + 2) + 1;
}
else {
newnumtache=1;
}

//sélectionne la case de la colonne J de la ligne ajoutée
spreadsheet.getCurrentCell().offset(0, 9).activate();
//insère 'Tâche' en colonne J
spreadsheet.getCurrentCell().setValue('Tâche');
//attribue un n° à la tâche en colonne A
spreadsheet.getCurrentCell().offset(0, -9).setValue(numaction + ".T" + newnumtache);
}
};


Merci de votre aide

Configuration: Windows / Chrome 80.0.3987.122
A voir également:

1 réponse

Mabelle-60 Messages postés 25 Date d'inscription vendredi 6 octobre 2017 Statut Membre Dernière intervention 14 septembre 2020 3
14 sept. 2020 à 15:57
Bonjour à tous
Bon ben pas beaucoup de succés avec mon problème...
N'étant pas parvenu à trouver réponse (ici ou ailleur) j'ai modifié mon script en m'affranchissant du T finalement et en passant plus simplement par une décimale pour identifier mes tâches (comprends même pas pourquoi je n'avais pas fait ça sous Excel)
Mais si il y une solution (et je n'en doute pas), je suis preneur quand même.

Merci
0