Bonjour,
J'ai un fichier GoogleSheet destiné à avoir avec plusieurs onglets pour un suivi général d'événements (pointage billetterie, action de communication, etc.).
Je souhaite avoir un 1er onglet avec l'ensemble des informations d'un événement et d'autres onglets de suivi ne piochant que certaines données de ce 1er onglet et y ajouter par la suite des données manuelles selon les objectifs (un 2e onglet billetterie par exemple, un 2e stratégie de comm, etc.).
Pour l'exemple j'ai créé un fichier avec seulement 2 onglets :
- le 1er onglet intitulé "Events" est une liste d'événements avec toutes les données utiles dans autant de colonnes possibles (pour l'exemple 7 colonnes de données)
- dans un 2e onglet intitulé "Suivi" j'utilise la fonction "=query(IMPORTRANGE("lien du fichier";"Events!A1:E500"); "SELECT Col2, Col3")" pour faire apparaitre dans les colonnes A et B les données des colonnes 2 et 3 de mon 1er onglet
- jusqu'ici tout va bien
- à ce 2e onglet "Suivi" j'ajoute à partir de la colonne C des colonnes de suivi pour un pointage billetterie (par exemple) que je rentre manuellement (1x par semaine par exemple, donc potentiellement 52 colonnes à partir de la colonne C)
- lorsque j'ajoute un événement dans mon 1er onglet "Events", tout va bien s'il se situe en fin de liste
- mais lorsque j'ajoute un évènement entre 2 événements existants (par exemple entre mes lignes 4 et 6 dans l'exemple, en rouge), cela apparait bien dans le 2e onglet à la bonne place sur les colonnes automatisées mais mes données entrées manuellement (à partir de la colonne C) ne bougent pas (dans l'exemple la ligne 5 devrait être vide à partir de la colonne C car les données devraient se décaler d'une ligne vers le bas).
- comment faire pour que les données saisies manuellement se décalent lors de l'ajout d'un événement dans mon 1er onglet ?
J'ai tenté plusieurs choses, des formules ou des appscript. Soit cela ne fonctionnait pas, soit cela me décalait de plus d'une ligne vers le bas.Le fichier est consultable ici :
https://docs.google.com/spreadsheets/d/ ... sp=sharing
Merci pour votre aide
Jippeo
Importrange et saisies manuelles de données Le sujet est résolu
-
- Invétéré
- Messages : 132
- Inscription : 11 sept. 2022 20:27
- A remercié : 2 fois
- Remercié : 24 fois
Re: Importrange et saisies manuelles de données
Bonjour Jippeo,Je comprends bien ton souci et la frustration que cela peut engendrer. Pour résoudre le problème du décalage des données manuelles dans ton onglet "Suivi" lorsque tu ajoutes des événements dans l'onglet "Events", il faut utiliser un script Google Apps Script. Ce script va s'assurer que toutes les données se décalent correctement lorsque tu modifies ton premier onglet.Voici un guide étape par étape pour créer et utiliser ce script :Étape 1 : Accéder à Google Apps Script
Copier le codeÉtape 3 : Enregistrer et autoriser le script
- Ouvre ton fichier Google Sheets.
- Va dans le menu Extensions > Apps Script.
- Supprime tout le contenu dans l'éditeur de script et remplace-le par le code suivant :
Copier le code
Code : Tout sélectionner
function onEdit(e) { var sheet = e.source.getActiveSheet(); if (sheet.getName() == "Events") { var range = e.range; if (range.getNumRows() > 1 || range.getNumColumns() > 1) return; // Only process single cell edits var row = range.getRow(); var col = range.getColumn(); if (col == 1) { // Assuming the first column is the event name or unique identifier var suiviSheet = e.source.getSheetByName("Suivi"); var data = suiviSheet.getDataRange().getValues(); data.splice(row, 0, []); // Add an empty row at the correct position suiviSheet.getRange(1, 1, data.length, data[0].length).setValues(data); } } }
- Clique sur l'icône de disquette pour enregistrer le script et donne-lui un nom, par exemple "OnEditScript".
- Va dans le menu Exécuter > onEdit. La première fois que tu exécutes le script, tu devras autoriser les autorisations nécessaires. Suis les instructions pour accorder les autorisations.
- Retourne à ton onglet "Events" et ajoute un nouvel événement entre deux événements existants.
- Vérifie l'onglet "Suivi" pour voir si les données manuelles se sont décalées correctement.
- Le script écoute les modifications dans l'onglet "Events". Lorsqu'une cellule est modifiée dans la première colonne (que l'on suppose être l'identifiant unique de l'événement), il insère une ligne vide correspondante dans l'onglet "Suivi".
- Ce script peut être ajusté selon tes besoins spécifiques, notamment si l'identifiant unique n'est pas dans la première colonne.
Re: Importrange et saisies manuelles de données
The le 1er onglet intitulé "Events" est une liste d'événements avec toutes les données utiles dans autant de colonnes possibles (pour l'exemple 7 colonnes de données).
geometry dash
geometry dash
- NC_Quentin
- Invétéré
- Messages : 38
- Inscription : 10 oct. 2022 09:06
- A remercié : 1 fois
- Remercié : 12 fois
Re: Importrange et saisies manuelles de données
Bonjour !
C’est hélas le comportement normal d’un tableur : vous voudriez qu’il insère automatiquement une nouvelle ligne dans la deuxième feuille lorsque vous en insérez une dans la première, mais il n’y a aucune raison logique qui pousserait à faire ça, hormis pour votre cas particulier. Le seul moyen d’y arriver serait avec un code Apps Script avec un déclencheur réagissant au changement de la structure de votre classeur, mais un tel déclencheur ne donne que des informations sur la nature du changement, pas sur le détail. En d’autres termes, on peut par exemple voir qu’une nouvelle ligne a été insérée, mais pas à quelle ligne.
Bien sûr, on pourrait s’amuser à stocker dans une variable le nombre de lignes effective de notre tableau à chaque changement, et faire des calculs savants pour insérer au bon moment et au bon endroit la ligne voulue, mais il n’y a aucun doute que cela va entraîner plus de bugs derrière.
Il me paraît plus pertinent pour moi de revoir le process qui vous a amené là : soit ramener toutes vos données sur la même feuille (et je peux comprendre que pour de nombreuses raisons ce ne soit pas souhaitable), soit simplement arrêter d’ajouter des données au milieu de la feuille et ne les ajouter qu’à la fin.
J’aurais aimé donner une meilleure solution, mais je pense qu’il n’y en a aucune qui soit vraiment souhaitable ni fonctionnelle au bout du compte.
C’est hélas le comportement normal d’un tableur : vous voudriez qu’il insère automatiquement une nouvelle ligne dans la deuxième feuille lorsque vous en insérez une dans la première, mais il n’y a aucune raison logique qui pousserait à faire ça, hormis pour votre cas particulier. Le seul moyen d’y arriver serait avec un code Apps Script avec un déclencheur réagissant au changement de la structure de votre classeur, mais un tel déclencheur ne donne que des informations sur la nature du changement, pas sur le détail. En d’autres termes, on peut par exemple voir qu’une nouvelle ligne a été insérée, mais pas à quelle ligne.
Bien sûr, on pourrait s’amuser à stocker dans une variable le nombre de lignes effective de notre tableau à chaque changement, et faire des calculs savants pour insérer au bon moment et au bon endroit la ligne voulue, mais il n’y a aucun doute que cela va entraîner plus de bugs derrière.
Il me paraît plus pertinent pour moi de revoir le process qui vous a amené là : soit ramener toutes vos données sur la même feuille (et je peux comprendre que pour de nombreuses raisons ce ne soit pas souhaitable), soit simplement arrêter d’ajouter des données au milieu de la feuille et ne les ajouter qu’à la fin.
J’aurais aimé donner une meilleure solution, mais je pense qu’il n’y en a aucune qui soit vraiment souhaitable ni fonctionnelle au bout du compte.
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