Copier-coller des données d'une feuille à l'autre sans créer de doublons
Publié : 09 mai 2023 17:06
Bonjour,
Bien que je commence à vraiment m'amélioré sur Apps script, je ne reste encore une fois bloquée sur un programme:
Voici le contexte. J'ai un tableau de donnée "Source " dans lequel sont trié des données
Dans la barre d'action (fichier, éditions... ) j'ai ajouté l'option "Transfert" qui permet de lancer le code que je souhaite (ici il s'appelle "Qualité" ou "option4)). Le code en question permet de sélectionner toutes les lignes typée "Qualité" (colonne D) et de les copier-coller dans la feuille "Target". De plus, le code devrait permettre de vérifier si le numéro de suivi apparait déjà dans le tableau et donc d'éviter de crée des doublons dans le tableau "Target".
Seulement, deux problèmes se posent à moi :
- A chaque activation du code "option4" une ligne vide est ajoutée sans que je sache pourquoi.
- Le code ne retire pas les doublon, au contraire il semble vouloir les multiplier...
je suis vraiment perdue et je sais qu'il n'est parfois pas facile de remarquer ses erreurs en programmation.... J'espère que vous saurez m'aider !
Cordialement,
Jeanne
PS: Je n'arrive pas a mettre des fichier joint, seulement des photos alors voici le code et les tableaux en photos.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Transfert') //ajoute l'option "transfert" dans la barre des tâches
.addItem('Qualité', 'option4') //qualtrième option
.addToUi();
}
function option4() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //récupère le fichier actif
var source_sheet = ss.getSheetByName("Source"); //récupère la feuille source
var target_sheet = ss.getSheetByName("Target"); //récupère la feuille cible
var last_row_source = source_sheet.getLastRow(); //récupère la dernière ligne du fichier source
var last_row_target = target_sheet.getLastRow()+1; //récupère la dernière ligne du fichier cible
;
for (var i=4; i<=last_row_source;i++) //on parcoure les lignes de la feuille source
{
var numerosource = source_sheet.getRange(i,2).getValue();// récupère le numéro de la ligne de la feuille source en colonne B(2)
var type = source_sheet.getRange(i,4).getValue(); //récupère la valeur de la case D(4)
if ( type == "Qualité") //si la case "type" est notée "Qualité"
{ for (var j=4; j<=last_row_target;j++)
{
var numerotarget = target_sheet.getRange(j,2).getValue();// récupère le numéro de la ligne de la feuille cible en colonne B(2)
if (numerosource = numerotarget){}
else
{
//Copie N° ligne
var source_range = source_sheet.getRange("B"+(i)); // récupère la ligne à copier
var target_range = target_sheet.getRange("B"+(last_row_target +1)); //récupère la ligne où coller
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
// Copie date de création
source_range = source_sheet.getRange("C"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("C"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
//Sujet-action à court terme
source_range = source_sheet.getRange("E"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("D"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
//Qui
source_range = source_sheet.getRange("F"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("E"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
//Commentaire
source_range = source_sheet.getRange("G"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("F"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
last_row_target = last_row_target +1;
}
}
}
}
}
Bien que je commence à vraiment m'amélioré sur Apps script, je ne reste encore une fois bloquée sur un programme:
Voici le contexte. J'ai un tableau de donnée "Source " dans lequel sont trié des données
Dans la barre d'action (fichier, éditions... ) j'ai ajouté l'option "Transfert" qui permet de lancer le code que je souhaite (ici il s'appelle "Qualité" ou "option4)). Le code en question permet de sélectionner toutes les lignes typée "Qualité" (colonne D) et de les copier-coller dans la feuille "Target". De plus, le code devrait permettre de vérifier si le numéro de suivi apparait déjà dans le tableau et donc d'éviter de crée des doublons dans le tableau "Target".
Seulement, deux problèmes se posent à moi :
- A chaque activation du code "option4" une ligne vide est ajoutée sans que je sache pourquoi.
- Le code ne retire pas les doublon, au contraire il semble vouloir les multiplier...
je suis vraiment perdue et je sais qu'il n'est parfois pas facile de remarquer ses erreurs en programmation.... J'espère que vous saurez m'aider !
Cordialement,
Jeanne
PS: Je n'arrive pas a mettre des fichier joint, seulement des photos alors voici le code et les tableaux en photos.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Transfert') //ajoute l'option "transfert" dans la barre des tâches
.addItem('Qualité', 'option4') //qualtrième option
.addToUi();
}
function option4() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //récupère le fichier actif
var source_sheet = ss.getSheetByName("Source"); //récupère la feuille source
var target_sheet = ss.getSheetByName("Target"); //récupère la feuille cible
var last_row_source = source_sheet.getLastRow(); //récupère la dernière ligne du fichier source
var last_row_target = target_sheet.getLastRow()+1; //récupère la dernière ligne du fichier cible
;
for (var i=4; i<=last_row_source;i++) //on parcoure les lignes de la feuille source
{
var numerosource = source_sheet.getRange(i,2).getValue();// récupère le numéro de la ligne de la feuille source en colonne B(2)
var type = source_sheet.getRange(i,4).getValue(); //récupère la valeur de la case D(4)
if ( type == "Qualité") //si la case "type" est notée "Qualité"
{ for (var j=4; j<=last_row_target;j++)
{
var numerotarget = target_sheet.getRange(j,2).getValue();// récupère le numéro de la ligne de la feuille cible en colonne B(2)
if (numerosource = numerotarget){}
else
{
//Copie N° ligne
var source_range = source_sheet.getRange("B"+(i)); // récupère la ligne à copier
var target_range = target_sheet.getRange("B"+(last_row_target +1)); //récupère la ligne où coller
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
// Copie date de création
source_range = source_sheet.getRange("C"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("C"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
//Sujet-action à court terme
source_range = source_sheet.getRange("E"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("D"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
//Qui
source_range = source_sheet.getRange("F"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("E"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
//Commentaire
source_range = source_sheet.getRange("G"+(i)); // récupère la ligne à copier
target_range = target_sheet.getRange("F"+(last_row_target +1)); //insère les valeurs dans les cases
source_range.copyTo(target_range); //copie dans la dernière ligne de la feuille cible
last_row_target = last_row_target +1;
}
}
}
}
}