IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

APIs Google Discussion :

Comparaison et affectation valeur de cellule [Google Sheets]


Sujet :

APIs Google

  1. #1
    Candidat au Club
    Femme Profil pro
    Webplanneur
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Comparaison et affectation valeur de cellule
    Bonjour,
    Je viens de passer un moment sur un bout de script mais qui me donne du fil à retordre !

    A la base, c'est simple. Si la valeur de colonne B est égale à 2 (plus tard, ce sera en fonction de la date du jour, une autre histoire), la valeur de la cellule de la colonne A doit être modifiée en "Terminé".
    Le truc c'est que mon script implémente le "Terminé" partout, je n'arrive pas à lui indiquer de ne modifier que la cellule en face avant de recommencer le check sur la ligne du dessous.

    Si quelqu'un a une idée, ça m'intéresse :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    function myFunction() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Suivi ventes");
    var lastRow = sheet.getLastRow();
    var startRow = 2;  
     
    //récupère la date de fin  
    var range = sheet.getRange(2, 2,lastRow-startRow+1,1 );
    var numRows = range.getNumRows();
    var date_fin_values = range.getValues();
     
     
    // définit la zone de texte à modifier  
     range = sheet.getRange(2, 1,lastRow-startRow+1,1 );
    var cell_emplacement = range.activate();  
     
     
    for (var i = 0; i <= numRows - 1; i++) {
    var date_fin = date_fin_values[i][0];
      var cell = cell_emplacement[i];
      if (date_fin == 2) {
         cell_emplacement.setValue("Terminé");   
       }
     }
    }
    Merci merci

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Un code comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function terminate() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var rows = sheet.getLastRow();
      Logger.log(rows + ' rows to process');
     
      for (var i = 1; i <= rows; ++i) {
        var b = sheet.getRange(i, 2, 1, 1);
        var a = sheet.getRange(i, 1, 1, 1);
        var value = (b.getValue() == 2) ? 'Terminé' : 'A faire';
        a.setValue(value);
      }
    }
    ?

  3. #3
    Candidat au Club
    Femme Profil pro
    Webplanneur
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup !
    C'est parfait :-)

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Après quelques essais, il semble que cette version soit plus performantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function terminate() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var rows = sheet.getLastRow() - 1; // -1 to skip header
     
      var values_b = sheet.getRange(2, 2, rows, 1).getValues();
     
      for (var i = 1; i <= rows; ++i) {
        var value_a = (values_b[i] == 2) ? 'Terminé' : 'A faire';
        var cell_a = sheet.getRange(i + 1, 1);
        cell_a.setValue(value_a);
      }
    }
    En fait, les getValue() sont lents et tu as intérêt à les sortir de la boucle. Voir https://yagisanatode.com/2017/12/13/...and-wrong-way/

  5. #5
    Candidat au Club
    Femme Profil pro
    Webplanneur
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Par contre, la nouvelle valeur est modifiée dans la ligne du dessus :/
    Je ne vois pas où corriger.

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Au temps pour moi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var value_a = (values_b[i - 1] == 2) ? 'Terminé' : 'A faire';
    Les Array de JavaScript ont des indices partant de 0 alors que les Range de Google Sheet ont des indices partant de 1. Ça fait des jeux assez inhabituels sur les indices...

  7. #7
    Candidat au Club
    Femme Profil pro
    Webplanneur
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Idem, les indices me font perdre les pédales et comme je débute :-)
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Petit souci sur script en VBS
    Par phal2ip dans le forum VBScript
    Réponses: 0
    Dernier message: 08/10/2015, 13h47
  2. Autre soucis sur mes données de ce script
    Par SteffieLili dans le forum QlikView
    Réponses: 10
    Dernier message: 01/04/2014, 14h39
  3. souci avec un script sur packages
    Par sophiedu13 dans le forum Administration système
    Réponses: 4
    Dernier message: 25/10/2007, 15h38
  4. Réponses: 4
    Dernier message: 21/08/2006, 03h54
  5. installation sur serveur + script
    Par liliprog dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/08/2004, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo