Macro/Script pour exporter des données d'un Google Sheet à un second Sheet
Bonsoir.
Je m'en viens vers vous car j'aimerais pouvoir avoir une macro/script qui me permettrait d'envoyer des données dans un second Google Sheet afin de ne pas surcharger le premier.
Le document actuel, lorsqu'on enclencha la macro de Validation de la page "Caisse 1", envoi les données dans deux feuilles différentes (dans "Récap Factures" et soit "Détails vente BVL" soit "Détails vente TBH" selon la valeur en G3 ), mais on créait 200 à 300 factures par jour, ce qui ralentis énormément l’exécution de la macro de Validation, tant les deux pages qui réceptionnent les donnés (notamment "Détails vente") lorsqu'on se retrouve à presque 1000 factures.
De ce fait, j'aimerais que la macro actuelle de validation, au lieu d'envoyer les données dans les deux feuilles du Sheet contenant les caisses (sachant qu'il y en a 6 en tout actuellement), les envois directement dans un autre Sheet, afin de conserver uniquement les caisses dans le premier.
Et j'ai un soucis, pour la page de "Détails vente", la colonne Qté qui se rajoute avec le script se met automatiquement en format date, au lieu d'un format chiffre, je sais pas comment régler ça...
Voici la macro actuelle des Caisses :
function caisse1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A1').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Récap Factures'), true);
spreadsheet.getRange('12:12').activate();
spreadsheet.getActiveSheet().insertRowsAfter(spreadsheet.getActiveRange().getLastRow(), 1);
spreadsheet.getActiveRange().offset(spreadsheet.getActiveRange().getNumRows(), 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate();
spreadsheet.getRange('3:3').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Caisse 1'), true);
const celluleG3 = SpreadsheetApp.getActiveSheet().getRange('G3');
const valeurG3 = celluleG3.getValue();
if (valeurG3 == 'Bayview Lodge') {
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Détail vente BVL'), true);
spreadsheet.getRange('F:G').activate();
spreadsheet.getActiveSheet().insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 2);
spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 2).activate();
spreadsheet.getRange('I:I').activate();
spreadsheet.getRange('F:G').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getActiveSheet().autoResizeColumns(4, 1);
spreadsheet.getActiveSheet().autoResizeColumns(5, 1);
}
if (valeurG3 == 'The Boat House') {
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Détail vente TBH'), true);
spreadsheet.getRange('F:G').activate();
spreadsheet.getActiveSheet().insertColumnsAfter(spreadsheet.getActiveRange().getLastColumn(), 2);
spreadsheet.getActiveRange().offset(0, spreadsheet.getActiveRange().getNumColumns(), spreadsheet.getActiveRange().getNumRows(), 2).activate();
spreadsheet.getRange('I:I').activate();
spreadsheet.getRange('F:G').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getActiveSheet().autoResizeColumns(4, 1);
spreadsheet.getActiveSheet().autoResizeColumns(5, 1);
}
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Caisse 1'), true);
spreadsheet.getRange('B3').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('E3').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('G3').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('C5').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('C5:C27').activate();
spreadsheet.setCurrentCell(spreadsheet.getRange('C27'));
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('I10:K13').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
spreadsheet.getRange('A1').activate();
};Aperçu de la page "Détail Vente BVL" (les colonnes "Qté" récupèrent les infos des colonnes C des différentes Caisses) (le "Détail vente TBH" est identique)
Page "Récap Facture" A3 à A8 récupère l'info en I25 des caisses, E3 à E8 l'info en J6 des caisses, F3 à F8 en J7 des caisses et enfin, de I3 à I8, l'info en I16 des caisse..
Bonjour,
Peu étonnant que ça soit lent, vous avez semble-t-il fait cette macro avec l'outil "enregistrer" je remarque beaucoup de lignes inutiles. (on va facilement pouvoir optimiser ça)
Si j'ai bien compris : vous avez 6 pages sheets identiques (pour 6 caisses) qui, lorsqu'une facture est saisie et que l’utilisateur clique sur "valider" ça sauvegarde les données inscrites dans cette facture sur un autre fichier sheet d'archivage est-ce bien cela ?
Bonjour,
Sur le même Google Sheet, j'ai 6 feuilles de caisses, ma feuille "Récap facture" et mes feuilles "Détail vente BVL" et "Détails vente TBH" (et quelques autres feuilles). J'aimerais pouvoir mettre mes pages Récap et Détails dans un deuxième Google Sheet et que lorsqu'on valide une caisse, les informations soit envoyé sur ce deuxième document.
Ok c'est facilement réalisable, pouvez vous transmettre un trame d'une de vos feuille de caisse ?
Merci pour votre aide.
Je vous met là un lien d'une copie de mon document, avec toutes les feuilles et les macros en place.
https://docs.google.com/spreadsheets/d/1-QcyT8_-CV0R0oV5zcbTlRydv3aYTUdKeOULjOhwffU/edit?usp=sharing
Bonjour,
Voici une ébauche, à compléter et tester :
function archiveCaisse() {
// 1. déclarer les fichier, feuilles, caisse, jour, etc.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheetCaisse = ss.getActiveSheet();
const sheetArchive = SpreadsheetApp.openByUrl('ici url du fichier archive').getSheetByName('ici nom de la feuille');
const numCaisse = sheetCaisse.getSheetName();
const now = new Date();
// 2. stocker les données entrées dans le fichier
// en premier, la trame :
let listeDonnees = [
["Caisse",numCaisse],
["Date",now],
["Client",sheetCaisse.getRange('E3').getValue()],
["Chambre d'hôtel",sheetCaisse.getRange('C5').getValue()],
["Rougail de saucisses",sheetCaisse.getRange('C7').getValue()],
["Fish & chips",sheetCaisse.getRange('C8').getValue()],
["Wok de Légumes",sheetCaisse.getRange('C9').getValue()],
["Jus de raisin",sheetCaisse.getRange('C11').getValue()],
["Cocktail de fruits",sheetCaisse.getRange('C12').getValue()],
["Papsi",sheetCaisse.getRange('C13').getValue()],
["Expresso",sheetCaisse.getRange('C14').getValue()],
["Briquet",sheetCaisse.getRange('C16').getValue()],
["RedHood",sheetCaisse.getRange('C17').getValue()],
["Marlboro",sheetCaisse.getRange('C18').getValue()],
["Cigare",sheetCaisse.getRange('C19').getValue()],
["Fruits",sheetCaisse.getRange('C21').getValue()],
["Réduction",sheetCaisse.getRange('J6').getValue()],
["Poids",sheetCaisse.getRange('J8').getValue()],
["Note " ,sheetCaisse.getRange('I10').getValue()],
];
/*facultatif : vérifier que le minimum de donnée est complétée
if data critique = true > suite
else popup erreur */
//3. vider les cellules
sheetCaisse.getRangeList(['E3','C5:C21','I10']).clearContent();
//4. insérer les données dans le fichier d'archive
sheetArchive.getRange(sheetArchive.getLastRow(),3,1,19).setValues(listeDonnees);
}