[Script] Vérifier fin de tableau pour envoie de mail

Salut,

je ne sais pas si je vais arriver à être clair, mais je souhaite mettre en place un script qui envoie le contenu d'un tableau, tous les jours.

Je suis arrivé à mettre en place la fonction d’envoi du mail, à récupérer le contenu du tableau, sauf que le problème, puisque ce dernier peut voir son contenu varier chaque jours, mon mail contient des entrées vides. Comment puis-je vérifier cela, afin que cela ne soit pas ajouté au mail ?

Je vous mets le screen du tableau en question, ainsi que de mon code

code envoi mail tableau

Je précise, le tableau, a été généré par la forumule suivante "=FILTER(CHOOSECOLS(Suivi;1;10);Chantiers!M11:M="Non";Chantiers!N11:N="Oui")"

Peut-être que je peux directement inclure cette formule dans min script ?

Bonjour,

Il est en effet possible d'inclure une condition, si je comprends bien votre script :

- 1 vous appelez sendEmail()

- 2 clientData est généré par la fonction getData() (cela ressemble à une liste 2D : client name , client number)

- 3 body est généré à partir de la fonction getEmailText(clientData) qui itère sur chaque client name pour créer un texte en format html (client name + client number)

- 4 avec MailApp vous envoyer un mail.

Le script semble un peu complexe pour arriver à ce résultat mais soit, normalement la taille des données est adaptées dans la génération de la variable text, ainsi, si vous avec 3 données client + number vous avez text X3 avec chaque client ?

Ce qui vous pose problème c'est lorsqu'il y a aucune donnée ? Dans ce cas text = "", vous pouvez ajoutez une condition dans sendEmail avant MailApp :

if(body !=""){ // si body est différent de vide, alors {
MailApp....

....

}

Salut,

merci pour ta réponse, j'ai pu trouver la solution et j'ai même pu peaufiner le mon scrip, pour aller chercher directement les donnés à la source et faire de même pour l’entièreté du classeur.

Souhaites-tu voir le script ?

Pourquoi pas oui ?

// Fonction principale pour envoyer l'e-mail aux clients à relancer
function sendEmail() {
  // Récupérer les données des clients à partir de toutes les feuilles
  var clientData = retrieveAllClientData();

  // Générer le corps de l'e-mail à partir des données des clients
  var body = generateEmailText(clientData);

  // Envoyer l'e-mail
  MailApp.sendEmail({
    to: "test@test.fr, test2@test.fr",
    subject: "Clients à relancer",
    body: body
  });
}

// Générer le texte de l'e-mail à partir des données des clients
function generateEmailText(clientData) {
  var text = "Merci de bien vouloir relancer les clients suivants :\n\n";
  clientData.forEach(function(clientInfo) {
    text += clientInfo.name + ", facture n°" + clientInfo.number + "\n";
  });
  return text;
}

/**
 * Récupère les données des clients à partir de toutes les feuilles en appliquant un filtre spécifique.
 * Seuls les clients répondant à certains critères sont inclus.
 */
function retrieveAllClientData() {
  // Récupérer toutes les feuilles du classeur
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  // Initialiser un tableau pour stocker les données des clients à relancer
  var allClientsData = [];

  // Parcourir chaque feuille
  sheets.forEach(function(sheet) {
    // Récupérer les données des clients de la feuille actuelle
    var clientData = retrieveClientData(sheet);

    // Ajouter les données des clients de la feuille actuelle au tableau global
    allClientsData = allClientsData.concat(clientData);
  });

  // Retourner le tableau contenant les données des clients à relancer
  return allClientsData;
}

/**
 * Récupère les données des clients à partir d'une feuille spécifique en appliquant un filtre spécifique.
 * Seuls les clients répondant à certains critères sont inclus.
 */
function retrieveClientData(sheet) {
  // Récupérer toute la plage de données dans la feuille spécifiée
  var dataRange = sheet.getDataRange();

  // Récupérer les valeurs de la plage de données
  var values = dataRange.getValues();

  // Initialiser un tableau pour stocker les données des clients à relancer
  var clients = [];

  // Parcourir toutes les lignes de données
  for (var i = 0; i < values.length; i++) { 
    // Vérifier si le client répond aux critères de relance (par exemple, "Non" dans la colonne 13 et "Oui" dans la colonne 14)
    if (values[i][12] === "Non" && values[i][13] === "Oui") {
      // Créer un objet client avec le nom et le numéro de facture du client et l'ajouter au tableau des clients à relancer
      var client = {
        name: values[i][1], // Récupérer la colonne des noms de clients (colonne 1)
        number: values[i][10] // Récupérer la colonne des numéros de factures (colonne 10)
      };
      clients.push(client);
    }
  }

  // Retourner le tableau contenant les données des clients à relancer
  return clients;
}

J'espère que mon code est compréhensible !

en version simplifiée :

function sendEmail() {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var body = "Merci de bien vouloir relancer les clients suivants :\n\n";
  sheets.forEach(function(sheet) {
    var dataRange = sheet.getDataRange();
    var values = dataRange.getValues();
    values.forEach(function(row) {
      if (row[12] === "Non" && row[13] === "Oui") {
        body += row[1] + ", facture n°" + row[10] + "\n";
      }
    });
  });
  MailApp.sendEmail({
    to: "test@test.fr, test2@test.fr",
    subject: "Clients à relancer",
    body: body
  });
}
Rapide pour la simplification haha
Merci, je vais le lire et essayer de le comprendre, pour apprendre !

C'est relativement simple, ligne par ligne :

function sendEmail() {  // nom de la fonction
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); // on stocke dans une variable toutes les feuilles du fichier sheets actif
var body = "Merci de bien vouloir relancer les clients suivants :\n\n"; // base du corps du mail
sheets.forEach(function(sheet) { // itération sur chaque feuille du fichier (précédemment stockée)
var dataRange = sheet.getDataRange(); // stockage de la range de la feuille itérée
var values = dataRange.getValues(); // stockage des données de la range itérée dans une liste : [[données ligne 1],[données ligne2], etc. ]
values.forEach(function(row) { // itération sur chaque ligne de donnée
if (row[12] === "Non" && row[13] === "Oui") { // si cellule 12 = Non ET cellule 12 = Oui alors {
body += row[1] + ", facture n°" + row[10] + "\n"; // on incrémente à body : cellule 1 + texte "facture n°" + cellule 10 + renvoi à la ligne
}
});
});
MailApp.sendEmail({ // envoi du mail
to: "test@test.fr, test2@test.fr", // à 
subject: "Clients à relancer", // sujet
body: body // corps du mail
});
}
Rechercher des sujets similaires à "script verifier fin tableau envoie mail"