Fichier de commande archivage d'une ligne sans supprimer tout les infos
Bonjour,
Je suis en train de réaliser un fichier pour passer des commandes pour une entreprise (je suis en stage) et pour l'instant ça ressemble à ça:
J'ai par la suite créer un code (inspiré de toute pièce par internet) qui me permet de mettre la date quand le statut de la commande change, quand le statut passe en commandé la "Date de commande" se met dans la case et quand je met réceptionné la date de réception s'affiche également dans la case réceptionné. De plus lorsque le statut passe en réceptionné cela supprime toute la ligne pour la mettre dans un "dossier archivé". Cependant j'aimerai bien que quand le statut passe en réceptionné ça met la ligne effectivement dans le fichier "archivé" mais j'aimerais que ça ne supprime pas la ligne sur le tableau de commande mais que ça supprime seulement les infos de commande type qté à commander etc quand je repasse le statut en "/".
Voici le code en question:
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Gestion des Lignes')
.addItem('Rappeler une Ligne', 'showMoveDialog')
.addToUi();
}
function showMoveDialog() {
var html = HtmlService.createHtmlOutputFromFile('moveRowDialog.html')
.setWidth(400)
.setHeight(300);
SpreadsheetApp.getUi().showModalDialog(html, 'Rappeler une Ligne');
}
function moveRowByRef(reference) {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var mainSheet = ss.getSheetByName('Tableau_de_commande');
var archiveSheet = ss.getSheetByName('Archivé');
var data = archiveSheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
if (data[i][0] == reference) {
// Copie la ligne dans la feuille principale
mainSheet.appendRow(data[i]);
// Supprime la ligne de la feuille Archivé
archiveSheet.deleteRow(i + 1);
return; // Sort de la fonction après avoir trouvé et déplacé la ligne
}
}
throw new Error('Référence non trouvée dans la feuille Archivé.');
} catch (error) {
logError(error, 'moveRowByRef');
}
}
function onEdit(e) {
try {
var sheet = e.source.getActiveSheet();
var range = e.range;
var columnToWatch = 1; // Column index for the dropdown, change if necessary
Logger.log('Modification detected in sheet: ' + sheet.getName());
Logger.log('Modified column: ' + range.getColumn());
Logger.log('Modified row: ' + range.getRow());
if (range.getColumn() == columnToWatch) {
var row = range.getRow();
var newValue = range.getValue();
var currentDate = new Date();
Logger.log('New value: ' + newValue);
if (newValue == "Commandé") {
sheet.getRange(row, 6).setValue(currentDate); // Column F (6th column)
Logger.log('Date added to column F for row ' + row);
} else if (newValue == "Réceptionné") {
sheet.getRange(row, 9).setValue(currentDate); // Column I (9th column)
Logger.log('Date added to column I for row ' + row);
// Move the row to the "Archivé" sheet
moveToArchiveByRef(sheet, row);
}
}
// Handle unique reference generation
if (range.getColumn() == 2 && range.getRow() > 1 && range.getValue() != "") {
var uniqueRef = generateUniqueRef();
// Assurez-vous que la colonne où la référence doit être insérée est vide avant d'insérer la nouvelle référence
var targetCell = sheet.getRange(range.getRow(),10); // Changez 10 pour la colonne cible
if (targetCell.getValue() == "") {
targetCell.setValue(uniqueRef);
}
}
} catch (error) {
logError(error, 'onEdit');
}
}
function moveToArchiveByRef(sheet, row) {
try {
var archiveSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Archivé");
if (!archiveSheet) {
archiveSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet("Archivé");
Logger.log('Sheet "Archivé" created.');
}
var range = sheet.getRange(row, 1, 1, sheet.getLastColumn());
var rowData = range.getValues()[0];
// Copy the row data to the archive sheet
archiveSheet.appendRow(rowData);
Logger.log('Row ' + row + ' moved to "Archivé".');
// Clear the original row content
sheet.deleteRow(row);
Logger.log('Row ' + row + ' deleted from the original sheet.');
} catch (error) {
logError(error, 'moveToArchiveByRef');
}
}Je ne suis pas dutout un expert en code et encore moins sur appscript donc si vous avez des questions sur le code je peux peut etre donner des réponses mais elle ne seront peut être pas précise.
Merci
Bonjour,
Plusieurs fonctions en l'air de faire la même choses, mais la suppression de ligne semble être ici :
// Clear the original row content
sheet.deleteRow(row);
Logger.log('Row ' + row + ' deleted from the original sheet.');Il te suffit si tu veux supprimer les données des colonnes F,G,H par exemple de remplacer la ligne :
sheet.deleteRow(row);par ceci :
sheet.getRange(row,5,1,3).clearContent()Merci beaucoup, j'ai réussi en bidouillant et grâce à votre formule à faire ce que voulais faire.
J'ai juste rajouter une fonction qui dit que si mon statut passe en réinitialisé ça supprime avec votre fonction et j'ai enlevé le supprimé de la fonction d'archivage.
Merci et bonne journée.