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;
}
}
}
}
}
Copier-coller des données d'une feuille à l'autre sans créer de doublons Le sujet est résolu
Re: Copier-coller des données d'une feuille à l'autre sans créer de doublons
Bonjour,
Cas un peu atypique, j'ai réussi à trouver une solution !
Dans le cas ou cela pourrais un jour servir à quelqu'un je met le code en bas de page.
C'est donc un code qui va prendre les lignes du tableau source et en fonction de leur type va pouvoir les copier coller dans ke tableau cible. Si le numéro de ligne apparait déjà dans le fichier source alors la ligne n'est pas copiée. Dès qu'une nouvelle ligne est ajoutée au tableau source avec un nouveau numéro, celle-ci sera ajoutée.
En espérant aider quelqu'un !
Cordialement,
Jeanne
PS: Si vous trouvez une manière plus simple de faire n'hésitez pas à me le dire !
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function option4() {
var feuille_active = SpreadsheetApp.getActiveSpreadsheet(); //récupère le fichier actif
var source_sheet = feuille_active.getSheetByName("Source"); //récupère la feuille source
var target_sheet = feuille_active.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(); //récupère la dernière ligne du fichier cible +1 dans le cas ou tableau vide
for (var i=4; i<=last_row_source;i++) //on parcoure les lignes de la feuille source
{
var type = source_sheet.getRange(i,4).getValue(); //récupère la valeur de la case D(4) dans 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)
if ( type == "Qualité") //verification si la case "type" est notée "Qualité"
{
var test =0// variable test si doublon
for (var w=4; w<=last_row_target;w++) //on parcoure les lignes de la feuille target
{
var target_test = target_sheet.getRange(w,2).getValue(); //récupère la valeur de la case B(2) de la feuille Target
if ( target_test == numerosource) //si le n°de ligne de target = au numéro de ligne source
{
test=1
}
}
{ for (var j=3; j<=last_row_target;j++)// on parcours les lignes de la feuille target à partir de la ligne de titre pour que la ligne 1 ne soit pas =0
{
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 ( test == 1){}// si les deux n° de lignes sont les même alors ne rien faire et passer
else if (numerosourcesave != numerosource)// Si la dernière valeur de numérosource est diff de la nouvelle (évite de copier deux fois la même ligne)
{
var numerosourcesave = numerosource
//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;
}
}
}
}
}
}
Cas un peu atypique, j'ai réussi à trouver une solution !
Dans le cas ou cela pourrais un jour servir à quelqu'un je met le code en bas de page.
C'est donc un code qui va prendre les lignes du tableau source et en fonction de leur type va pouvoir les copier coller dans ke tableau cible. Si le numéro de ligne apparait déjà dans le fichier source alors la ligne n'est pas copiée. Dès qu'une nouvelle ligne est ajoutée au tableau source avec un nouveau numéro, celle-ci sera ajoutée.
En espérant aider quelqu'un !
Cordialement,
Jeanne
PS: Si vous trouvez une manière plus simple de faire n'hésitez pas à me le dire !
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function option4() {
var feuille_active = SpreadsheetApp.getActiveSpreadsheet(); //récupère le fichier actif
var source_sheet = feuille_active.getSheetByName("Source"); //récupère la feuille source
var target_sheet = feuille_active.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(); //récupère la dernière ligne du fichier cible +1 dans le cas ou tableau vide
for (var i=4; i<=last_row_source;i++) //on parcoure les lignes de la feuille source
{
var type = source_sheet.getRange(i,4).getValue(); //récupère la valeur de la case D(4) dans 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)
if ( type == "Qualité") //verification si la case "type" est notée "Qualité"
{
var test =0// variable test si doublon
for (var w=4; w<=last_row_target;w++) //on parcoure les lignes de la feuille target
{
var target_test = target_sheet.getRange(w,2).getValue(); //récupère la valeur de la case B(2) de la feuille Target
if ( target_test == numerosource) //si le n°de ligne de target = au numéro de ligne source
{
test=1
}
}
{ for (var j=3; j<=last_row_target;j++)// on parcours les lignes de la feuille target à partir de la ligne de titre pour que la ligne 1 ne soit pas =0
{
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 ( test == 1){}// si les deux n° de lignes sont les même alors ne rien faire et passer
else if (numerosourcesave != numerosource)// Si la dernière valeur de numérosource est diff de la nouvelle (évite de copier deux fois la même ligne)
{
var numerosourcesave = numerosource
//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;
}
}
}
}
}
}
Rejoignez la discussion 💬
Vous devez être enregistré pour participer à la discussion et échanger avec les différents membres
Inscrivez-vous dès aujourd'hui
Vous n'êtes pas encore membre ? Rejoignez-nous gratuitement dès aujourd'hui et contribuer en postant votre réponse ou question sur tous les forums disponibles
Inscription