Formule "Somme couleurs" pour additionner les valeurs de plusieurs cellule

Bonjour,

Je viens d'essayer d'avoir un lien mais étant sur un drive professionnel je ne peux rien partager. Les accès sont autorisés uniquement aux personnes de mon entreprise.

Je l'ai téléchargé en Excel et mis sur mon drive perso.

Est-ce que ça sera bon pour vous?

Je pense même qu'il me faudra votre adresse mail pour vous ajouter

Moins de 5s pour compiler 12500 valeurs sur fond coloré.

Voici ce que j'ai fait

  • admettons que j'ai une liste de rubriques comme ceci
image
  • admettons que j'ai une feuille de données avec
    • des codes en ligne
    • des périodes en colonnes
image
  • bien sûr rubriques, codes, périodes peuvent être autre chose
  • j'ai donc 2 tableaux de synthèse
    • la somme des données par code et rubrique
    • la somme des données par période et rubrique
image
function onOpen() {
  SpreadsheetApp.getUi().createMenu('⇩ M E N U ⇩')
    .addItem('👉 Calculer par couleurs', 'calculerCouleurs')
    .addToUi();
}
function calculerCouleurs() {
  var d = new Date()
  var rub = myDictionary()
  var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('données').getDataRange()
  var valeurs = range.getValues()
  var couleurs = range.getBackgrounds()
  var resultat = []
  for (var i=1;i<valeurs.length;i++){
    for (var j=1;j<valeurs[0].length;j++){
      if (isTypeNumber(valeurs[i][j])) resultat.push([rub.get(couleurs[i][j]),valeurs[i][j],valeurs[i][0],valeurs[0][j]])
    }
  }
  var f = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('BdD')
  f.getRange(2,1,resultat.length,resultat[0].length).setValues(resultat)
  Browser.msgBox('terminé en '+Math.round((new Date()-d)/1000)+' secondes')
}
function isTypeNumber(arg) {
  return typeof arg == 'number';
}
function myDictionary() {
  let myDico = new Map()
  var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('couleurs').getDataRange()
  var valeurs = range.getValues()
  var couleurs = range.getBackgrounds()
  for (var i=0;i<valeurs.length;i++){
    myDico.set(couleurs[i][0],valeurs[i][0])
  }
  return myDico
}

https://docs.google.com/spreadsheets/d/1Q7yfSDwKNC1RrIDUTg6AGDWEWp2_c6kMUPb-AvGwDn8/copy

à voir si cela s'adapte à ton fichier

il peut y avoir du reste des données sur plusieurs feuilles

Merci pour le fichier, j'ai juste une question.

Le bdD est crée comment? c'est un tableau croisé dynamique?

la BdD est créée par le programme qui va récupérer les valeurs, les couleurs, les codes, les périodes

Les 2 TCD sont ensuite branchés sur cette BdD (à terme, il faudra masque la feuille BdD ce n'est qu'un étape sur le calcul)

Ok merci pour ton retour.

Je vais essayer aujourd'hui de basculer mes données sur ce fichier et voir comment ça se comporte.

Je te redis quand j'ai terminé.

Merci encore.

Je viens d'essayer, ça fonctionne très bien.

La seule chose qui pose problème c'est que dans la création de la base de données, tu prends en compte toutes les colonnes.

Moi dans mon cas ça m'intéresse de ressortir la case GA comme référence et les valeurs et couleurs des colonnes Semaine 01 à 52

image

Est-ce que vous avez une solution?

pas de soucis, mais je ne vois rien dans l'image, notamment où commencent et où finissent les lignes et colonnes à prendre en compte

dans ce cas, tu peux changer toi-même

var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('données').getDataRange()

en

var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('données').getRange('F6:AC'+SpreadsheetApp.getActiveSpreadsheet().getSheetByName('données').getLastRow())

ou

var range = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('données').getRange('F6:AC499)

à toi de remplacer F6:AC499 par la réalité

Tout fonctionne bien, il me reste juste un peu de mise en forme.

Merci pour ton aide et le temps que tu y as consacré.

Etant novice, je pense que j'aurais certainement de nouvelles questions avec Sheets.

A bientôt

Fabrice

Reviens aussi souvent que nécessaire

Rechercher des sujets similaires à "formule somme couleurs additionner valeurs"