Si la ligne contient telle valeur, la copier dans une nouvelle feuille

Bonjour,

Merci pour votre réponse, la formule Query est parfaite ! C'est exactement ce que je recherchais !!

Le script a t'il la même fonction ?

J'ai réussi à récupérer les données que je cherchais et je me base sur l'onglet 1er tri, parce que dans l'onglet de BdD il y a un problème par rapport au nombre d'élèves, dû au fait que le formulaire ai plusieurs sections...(mais ça me va très bien ce n'est pas la peine d'apporter des modifications la dessus, en tout cas pour le moment)

Juste je n'arrive pas à le faire pour l'Odyssée Manwha, mais je pense que c'est une erreur d'écriture dans la cellule A1, parce que ça m'affiche : #VALEUR!.

Nous nous demandions une chose : sur un ligne dans les onglets de chaque spectacles, nous allons calculer le nombre total d'élèves inscrits et le nombre d'accompagnateurs. Seulement, comme il va y avoir de nombreuses réponses au formulaire (disons 500), la ligne va t'elle disparaitre si des réponses s'ajoute ? Je ne sais pas si ma question est très claire...?

Pour le lien, en effet je les mets en éditeur pour que mes collègues puissent travailler dessus via le lien. Est-il possible de modifier mes posts en supprimant les liens s'il vous plaît ?

En tout cas merci beaucoup pour votre aide ! Ca va beaucoup nous aider.

Sophie

Bonjour,

J'ai réussi à récupérer les données que je cherchais

ouf ! j'ai cru t'avoir mise dans la panade !

Pour le lien, en effet je les mets en éditeur pour que mes collègues puissent travailler dessus via le lien. Est-il possible de modifier mes posts en supprimant les liens s'il vous plaît ?

je ne sais pas faire, je n'ai pas les droits d'admin, il faudrait faire une demande à Sébastien ... je vais le faire

sur un ligne dans les onglets de chaque spectacles, nous allons calculer le nombre total d'élèves inscrits et le nombre d'accompagnateurs. Seulement, comme il va y avoir de nombreuses réponses au formulaire (disons 500), la ligne va t'elle disparaitre si des réponses s'ajoute ? Je ne sais pas si ma question est très claire...?

effectivement, je n'ai pas compris !

Le script a t'il la même fonction ?

il permet de mettre les réponses une par une sur chaque ligne en rappelant toutes les autres informations sur chaque ligne / je vais documenter le script pour que tu puisses te l'approprier

Merci pour votre réponse, la formule Query est parfaite ! C'est exactement ce que je recherchais !!

  • si tu as besoin de toutes les informations, remplace A, B, C etc. juste par *
  • en revanche, si tu ne souhaites qu'une partie des colonnes, on peut facilement mettre par exemple E, F, H, P dans une cellule et rappeler cette valeur dans chaque onglet

Juste je n'arrive pas à le faire pour l'Odyssée Manwha, mais je pense que c'est une erreur d'écriture dans la cellule A1, parce que ça m'affiche : #VALEUR!.

à cause de l'apostrophe, donc mets seulement Odyssée Manhwa

explications du script

/** @OnlyCurrentDoc */
// cette fonction permet de mettre le menu personnalisé sur le ruban
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('↓ Synthèse ↓')
    .addItem('Établir la base de données', 'etablirBdd')
    .addToUi();
}

/* le but est de mettre les données de la colonne P à raison d'une valeur par ligne
   en répétant les données des colonnes A à O sur chaque ligne de façon à ce que query retrouve ces valeurs
*/
function etablirBdd(){

  // déclaration des variables, ici les feuilles base de données et source
  var bdd = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('BdD')
  var src = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('1er tri')

  // effacement des données présentes
  bdd.getRange(2,1,Math.max(3,getLastDataRow(bdd,'A')-1),bdd.getLastColumn()).clearContent()

  // pour des questions de temps d'exécution, on travaille en tableau et non directement sur les feuilles
  var resultat = []
  var data = src.getRange(2,1,getLastDataRow(src,'A')-1,src.getLastColumn()).getValues()

  // pour chaque ligne de données
  for (var i=0; i<data.length; i++){
    // on sépare chaque donnée de la colonne P = 15 (les colonnes commencent ici à 0 = A)
    var liste = data[i][15].split(', ')
    // pour chaque donnée
    liste.forEach(function(item){
      // on crée un tableau provisoire
      var prov = []
      // on y mets les données des colonnes A à O
      for (var j=0; j<15; j++){prov.push(data[i][j])}
      // on y met la donnée
      prov.push(item)
      // le tout est déversé dans le tableau général
      resultat.push(prov)
    })
  }

  // on renseigne la base de données du contenu du tableau général
  bdd.getRange(2, 1, resultat.length, resultat[0].length).setValues(resultat);
}

// cette fonction recherche la dernière ligne de la feuille 'sheet' en s'appuyant sur la colonne A
function getLastDataRow(sheet,col) {
  var lastRow = sheet.getLastRow();
  var range = sheet.getRange(col + lastRow);
  if (range.getValue() !== "") {
    return lastRow;
  } else {
    return range.getNextDataCell(SpreadsheetApp.Direction.UP).getRow();
  }              
}

Merci beaucoup pour toutes ces explications !

C'est super, merci beaucoup !

Bonne continuation, je ne sais pas si vous êtres rémunéré pour ce que vous faites, mais j'espère que c'est le cas !

Sophie

C'est du strict bénévolat, ma "rémunération" c'est la satisfaction des personnes qui demandent de l'aide (si tant est que je peux en fournir)

C'est très gentil de votre part, vraiment !

Merci, bonne journée !

Bonjour,

Vous m'aviez fait remarqué qu'il y avait un décalage entre les lignes. En effet, lorsqu'une personne répond au formulaire; et qu'il y a la formule =textjoin(",";VRAI;) dans une cellule, celle-ci ne sélectionne les données de la ligne en dessous.

Par exemple, dans la cellule G16, la formule sélectionne les cellules de la ligne J18 au lieu de sélectionner celle de la ligne J16.

Vous m'aviez préconisé d'utiliser la formule suivante pour résoudre le problème :

={'Réponses au formulaire 1'!A1;arrayformula('Réponses au formulaire 1'!A2:A)}

Seulement, j'ai l'impression que cette formule ne fonctionne pas lorsqu'il y a plusieurs réponse à la question su rune ligne, si ?

Merci, bien à vous,

Sophie

En effet ! mais s'il y a un décalage sur la ligne 16, c'est qu'il y a eu suppression de 2 lignes avant la 16.

Mais je vais regarder une solution pour mettre la formule en ligne 1 et qu'elle se propage.

Par contre j'avais une question qui ne me permettait pas de le faire ...

Pourquoi à la fin de la formule il y a 'Réponses au formulaire 1'!BN2:BU2 ? n'est-ce pas plutôt 'Réponses au formulaire 1'!BN2 ?

Mais je vais regarder une solution pour mettre la formule en ligne 1 et qu'elle se propage.

à mettre en P1 (la base de donnée va s'allonger mais les queries permettront de s'affranchir des lignes "vides")

il faut effacer tout ce qui se trouve en dessous

={"ALL";arrayformula(trim(flatten(query(transpose(arrayformula(
{'Réponses au formulaire 1'!M2:M\
'Réponses au formulaire 1'!O2:O\
'Réponses au formulaire 1'!W2:W\
'Réponses au formulaire 1'!AB2:AB\
'Réponses au formulaire 1'!AG2:AG\
'Réponses au formulaire 1'!AI2:AI\
'Réponses au formulaire 1'!AM2:AM\
'Réponses au formulaire 1'!BM2:BM\
'Réponses au formulaire 1'!BN2:BN}
&", "));;9^9)))&" ")}

faut-il ajouter BO, BP, BQ, BR, BS, BT, BU ?

Le \ a pour fonction de juxtaposer les colonnes non contigües, mais aussi permettre d'identifier toute la colonne.

Limite le nombre de lignes des réponses au formulaire.

Pourquoi à la fin de la formule il y a 'Réponses au formulaire 1'!BN2:BU2 ? n'est-ce pas plutôt 'Réponses au formulaire 1'!BN2 ?

Dans quelle cellule vous voyez cette formule ?

En fait, pour la colonne où je souhaite regrouper toutes les réponses à la question "à quel spectacle souhaitez-vous assister?", je sélectionne toutes les cellules où il y écris "A quel spectacle souhaitez-vous assister" dans la feuille "Reponse au formulaire1", ainsi de suite...

ok, je n'ai plus accès au fichier (pas grave et c'est tant mieux du reste), regarde si toutes les colonnes litées une à une dans ma fonction correspondent de façon exhaustive à ton critère "à quel spectacle souhaitez-vous assister?" en ajoutant les manquantes si besoin

si besoin d'aide, mets la liste des colonnes et je te renvoie la fonction

Super, merci beaucoup !

Bonjour,

C'est encore moi ahah !

J'ai désormais besoin de trier les concerts par dates dans une même plage.

Je pense faire 2 colonnes comme sur la photo ci-dessous. Je me demandais comment je pouvais faire pour copier une cellule dans la colonne si il apparait la valeur recherché dans la ligne.

Par exemple ici, si dans la ligne il apparait le texte "Rigoletto - Lun 27 sept 20h - Répétition générale - Le Corum (Opéra Berlioz)" il faudrait qu'il se copie dans la colonne "27/09/21, 20H".

Avez-vous une idée ? Pensez-vous que c'est la meilleure façon de procéder ?

L'idéal aurait été de scinder le tableau en 2 entre ceux qui se sont inscris pour la séance du 24/09 et ceux qui se sont inscrits pour la séance du 27/09. Notre but est d'avoir une bonne visibilité sur les inscriptions en fonction de leur date, parce que nous regardons ensuite combien de personne on pu s'inscrire à telle séance.

Merci, bonne journée

image

Quelle est la fonction query mise sur chaque page ? car on peut agir dès cette fonction, ou sur la base de donnée (ce qui serait encore mieux)

Il n'y a pas toujours des dates !! exemple (on peut faire sans et mettre date inconnue)

Les Aventures du roi Pausole - Rencontre et échange avec l’équipe artistique du spectacle avant la répétition

Est-ce qu'il est possible de changer les dates et les mettre à un format compréhensible et standardisé pour un tableau ... on se sait pas quelle année non plus.

Ven. 21 janv. 9h30 >> Ven. 21 janv. 2022 à 9:30

ce qui me permettrait de le rechercher plus facilement

Je vais quand même essayer de travailler avec ce que j'ai.

En effet je pense que je vais me servir de la formule query !

=query('1er tri'!A1:BL;"select A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P where P like '%"&A1&"%' ";1)

Je crois que ça va être compliqué de changer les dates parce qu'il faudrait les changer dans tout le formulaire, non ?

En séparant avec la fonction query je pense que ça devrait être parfait !

Ca rend bien :

image

Juste je pense qu'il faut que j'espace plus les deux tableaux ou que je les mette dans des onglets différents car les futures réponses risques d'empiéter que les lignes du 24 sept.

Tu peux faire

order by P

ici

=query('1er tri'!A1:BL;"select A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P where P like '%"&A1&"%' order by P";1)

pour les dates, je vais les extraire, mais quand même il manque l'année !! donc tout ce qui est sept/oct/nov ce sera 2021 sinon 2022

Si j'écris "order by P" que va-t-il se passer ?

les données seront triées par le contenu du P, d'où au moins un regroupement par spectacle

Je travaille à récupérer les dates et heures, il a quelques anomalies quand même à régler, car tu mets mai. ou juin. ou mars. alors que ce ne sont pas abréviations, donc pas la peine de mettre un point.

J'ai pour le moment cette formule qui fonctionne à 95% (4 échecs sur 93 valeurs différentes)

=regexextract(P2,"[0-9]{1,2}[ ]{1}[\. 0-9a-zéû]+h[0-9]{0,2}")

Je poursuis maintenant dans l'interprétation de l'heure.

Rechercher des sujets similaires à "ligne contient telle valeur copier nouvelle feuille"