Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

L'envoi d'un e-mail depuis Google Sheets nécessite l'utilisation d'un script Google Apps. Mais ne vous inquiétez pas, si vous n'avez jamais créé un seul script Google Apps auparavant, l'envoi d'un e-mail est très simple.

Dans le tutoriel suivant, vous apprendrez à vérifier la valeur d'une cellule dans Google Sheets . Si la valeur dépasse un certain seuil, vous pouvez automatiquement envoyer un e-mail d'alerte à l'adresse e-mail de votre choix.

Il existe de nombreuses utilisations pour ce script. Vous pourriez recevoir une alerte si les revenus quotidiens de votre rapport de ventes descendent en dessous d'un certain niveau. Ou vous pourriez recevoir un e-mail si vos employés signalent qu'ils ont facturé trop d'heures au client dans votre feuille de calcul de suivi de projet.

Peu importe l'application, ce script est convaincant. Cela vous évitera également de devoir surveiller manuellement les mises à jour de votre feuille de calcul.

Étape 1 : Envoyer un e-mail avec Google Sheets

Avant de pouvoir créer un script Google Apps pour envoyer un e-mail à partir de Google Sheets , vous aurez également besoin d'une adresse e-mail Gmail, à laquelle Google Apps Script accédera pour envoyer vos e-mails d'alerte.

Vous devrez également créer une nouvelle feuille de calcul contenant une adresse e-mail.

Ajoutez simplement une colonne de nom et une colonne d'e-mail, et remplissez-les avec la personne que vous souhaitez recevoir l'e-mail d'alerte.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Maintenant que vous avez une adresse e-mail à laquelle envoyer un e-mail d'alerte, il est temps de créer votre script.

Pour accéder à l'éditeur de scripts, cliquez sur Outils , puis sur Éditeur de scripts .

Vous verrez une fenêtre de script avec une fonction par défaut appelée  myFunction() . Renommez-le en SendEmail() .

Ensuite, collez le code suivant dans la fonction SendEmail() :

// Fetch the email address var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("B2"); var emailAddress = emailRange.getValues(); // Send Alert Email. var message = 'This is your Alert email!'; // Second column var subject = 'Your Google Spreadsheet Alert'; MailApp.sendEmail(emailAddress, subject, message);

Voici comment ce code fonctionne :

  • getRange et getValues ​​extraient la valeur de la cellule spécifiée dans la méthode getRange.
  • var message et var subject définissent le texte qui va constituer votre e-mail d'alerte.
  • La fonction MailApp.sendEmail exécute enfin la fonction d'envoi d'e-mails Google Scripts à l'aide de votre compte Google connecté.

Enregistrez le script en cliquant sur l' icône du disque , puis exécutez-le en cliquant sur l' icône d' exécution (flèche droite).

Gardez à l'esprit que Google Script a besoin d'une autorisation pour accéder à votre compte Gmail pour envoyer l'e-mail. Ainsi, la première fois que vous exécutez le script, vous pouvez voir une alerte comme ci-dessous.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Cliquez sur Review Permissions , et vous verrez un autre écran d'alerte que vous devrez contourner.

Cet écran d'alerte est dû au fait que vous écrivez un script Google personnalisé qui n'est pas enregistré en tant que script officiel.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Cliquez simplement sur Avancé , puis cliquez sur le lien Aller à SendEmail (non sécurisé) .

Vous n'aurez besoin de le faire qu'une seule fois. Votre script s'exécutera et l'adresse e-mail que vous avez spécifiée dans votre feuille de calcul recevra un e-mail comme celui ci-dessous.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Étape 2 : Lire une valeur à partir d'une cellule dans Google Sheets

Maintenant que vous avez réussi à écrire un script Google Apps capable d'envoyer un e-mail d'alerte, il est temps de rendre cet e-mail d'alerte plus fonctionnel.

La prochaine étape que vous apprendrez consiste à lire une valeur de données dans une feuille de calcul Google, à vérifier la valeur et à émettre un message contextuel si cette valeur est supérieure ou inférieure à une limite supérieure.

Avant de pouvoir le faire, vous devrez créer une autre feuille dans la feuille de calcul Google avec laquelle vous travaillez. Appelez cette nouvelle feuille « MyReport ».

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Gardez à l'esprit que la cellule D2 est celle que vous allez vouloir vérifier et comparer. Imaginez que vous vouliez savoir chaque mois si vos ventes totales sont tombées en dessous de 16 000 $.

Créons le script Google Apps qui fait cela.

Retournez dans la fenêtre de votre Script Editor en cliquant sur Tools puis sur Script Editor .

Si vous utilisez la même feuille de calcul, vous aurez toujours la  fonction SendEmail() là-dedans. Coupez ce code et collez-le dans le Bloc-notes. Vous en aurez besoin plus tard.

Collez la fonction suivante dans la fenêtre de code.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); var ui = SpreadsheetApp.getUi(); // Check totals sales if (monthSales < 16000){="" ui.alert('sales="" too="" low!');="" }="">

Comment fonctionne ce code :

  • Chargez la valeur de la cellule D2 dans la variable monthSales .
  • L'instruction IF compare les ventes mensuelles dans la cellule D2 à 16 000 $
  • Si la valeur est supérieure à 16 000, le code déclenchera une boîte de message du navigateur avec une alerte.

Enregistrez ce code et exécutez-le. S'il fonctionne correctement, vous devriez voir le message d'alerte suivant dans votre navigateur.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Maintenant que vous disposez d'un script Google Apps capable d'envoyer une alerte par e-mail et d'un autre script capable de comparer une valeur d'une feuille de calcul, vous êtes prêt à combiner les deux et à envoyer une alerte au lieu de déclencher un message d'alerte.

Étape 3 : Rassembler le tout

Il est maintenant temps de combiner les deux scripts que vous avez créés en un seul script.

À ce stade, vous devriez avoir une feuille de calcul avec un onglet appelé Sheet1 qui contient le destinataire de l'e-mail d'alerte. L'autre onglet appelé MyReport contient toutes vos informations de vente.

De retour dans l'éditeur de script, il est temps de mettre en pratique tout ce que vous avez appris jusqu'à présent.

Remplacez tout le code dans l'éditeur de script par vos deux fonctions, éditées comme indiqué ici.

function CheckSales() { // Fetch the monthly sales var monthSalesRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MyReport").getRange("D2"); var monthSales = monthSalesRange.getValue(); // Check totals sales if (monthSales < 16000){="" fetch="" the="" email="" address="" var="" emailrange="SpreadsheetApp.getActiveSpreadsheet().getSheetByName(" sheet1").getrange("b2");"="" var="" emailaddress="emailRange.getValues();" send="" alert="" email.="" var="" message='This month your sales were ' +="" monthsales;="" second="" column="" var="" subject='Low Sales Alert' ;="" mailapp.sendemail(emailaddress,="" subject,="" message);="" }="">

Remarquez les modifications ici.

Dans l'instruction IF, collez le script SendEmail dans la fonction CheckSales() entre les crochets de l'instruction if.

Ensuite, concaténez la variable monthSales à la fin du message électronique à l'aide du caractère + .

Il ne reste plus qu'à déclencher la fonction CheckSales() tous les mois.

Pour cela, dans l'éditeur de script :

  1. Cliquez sur l' élément de menu Edition , puis cliquez sur Déclencheurs du projet en cours .
  2. En bas de l'écran, cliquez sur créer un nouveau déclencheur .
  3. Sélectionnez la fonction CheckSales à exécuter.
  4. Remplacez Sélectionner la source d' événement par temporisé .
  5. Remplacez  Sélectionner le type de déclencheur basé sur le temps par Minuterie mensuelle .

Cliquez sur Enregistrer pour finaliser le déclencheur.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Chaque mois, votre nouveau script s'exécutera et comparera le montant total des ventes mensuelles dans la cellule D2 à 16 000 $.

Si c'est moins, il enverra un e-mail d'alerte vous informant des faibles ventes mensuelles.

Utiliser Google Sheets pour envoyer un e-mail basé sur la valeur de la cellule

Comme vous pouvez le constater, Google Apps Scripts regroupe de nombreuses fonctionnalités dans un petit package. Avec seulement quelques lignes de code simples, vous pouvez faire des choses assez étonnantes.

Si vous souhaitez expérimenter davantage, essayez d'ajouter la limite de comparaison de 16 000 $ dans une autre cellule de la feuille de calcul, puis lisez-la dans votre script avant de faire la comparaison. De cette façon, vous pouvez modifier la limite en modifiant simplement la valeur dans la feuille.

En ajustant le code et en ajoutant de nouveaux blocs de code, vous pouvez vous appuyer sur ces choses simples que vous apprenez pour éventuellement créer des scripts Google étonnants.

Automatisation du processus

Jusqu'ici tout va bien, mais le script ci-dessus ne s'exécutera que manuellement si nous ne définissons aucun déclencheur. Heureusement, Google a simplifié la configuration de l’automatisation déclenchée. Voici les étapes. 

Dans l'éditeur Apps Script, cliquez sur l'icône Déclencheurs dans la barre latérale gauche (elle ressemble à une petite horloge).

Cliquez sur le lien créer un nouveau déclencheurou sur Ajouter un déclencheur bouton dans le coin inférieur droit de la page Déclencheurs.

Dans le menu déroulant Choisir la fonction à exécuter , sélectionnez envoyer des e-mails< une fonction i=4>.

Dans le menu déroulant Sélectionner la source de l'événement , choisissez Dépendant du temps.

Dans le menu déroulant Sélectionner le type de déclencheur basé sur le temps , choisissez la fréquence souhaitée (par exemple, Minuteur journalier pour les e-mails quotidiens, Minuteur hebdomadaire pour les e-mails hebdomadaires, etc.).

Le cas échéant, choisissez la plage horaire ou le jour de la semaine souhaité.

Cliquez sur Enregistrer pour créer le déclencheur.

Après l'enregistrement, cliquez sur le bouton Déployer dans le coin supérieur droit, puis suivez les instructions pour étiqueter et définir le déploiement. Vous devrez accorder les autorisations d’exécution à l’automatisation, et il en va de même pour le script lui-même.  

Quant au déclencheur donné, puisque notre exemple concerne l'envoi de rappels de factures, nous supposons qu'ils sont mensuels, et il convient de les envoyer tous les 1ers du mois entre 13h et 14h. Mais bien sûr, vous pouvez modifier la fréquence et le calendrier en fonction de vos besoins. 

Comment envoyer un e-mail avec une pièce jointe

Pour vous montrer comment envoyer des e-mails avec des pièces jointes, nous réutiliserons l'exemple de feuille avec des rappels de facture et refactoriserons l'extrait pour inclure les pièces jointes. Maintenant, nous commençons par la fonction, et le modèle d'e-mail apparaît plus tard dans le code. envoyerEmailRappels

Nous devons souligner que l'extrait ci-dessous extrait les pièces jointes d'un dossier Google Drive, où il est essentiel d'inclure l'ID du dossier et de suivre la convention de dénomination donnée. Plus d'informations à ce sujet dans la section Décomposons la section de code

function sendEmailReminders() { // Récupère la feuille active var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Récupère la plage de données (à l'exclusion de la ligne d'en-tête) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Récupère les valeurs de la plage de données var data = dataRange.getValues(); // Parcourez les lignes de données pour (var i = 0; i < data.length; i++) { var row = data[i]; // Récupère les valeurs de chaque colonne var businessName = row[0]; var email = ligne[1]; var billNumber = rangée[2]; var montantfacture = ligne[3]; var dueDate = ligne[4]; var sujet = ligne[5]; // Corps de l'e-mail var emailBody = "Cher" + Nom de l'entreprise + ",\n\n" + "Ceci est un rappel que la facture n°" + numéro de facture + " pour $" + Montant de la facture + " est dû le " + date d'échéance + ".\n" + "Veuillez trouver la facture ci-jointe.\n\n" + "Merci de votre attention prompte à ce sujet."; // Joindre la facture correspondante - Vous devez fournir l'ID du dossier correct dans lequel vos factures sont stockées var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); // En supposant que les fichiers de factures sont au format PDF var billFile; if (invoiceFiles.hasNext()) { factureFile = factureFiles.next(); } else { // Si le fichier de facture est introuvable, vous pouvez ignorer cette ligne ou enregistrer une erreur console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; } // Envoyez l'e-mail avec la pièce jointe MailApp.sendEmail({ to: email, subject: subject, body: emailBody, attachments: [invoiceFile] }); } }

Décomposons le code

1. Définissez la fonction : sendEmailReminders

fonction sendEmailReminders() {

La ligne déclare une fonction nommée , qui contiendra le code permettant d'envoyer des rappels par e-mail avec des pièces jointes.sendEmailReminders

2. Récupérez la feuille active :

var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

La ligne récupère la feuille active du document Google Sheets actuellement ouvert.

3. Obtenez la plage de données (à l'exclusion de la ligne d'en-tête) :

var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());

Cette ligne obtient la plage de données dans la feuille, à l'exclusion de la ligne d'en-tête. Il commence à partir de la deuxième ligne (ligne 2) et de la première colonne (colonne 1) et s'étend jusqu'à la dernière ligne et la dernière colonne de la feuille.

Remarque : Lorsque vous créez votre feuille personnalisée, vous devez modifier le pour qu'il corresponde à votre feuille. plage de données

4. Obtenez les valeurs de la plage de données :

var data = dataRange.getValues();

Cette ligne récupère les valeurs (contenus) de la plage de cellules définie à l'étape précédente.

5. Parcourez les lignes de données :

pour (var i = 0; i < data.length; i++) { var row = data[i];

Cette boucle parcourt chaque ligne du tableau. La variable représente la ligne de données actuelle dans chaque itération.fordatarow

6. Obtenez les valeurs de chaque colonne :

var nomentreprise = ligne[0]; var email = ligne[1]; var billNumber = rangée[2]; var montantfacture = ligne[3]; var dueDate = ligne[4]; var sujet = ligne[5];

Les lignes ci-dessus extraient les valeurs de chaque colonne de la ligne de données actuelle. Chaque valeur est ensuite attribuée à une variable pour faciliter la référence dans le script. Les valeurs données sont personnalisées pour notre feuille exemplaire. 

7. Créez le corps de l'e-mail :

var emailBody = "Cher " + Nom de l'entreprise + ",\n\n" + "Ceci est un rappel que la facture n°" + numéro de facture + " pour $" + Montant de la facture + " est dû le " + date d'échéance + ".\n" + "Veuillez trouver la facture ci-jointe.\n\n" + "Merci de votre attention prompte à ce sujet.";

Le code construit le corps de l'e-mail en utilisant les valeurs extraites de la feuille. Le corps de l'e-mail est une chaîne qui inclut le nom de l'entreprise, le numéro de facture, le montant de la facture et la date d'échéance.

8. Récupérez le fichier de facture correspondant :

var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); var fichierfacture ; if (invoiceFiles.hasNext()) { factureFile = factureFiles.next(); } else { console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; }

Ces lignes récupèrent le fichier de facture associé à la ligne courante. 

Tout d’abord, le dossier du fichier de facture est accessible à l’aide de son ID de dossier. Assurez-vous de le remplacer par l'ID de dossier réel. YOUR_FOLDER_ID_HERE

Notez que la convention de dénomination dans notre exemple est et que la facture réelle est nommée « 123456.pdf ». Si vos fichiers joints portent un nom différent, vous devrez mettre à jour le formatage. (numéro de facture + '.pdf')

Ensuite, le script recherche un fichier portant le même nom que le numéro de facture (en supposant que le fichier soit au format PDF). 

Si le fichier est trouvé, il est attribué à la variable ; sinon, le script enregistre un message d'erreur et passe à la ligne suivante.invoiceFile

9. Envoyez l'e-mail avec la pièce jointe :

MailApp.sendEmail({ à : email, sujet : sujet, corps : emailBody, pièces jointes : [invoiceFile] });

Cette ligne envoie le corps et les pièces jointes de l'e-mail, et voici les résultats que vous devriez obtenir. De plus, toutes les étapes d’automatisation s’appliquent comme décrit précédemment, et il est logique de conserver le déclencheur mensuel puisqu’il s’agit d’envoyer des rappels de facture. 

Envoyer un e-mail HTML avec GSheets

Pour envoyer un email HTML, vous pouvez apporter quelques modifications assez simples au script décrit précédemment. C'est ici: 

function sendEmailReminders() { // Récupère la feuille active var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Récupère la plage de données (à l'exclusion de la ligne d'en-tête) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Récupère les valeurs de la plage de données var data = dataRange.getValues(); // Parcourez les lignes de données pour (var i = 0; i < data.length; i++) { var row = data[i]; // Récupère les valeurs de chaque colonne var businessName = row[0]; var email = ligne[1]; var billNumber = rangée[2]; var montantfacture = ligne[3]; var dueDate = ligne[4]; var sujet = ligne[5]; // Corps de l'e-mail HTML var emailBodyHtml = "<p>Cher " + Nom de l'entreprise + ",</p>" + "<p> Ceci est un rappel que la facture n°" + numéro de facture + " pour $" + Montant de la facture + " est dû le " + dueDate + ".</p>" + "<p>Veuillez trouver la facture ci-jointe.</p>" + "<p>Merci de l'attention que vous porterez à ce sujet.</p>"; // Joindre la facture correspondante - Vous devez fournir l'ID du dossier correct dans lequel vos factures sont stockées var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); // En supposant que les fichiers de factures sont au format PDF var billFile; if (invoiceFiles.hasNext()) { factureFile = factureFiles.next(); } else { // Si le fichier de facture est introuvable, vous pouvez ignorer cette ligne ou enregistrer une erreur console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; } // Envoyez l'e-mail avec la pièce jointe MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

Dans cette version, le texte brut est remplacé par une variable contenant du contenu au format HTML. emailBodyemailBodyHtml

Lors de l'appel de la fonction, la propriété body est également remplacée par la propriété, qui enverra l'e-mail sous forme d'e-mail HTML.MailApp.sendEmail()htmlBody

Notes annexes : 

Nous utilisons au lieu de dans le script pour des raisons de commodité. L'une ou l'autre option fonctionnerait, même si elle est certainement plus lisible. Quoi qu'il en soit, n'hésitez pas à reformater le script et à remplacer l'opérateur de concaténation par des espaces réservés lors de l'interpolation de chaîne. varconstconst${expression}

De plus, aucun des scripts n'inclut de fonctions car celles-ci n'étaient pas nécessaires pour nos exemples. Mais bien sûr, il est également possible d'ajouter, et même d'automatiser, avec ces types de scripts. bccbcc

Enfin, vous pouvez pimenter les choses en ajoutant des styles CSS personnalisés (voir la fonction mise à jour ci-dessous). var emailBodyHtml =

// Corps de l'e-mail HTML avec styles CSS var emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {taille de police : 14px;}" + ".invoice-info {font-weight : gras ; couleur : #4a4a4a;}" + "</style></tête><corps>" + "<p>Cher <span class='info-facture'>" + Nom de l'entreprise + "</span>,</p>" + "<p>Ceci est un rappel que la facture n°<span class='invoice-info'>" + numéro de facture + "</span> pour $<span class='invoice-info'>" + montant de la facture + "</span> est dû le <span class='invoice-info'>" + dueDate + "</span>.</p>" + "<p>Veuillez trouver la facture ci-jointe.</p>" + "<p>Merci de l'attention que vous porterez à ce sujet.</p>" + "</body></html>" ;

Conseils de pro : 

  • Allez-y doucement, certains fournisseurs de boîtes aux lettres peuvent ne pas prendre en charge et afficher correctement les e-mails très stylisés, voire pas du tout. <style>
  • Utilisez Mailtrap Email Testing pour voir dans quelle mesure les fournisseurs de boîtes aux lettres prennent en charge vos e-mails HTML. 
  • Pour souligner encore une fois : Si vous devez envoyer avec un volume élevé, il est toujours préférable d'utiliser un MTA approprié au lieu de la fonction. envoyerE-mail
  • Sur cette note, faites attention aux limitations de votre compte Gmail. Celles-ci sont différentes pour Google Workspace et/ou votre compte privé. 

Comment envoyer des e-mails déclencheurs depuis Google Sheets ?

Quand une cellule atteint une certaine valeur

Nous allons vous montrer comment envoyer un e-mail automatique basé sur une valeur de cellule. Dans notre exemple, la facture sera envoyée lorsque la cellule Montant de la facture atteint « 0 », indiquant un client désabonné. 

La valeur de cellule donnée déclenche un e-mail de désabonnement personnalisé pour contacter immédiatement le client. Et encore une fois, les étapes d'automatisation restent les mêmes, vous pouvez toujours utiliser le déclencheur mensuel pour ces emails. 

Gardez à l’esprit que le script est le même que celui que nous avons utilisé pour envoyer des e-mails et des pièces jointes HTML. Mais il dispose d’une autre couche de fonctionnalités pour introduire la logique conditionnelle décrite. Voici le code. 

function sendEmailReminders() { // Récupère la feuille active var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Récupère la plage de données (à l'exclusion de la ligne d'en-tête) var dataRange = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()); // Récupère les valeurs de la plage de données var data = dataRange.getValues(); // Parcourez les lignes de données pour (var i = 0; i < data.length; i++) { var row = data[i]; // Récupère les valeurs de chaque colonne var businessName = row[0]; var email = ligne[1]; var billNumber = rangée[2]; var montantfacture = ligne[3]; var dueDate = ligne[4]; var sujet = ligne[5]; // Détermine le corps de l'e-mail en fonction du montant de la facture var emailBodyHtml ; if (invoiceAmount == 0) { // Sujet de l'e-mail du client de désabonnement = "Notification de désabonnement du client" ; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {taille de police : 14px;}" + ".invoice-info {font-weight : gras ; couleur : #4a4a4a;}" + "</style></tête><corps>" + "<p>Cher " + Nom de l'entreprise + ",</p>" + "<p>Nous avons remarqué que le montant de votre facture est de 0 $. Nous sommes désolés de vous voir partir et apprécierions vos commentaires sur les raisons pour lesquelles vous avez décidé de cesser d'utiliser nos services.</p>" + "<p>Si nous pouvons faire quelque chose pour améliorer nos services ou reconquérir votre entreprise, veuillez nous le faire savoir.</p>" + "<p>Merci pour vos affaires passées.</p>" + "</body></html>" ; } else { // E-mail de facture standard emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {taille de police : 14px;}" + ".invoice-info {font-weight : gras ; couleur : #4a4a4a;}" + "</style></tête><corps>" + "<p>Cher <span class='info-facture'>" + Nom de l'entreprise + "</span>,</p>" + "<p>Ceci est un rappel que la facture n°<span class='invoice-info'>" + numéro de facture + "</span> pour $<span class='invoice-info'>" + montant de la facture + "</span> est dû le <span class='invoice-info'>" + dueDate + "</span>.</p>" + "<p>Veuillez trouver la facture ci-jointe.</p>" + "<p>Merci de l'attention que vous porterez à ce sujet.</p>" + "</body></html>" ; } // Joignez la facture correspondante - Vous devez fournir l'ID de dossier correct dans lequel vos factures sont stockées var billFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); // En supposant que les fichiers de factures sont au format PDF var billFile; if (invoiceFiles.hasNext()) { billFile = billFiles.suivant(); } else { // Si le fichier de facture est introuvable, vous pouvez ignorer cette ligne ou enregistrer une erreur console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; } // Envoyez l'e-mail avec la pièce jointe MailApp.sendEmail({ to: email, subject: subject, htmlBody: emailBodyHtml, attachments: [invoiceFile] }); } }

Jusqu'à la rupture de code 

Notez que nous nous concentrons uniquement sur le contenu de la fonction pour éviter de répéter ce qui a déjà été décrit. emailCorpsHtml

La partie mise à jour du code détermine le contenu du corps de l'e-mail en fonction du montant de la facture. Si le montant de la facture est , il s'agit d'un client désabonné et un modèle d'e-mail différent est utilisé. Voici une répartition du code : « 0 »

var emailBodyHtml;

Il déclare une variable nommée et stocke le contenu du corps de l'e-mail. Et il est initialement laissé indéfini.emailBodyHtml

if (invoiceAmount == 0) { ... }

La relevé vérifie si le montant de la facture est 0. Si tel est le cas, le code entre accolades sera exécuté. Ce bloc contient le modèle d'e-mail client de désabonnement.if(`{}`)

subject = "Notification de désabonnement client" ;

La ligne définit l'objet de l'e-mail pour pour les clients désabonnements. "Notification client désabonnement"

emailBodyHtml = "<html><head><style>" +...

 La ligne définit la valeur de la variable sur le modèle d'e-mail client de désabonnement. Le modèle est une chaîne HTML avec des styles CSS définis dans la section. Le corps de l'e-mail contient des espaces réservés pour le nom de l'entreprise et un message destiné au client.emailBodyHtml<head>

} autre { ... }

Le bloc est exécuté lorsque le montant de la facture n'est pas 0. Il définit la variable sur le modèle d'e-mail de facture standard. Le modèle d'e-mail est une chaîne HTML avec des styles CSS définis dans la section. Le corps de l'e-mail contient des espaces réservés pour le nom de l'entreprise, le numéro de facture, le montant de la facture et la date d'échéance.elseemailBodyHtml<head>

En utilisant cette logique conditionnelle, le script envoie un corps d'e-mail différent selon que le montant de la facture est (désabonnement du client) ou non nul (facture standard). 0

Lorsque la valeur de la cellule change

Maintenant, nous allons prendre le même script utilisé ci-dessus et l'étendre pour couvrir un autre cas d'utilisation : un client met à niveau et le responsable de compte doit envoyer un e-mail de « Merci » avec une facture. 

Pour expliquer, l’idée est que chaque mois le chargé de compte dispose d’une nouvelle Feuille (Feuille 2 dans notre exemple) avec les identifiants des clients. 

Le code comparera désormais les deux feuilles et enverra un e-mail automatique de remerciement, au lieu de l'e-mail de facture habituel, aux clients qui ont effectué une mise à niveau (leur Montant de la facture est plus grand que le précédent). 

De plus, il n’est pas nécessaire de toucher à l’e-mail de désabonnement, car il est possible que quelqu’un décide d’arrêter d’utiliser notre service imaginaire. Voici le scénario.

function sendEmailReminders() { var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); var dataRange1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()); var dataRange2 = sheet2.getRange(2, 1, sheet2.getLastRow() - 1, sheet2.getLastColumn()); var data1 = dataRange1.getValues(); var data2 = dataRange2.getValues(); pour (var i = 0; i < data1.length; i++) { var row1 = data1[i]; var rangée2 = données2[i]; var nomentreprise = row1[0]; var email = rangée1[1]; var numéro de facture = row1[2]; var billAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(',', 39;.')); var billAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.')); if (isNaN(invoiceAmount1) || isNaN(invoiceAmount2)) { console.error("Montants de facture non valides pour l'entreprise : " + businessName + ". billAmount1 : " + billAmount1 + ", billAmount2 : " + billAmount2 ); continuer; } var dueDate = rangée1[4]; sujet variable ; var emailBodyHtml; if (invoiceAmount1 < billAmount2) { console.log("Envoi d'un e-mail de remerciement pour la mise à niveau à " + email + ". billAmount1 : " + billAmount1 + ", billAmount2 : " + montant de la facture2); subject = "Merci pour la mise à niveau"; emailBodyHtml = "<html><body>" + "<p>Cher " + Nom de l'entreprise + ",</p>" + "<p> Merci pour la mise à niveau ! Nous apprécions votre confiance et sommes impatients de vous servir.</p>" + "<p>Meilleures salutations,</p>" + "<p>Votre entreprise</p>" + "</body></html>" ; MailApp.sendEmail({ à : email, sujet : sujet, htmlBody : emailBodyHtml }); } else if (invoiceAmount1 == 0) { console.log("Envoi d'un e-mail de "notification de désabonnement client" à " + email + ". billAmount1: " + billAmount1); subject = "Notification de désabonnement client" ; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {taille de police : 14px;}" + ".invoice-info {font-weight : gras ; couleur : #4a4a4a;}" + "</style></tête><corps>" + "<p>Cher " + Nom de l'entreprise + ",</p>" + "<p>Nous avons remarqué que le montant de votre facture est de 0 $. Nous sommes désolés de vous voir partir et apprécierions vos commentaires sur les raisons pour lesquelles vous avez décidé de cesser d'utiliser nos services.</p>" + "<p>Si nous pouvons faire quelque chose pour améliorer nos services ou reconquérir votre entreprise, veuillez nous le faire savoir.</p>" + "<p>Merci pour vos affaires passées.</p>" + "</body></html>" ; MailApp.sendEmail({ à : email, sujet : sujet, htmlBody :emailBodyHtml }); } else { console.log("Envoi d'un e-mail de "Rappel de facture" à " + email + ". billAmount1 : " + billAmount1 + ", billAmount2 : " + billAmount2); sujet = « Rappel de facture » ; emailBodyHtml = "<html><head><style>" + "body {font-family: Arial, sans-serif;}" + "p {taille de police : 14px;}" + ".invoice-info {font-weight : gras ; couleur : #4a4a4a;}" + "</style></tête><corps>" "<p>Cher <span class='info-facture'>" + Nom de l'entreprise + "</span>,</p>" + "<p>Ceci est un rappel que la facture n°<span class='invoice-info'>" + numéro de facture + "</span> pour $<span class='invoice-info'>" + Montantfacture1 + "</span> est dû le <span class='invoice-info'>" + dueDate + "</span>.</p>" + "<p>Veuillez trouver la facture ci-jointe.</p>" + "<p>Merci de l'attention que vous porterez à ce sujet.</p>" + "</body></html>" ; // Joindre la facture correspondante - Vous devez fournir l'ID du dossier correct dans lequel vos factures sont stockées var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); // En supposant que les fichiers de factures sont au format PDF var billFile; if (invoiceFiles.hasNext()) { factureFile = factureFiles.next(); } else { // Si le fichier de facture est introuvable, vous pouvez ignorer cette ligne ou enregistrer une erreur console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; } MailApp.sendEmail({ à : email, sujet : sujet, htmlBody : emailBodyHtml, pièces jointes : [invoiceFile] }); } } }</p>" + "</body></html>" ; // Joindre la facture correspondante - Vous devez fournir l'ID du dossier correct dans lequel vos factures sont stockées var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); // En supposant que les fichiers de factures sont au format PDF var billFile; if (invoiceFiles.hasNext()) { factureFile = factureFiles.next(); } else { // Si le fichier de facture est introuvable, vous pouvez ignorer cette ligne ou enregistrer une erreur console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; } MailApp.sendEmail({ à : email, sujet : sujet, htmlBody : emailBodyHtml, pièces jointes : [invoiceFile] }); } } }</p>" + "</body></html>" ; // Joindre la facture correspondante - Vous devez fournir l'ID du dossier correct dans lequel vos factures sont stockées var factureFolderId = 'YOUR_FOLDER_ID_HERE'; var factureFolder = DriveApp.getFolderById (invoiceFolderId); var factureFiles = factureFolder.getFilesByName (invoiceNumber + '.pdf'); // En supposant que les fichiers de factures sont au format PDF var billFile; if (invoiceFiles.hasNext()) { factureFile = factureFiles.next(); } else { // Si le fichier de facture est introuvable, vous pouvez ignorer cette ligne ou enregistrer une erreur console.error("Fichier de facture introuvable pour le numéro de facture : " + billNumber); continuer; } MailApp.sendEmail({ à : email, sujet : sujet, htmlBody : emailBodyHtml, pièces jointes : [invoiceFile] }); } } }

Jusqu'à la rupture de code 

1. Le script commence par obtenir des références à Sheet1 et Sheet2.

var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

2. Il récupère ensuite les données des deux feuilles, en commençant par la deuxième ligne pour exclure les en-têtes.

var dataRange1 = sheet1.getRange(2, 1, sheet1.getLastRow() - 1, sheet1.getLastColumn()); var dataRange2 = sheet2.getRange(2, 1, sheet2.getLastRow() - 1, sheet2.getLastColumn()); var data1 = dataRange1.getValues(); var data2 = dataRange2.getValues();

3. Le script parcourt les lignes des deux feuilles (en supposant que le nombre de lignes est le même dans les deux feuilles). Il compare les montants des factures de Sheet1 et Sheet2 pour chaque ligne correspondante.

pour (var i = 0; i < data1.length; i++) { var row1 = data1[i]; var rangée2 = données2[i]; // Récupère les montants des factures des deux feuilles var factureAmount1 = parseFloat(row1[3].toString().replace('$', '').replace(' ,', '.')); var billAmount2 = parseFloat(row2[3].toString().replace('$', '').replace(',', 39;.'));

Copie

4. Le script vérifie ensuite les conditions d'envoi de différents types d'e-mails en fonction de la comparaison des montants des factures de Sheet1 et Sheet2.

if (invoiceAmount1 < billAmount2) { // Envoyer "Merci pour la mise à niveau" email } else if (invoiceAmount1 == 0) { // Envoyer une "notification client de désabonnement" email } else { // Envoyer un "rappel de facture" e-mail }

Copie

La comparaison clé est , qui vérifie si le montant de la facture dans la feuille 1 est inférieur au montant de la facture dans la feuille 2 pour la même ligne (c'est-à-dire le même client). Si cela est vrai, le script suppose que le client a effectué la mise à niveau et envoie un e-mail. Sinon, il vérifie d'autres conditions (désabonnement ou rappels de facture réguliers) et envoie l'e-mail approprié.if (invoiceAmount1 < billAmount2) « Merci pour la mise à niveau »

Lorsqu'un fichier Google Sheets est mis à jour

Maintenant, il vaut la peine de discuter d'un cas d'utilisation un peu différent, dans lequel des personnes autres que le responsable de compte ont accès à la feuille de calcul. 

Supposons que notre responsable de compte consacre une journée à rencontrer les clients et à répondre à leurs questions. Les clients ont accès à une feuille de calcul où ils peuvent décrire brièvement le problème et réserver un créneau. 

D'accord, il existe de bien meilleures façons de gérer les réservations et les requêtes des clients. Mais nous nous en tiendrons à cette approche pour le bien du didacticiel.

Étape 1

Tout d’abord, nous devons créer un tableau. Comme indiqué ci-dessous, le nôtre est assez simple, ne contenant que trois lignes avec Manager, Time slot et Query.

Étape 2

Ensuite, vous avez besoin de scripts Google pour déclencher des e-mails chaque fois que quelqu'un met à jour la feuille avec sa requête, réservant ainsi un créneau. Voici un exemple. 

//@OnlyCurrentDoc function processEdit(e) { MailApp.sendEmail({ à : "[email protected]" ;, objet : "Nouvelle réservation -- créneau horaire client", corps : "Un client a une question à vous poser." });

Copie

Pour vous aider à comprendre ce qui se passe, il est utile de discuter des principales fonctions. 

  • //@OnlyCurrentDoc – cette annotation signale que vous souhaitez que le script s'exécute uniquement dans la feuille Google spécifiée. La suppression de l'annotation a activé le script sur vos autres fichiers. 
  • function processEdit () – un déclencheur (nous le configurerons à l'étape suivante) exécute le script avec cette fonction. Simplement, la fonction définit le processus pour recevoir un e-mail chaque fois que quelqu'un met à jour la feuille.
  • (e) – cette annotation représente l'objet avec des données sur les modifications. Il possède une propriété range pour signaler qu'une plage ou une cellule a été modifiée. 
  • MailApp – un objet que la fonction utilise pour relayer l'e-mail. 

Avant de continuer, vous pouvez tester la feuille et le code. Si vous utilisez la feuille d'exemple, remplissez simplement l'une des cellules sous la colonne Requête et exécutez le script. L’e-mail devrait arriver immédiatement dans votre boîte de réception, mais attention, le script n’a pas encore été automatisé.

Étape 3

Il est temps de définir et d'autoriser un déclencheur pour l'envoi automatique d'e-mails. Dans Apps Script, cliquez sur l'icône du réveil dans le menu latéral. Ensuite, cliquez sur « …créer un nouveau déclencheur ». 

Dans la fenêtre contextuelle de configuration du déclencheur, sélectionnez les critères suivants.

  • processus
  • Tête
  • À partir d'une feuille de calcul
  • Lors de la modification

Remarque : Vous pouvez conserver les Paramètres de notification d'échec par défaut, mais vous pouvez les modifier cela si nécessaire. Cela n’affectera pas le fonctionnement global du déclencheur ou du script. Cela peut s'appliquer à n'importe lequel des scripts Google que vous souhaitez automatiser. 

Cliquez Enregistrer, autorisez le déclencheur sur votre compte et vous le verrez dans  Liste des déclencheurs . Assurez-vous également d'appuyer sur le bouton Déployer pour activer le déclencheur. 

Maintenant, vous pouvez revenir à la feuille, remplir une autre cellule dans la colonne Requête et vérifier si vous avez reçu la notification automatisée. 

Remarque : Vous pouvez personnaliser la feuille selon vos préférences, mais cela signifie que vous devrez également personnaliser le script.

Tags: #HOW-TO

Gingembre 2.7.53.0

Gingembre 2.7.53.0

Ginger est un vérificateur d'orthographe et de grammaire gratuit.

Blocs

Blocs

Blocks est un jeu intellectuel permettant aux élèves de 3e année du primaire de mettre en pratique leurs compétences de détection et de vision. Il est inclus par les enseignants dans le programme de soutien pédagogique en informatique.

Prezi 6.26

Prezi 6.26

Prezi est une application gratuite qui vous permet de créer des présentations numériques, en ligne et hors ligne.

Mathway

Mathway

Mathway est une application très utile qui peut t'aider à résoudre tous ces problèmes mathématiques qui nécessitent un outil plus complexe que la calculatrice intégrée de ton appareil.

Présentateur Adobe

Présentateur Adobe

Adobe Presenter est un logiciel d'apprentissage en ligne publié par Adobe Systems, disponible sur la plate-forme Microsoft Windows en tant que plug-in Microsoft PowerPoint.

Toucans 2.3.0

Toucans 2.3.0

Toucan est une plateforme technologique éducative. Il vous permet d'apprendre une nouvelle langue tout en parcourant des sites Web courants et quotidiens.

ENetViet 24.2

ENetViet 24.2

eNetViet est une application qui permet de connecter les parents avec l'école où étudient leurs enfants afin qu'ils puissent comprendre clairement la situation d'apprentissage actuelle de leur enfant.

Duolingo

Duolingo

Duolingo - Apprendre des langues gratuitement, ou simplement Duolingo, est un programme éducatif qui vous permet d'apprendre et de pratiquer de nombreuses langues différentes.

Typagerapide

Typagerapide

RapidTyping est un outil de formation au clavier pratique et facile à utiliser qui vous aidera à améliorer votre vitesse de frappe et à réduire les fautes d'orthographe. Avec des cours organisés pour de nombreux niveaux différents, RapidTyping vous apprendra à taper ou à améliorer les compétences existantes.

MathType 7.4.10.53

MathType 7.4.10.53

MathType est un logiciel d'équation interactif du développeur Design Science (Dessci), qui vous permet de créer et d'annoter des notations mathématiques pour le traitement de texte, les présentations, le eLearning, etc. Cet éditeur est également utilisé pour créer des documents TeX, LaTeX et MathML.