[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
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
});
}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
});
}