web-dev-qa-db-fra.com

Création dynamique de noms de colonne en fonction des données d'un autre onglet

J'ai une feuille Google qui enregistre toutes les soumissions sur mon site Web de divers formulaires de contact. J'ai besoin de savoir combien de fois chaque formulaire de contact a été envoyé et dans quelle semaine il a été envoyé.

Le but est d'avoir une feuille Google qui ressemble à ceci: (Chaque onglet de la feuille Google est le même nom que ces formulaires)

Week Commencing | Number of Submissions
  1st July 2019 | 37
  8th July 2019 | 7

Les données que je possède ressemblent à ceci: (dans un onglet nommé "données")

form name                         | date 
Custom Printed Premium Gift Boxes | 7/4/2019 12:01:28

Lien vers la feuille Google: https://docs.google.com/spreadsheets/d/1ffOVvGT7CGV3gXR1HP5kp6Pg1JgD40qRjlt6lwwFbo0/edit?usp=sharing

Mes questions:

  1. Comment puis-je compter les soumissions à partir de l'onglet des données et mettre le total, par semaine, dans le bon onglet?
  2. Comment puis-je obtenir le numéro de la semaine, le convertir en un titre de ligne correct de "1er juillet 2019" et ensuite avoir le nombre de soumissions pour cette semaine même dans la bonne cellule?
  3. Y a-t-il une meilleure façon de réaliser ce que je fais? Suis-je cheville carrée/trou rond?
2
Tjobbe
  • pour dériver le numéro de semaine:

    =ARRAYFORMULA(IF(LEN(B2:B), WEEKNUM(B2:B, 2), ))

    0


  • pour le convertir au 1er jour de chaque numéro de semaine:

    =ARRAYFORMULA(IF(LEN(B2:B), VLOOKUP(WEEKNUM(B2:B, 2), 
     {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), 2),
         TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), "d. mmmm yyyy")}, 2, 0), ))

    0


  • pour créer un tableau récapitulatif complet:

    =ARRAYFORMULA(QUERY(IF(LEN(B2:B), {VLOOKUP(WEEKNUM(B2:B, 2), 
     {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), 2),
         TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(B2:B))-7&":"&
                               DATEVALUE(MAX(B2:B)))), "d. mmmm yyyy")}, 2, 0), A2:A}, ),
     "select Col2,Col1,count(Col1) 
      where Col1 is not null 
      group by Col1,Col2 
      label count(Col1)''"))

    0


  • pour le mettre dans l'onglet correct (avec script - recalcul manuel):

    function sheetName() {
    return SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
    }
    =ARRAYFORMULA(QUERY(QUERY(IF(LEN(data!B2:B), 
    {VLOOKUP(WEEKNUM(data!B2:B, 2), 
     {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                               DATEVALUE(MAX(data!B2:B)))), 2),
         TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                               DATEVALUE(MAX(data!B2:B)))), 
     "d. mmmm yyyy")}, 2, 0), data!A2:A}, ),
     "select Col2,Col1,count(Col1) 
      where Col1 is not NULL 
      group by Col1,Col2 
      label count(Col1)''", 0), "select Col2,Col3 where Col1='"&SHEETNAME()&"'", 0))

    0


  • le mettre dans l'onglet correct (sans script - saisie manuelle)

    =ARRAYFORMULA(QUERY(QUERY(IF(LEN(data!B2:B), {VLOOKUP(WEEKNUM(data!B2:B, 2), 
    {WEEKNUM(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                           DATEVALUE(MAX(data!B2:B)))), 2),
     TEXT(ROW(INDIRECT("A"&DATEVALUE(MIN(data!B2:B))-7&":"&
                           DATEVALUE(MAX(data!B2:B)))), 
    "d. mmmm yyyy")}, 2, 0), data!A2:A}, ),
    "select Col2,Col1,count(Col1) 
    where Col1 is not NULL 
    group by Col1,Col2 
    label count(Col1)''", 0), "select Col2,Col3 where Col1='Contact Form'", 0))

    0

0
user0