Données dupliquées et cases cochées
Hello, je précise que je débute avec Google Sheets
Voilà, j'ai un tableau avec des cases à cocher sur une feuille 1,
et j'aimerais que quand celles-ci sont cochées, elles soient automatiquement copiées dans un nouveau tableau sur une feuille 2.
Le but étant de pouvoir décider si des dépenses sont fixes ou non.
S'il est possible, en plus, de faire apparaître ces dépenses fixes chaque mois (tableau de la feuille 2), alors c'est royal !
Merci
- Messages
- 688
- Excel
- 2010 - Gsheets
- Inscrit
- 14/08/2018
- Emploi
- responsable d'exploitation logistique
Bonjour
Je n'ai pas compris quelle donnée devait être collée dans une autre feuille.
Voici un exemple de macro pour le critère suivant:
Si on coche une case de la colonne B de la feuille nommée "feuil1", alors la donnée de la colonne A correspond à la ligne coché en colonne B sera copiée collée en colonne C d'une nouvelle feuille nommée "feuil2"
function onEdit(event) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = event.range;
var row = range.getRow();
var col = range.getColumn();
if (sheet.getName() == "feuil1" && col == 2 && range.getValue() == true) {
var value = sheet.getRange(row, 1).getValue();
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("feuil2");
var lastRow = targetSheet.getLastRow();
targetSheet.getRange(lastRow + 1, 3).setValue(value);
}
}Merci @evolm
Je n'ai pas réussi mais et j'ai changé de un peu mes tableaux, et j'ai une nouvelle question.
J'ai une valeurA et plusieurs sommes dans différentes cellules sur une feuille1.
J'aimerais, avec des macros (ou autre chose si c'est possible), copier les valeurs de ces cellules, les coller dans d'autres cellules correspondantes à valeurA sur une feuille2 (comme pour les sauvegarder), puis rendre ces cellules vides sur ma feuille1.
Je reviens sur ma précédente réponse.
En fait j'arrive à faire ce que je veux avec une macro.
La " sauvegarde" se fait : Je copie-colle J3:Q3 (feuille1) dans F1:J1 (feuille2). Je copie-colle AT15:AX32 (feuille1) dans F2:J19 (feuille2).
function test1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('J3:Q3').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Feuille2'), true);
spreadsheet.getRange('F1:J1').activate();
spreadsheet.getRange('Feuille1!J3:Q3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Feuille1'), true);
spreadsheet.getRange('AT15:AX32').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Feuille2'), true);
spreadsheet.getRange('F2:J19').activate();
spreadsheet.getRange('Feuille1!AT15:AX32').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};J'aimerais cependant qu'à chaque fois, le collage se fasse dans une colonne/plage vide. Càd que par exemple, pour la prochaine "sauvegarde", J3:Q3 (feuille1) se colle dans K1:O1 (feuille2) et AT15:AX32 (feuille1) se colle dans K2:O19 (feuille2).
Je peux donner un accès à mon fichier pour que ce soit plus clair
- Messages
- 688
- Excel
- 2010 - Gsheets
- Inscrit
- 14/08/2018
- Emploi
- responsable d'exploitation logistique
Vous copiez J3:Q3 (8 colonnes) en F1:J1 (5 colonnes) ?
Je vais considérer que ce n'est pas J3:Q3 mais J3:N3
Voici un code pour décaler de 5 colonnes à chaque fois
function test1() {
var spreadsheet = SpreadsheetApp.getActive();
var feuille1 = spreadsheet.getSheetByName('Feuille 1');
var feuille2 = spreadsheet.getSheetByName('Feuille 2');
// Détermine la dernière colonne utilisée dans la Feuille 2
var lastColumn = feuille2.getLastColumn();
// Ajoute 5 pour obtenir la première colonne de destination
var firstColumn = lastColumn + 1;
// Copie-colle les données de J3:N3 dans la Feuille 2
var range1 = feuille1.getRange('J3:N3');
var target1 = feuille2.getRange(1, firstColumn, range1.getNumRows(), range1.getNumColumns());
range1.copyTo(target1, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
// Copie-colle les données de AT15:AX32 dans la Feuille 2
var range2 = feuille1.getRange('AT15:AX32');
var target2 = feuille2.getRange(2, firstColumn, range2.getNumRows(), range2.getNumColumns());
range2.copyTo(target2, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);Hello @evolm
Pardon, je pensais qu'il n'était pas nécessaire d'avoir des plages identiques, que la valeur (unique dans celles-ci) se collerait quand même.
J'ai cette erreur :
TypeError: Cannot read properties of null (reading 'getLastColumn')
Sais-tu d'où ça peut venir ?
J'ai trouvé ! Merci ChatGPT !
Et voici le résultat :
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Feuile1");
var sheet2 = ss.getSheetByName("Feuille2");
var sourceRange = sheet1.getRange("AC15:AC23");
var destColumn = sheet2.getRange("2:2").createTextFinder(sheet1.getRange("J3").getValue()).findNext().getColumn();
var destRange = sheet2.getRange(3, destColumn, 5, 1);
sourceRange.copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);Merci à toi @evolm pour les réponses