---
title: "Projet : une relance automatique avec validation sur n8n"
description: "Un flux n8n qui prépare la relance et attend la validation d'une personne. Données fabriquées, critères de réussite et correction commentée."
url: https://meridal.fr/apprendre/projet-relance-automatique-sur-n8n/
language: fr
written: 2026-10-09
verified: 2026-10-09
license: CC BY 4.0
---

[Apprendre](https://meridal.fr/apprendre/) › [Projets d'entraînement](https://meridal.fr/apprendre/dossier/projets/)

S'exercer · Niveau 2, Pratiquer · 90 minutes

# Projet : une relance automatique avec validation sur n8n

Les huit factures de l'atelier de relance, cette fois dans n8n : un flux qui se lance chaque lundi, lit le tableur, prépare chaque relance, l'envoie à la comptable pour approbation, et n'écrit au client qu'après son accord. Le code qui prépare les relances est exécuté par Meridal ; le reste suit la documentation de n8n. Données fabriquées, critères de réussite et correction commentée.

Écrit le 9 octobre 2026 · Vérifié le 9 octobre 2026

## Vous saurez

- Monter un flux n8n de bout en bout, du déclencheur à l'écriture dans le tableur
- Écrire un nœud Code qui décide quoi relancer, et l'essayer hors de n8n
- Placer une approbation par facture avant tout envoi
- Renvoyer à une personne ce qu'une règle ne doit pas trancher

## Dans le parcours

[Progression par projets](https://meridal.fr/apprendre/parcours/projets/)

Étape 5 sur 12

- [← Avant Atelier : une relance automatique avec validation](https://meridal.fr/apprendre/atelier-relance-automatique-avec-validation/)
- [↑ Plus général n8n en ligne ou hébergé chez soi : mise en place](https://meridal.fr/apprendre/n8n/)
- [↓ Plus concret Projet : un assistant de projet pour une équipe](https://meridal.fr/apprendre/projet-assistant-de-projet/)
- [→ Ensuite Projet : extraction de factures vers un fichier vérifié](https://meridal.fr/apprendre/projet-extraction-de-factures/)

L'essentiel

1. Le flux décide par des règles écrites : échue, non payée, au moins 7 jours de retard ; le nombre de relances déjà faites choisit le ton.
2. Au-delà de deux relances, la règle s'arrête : le dossier part à une personne, sans courriel au client.
3. Chaque relance passe par « Send and Wait for Approval » : la comptable la reçoit, et le flux attend son clic avant d'écrire au client.
4. Le nœud Code se teste hors de n8n, sur les factures de l'atelier : le résultat se compare aux montants du classeur.
5. n8n compte une exécution par passage du flux, quel que soit le nombre de nœuds : une par lundi.

## Objectif

Refaire dans n8n la relance de [l'atelier](https://meridal.fr/apprendre/atelier-relance-automatique-avec-validation/) : un flux qui, chaque lundi, lit les factures dans Google Sheets, prépare les relances, demande l'accord de la comptable pour chacune, envoie celles qu'elle approuve, et note la relance dans le tableur.

Factures fabriquées : les sociétés, les adresses en « .example », qui ne reçoivent aucun courriel, et les montants sont inventés.

Un compte n8n, en ligne ou chez vous ([n8n : mise en place](https://meridal.fr/apprendre/n8n/)) ; un compte Google pour Sheets et Gmail. Node.js seulement pour essayer le code hors de n8n. Une heure et demie environ.

## Données fournies

Le tableau des huit factures de l'atelier, à ouvrir dans Google Sheets. Retards comptés au 8 octobre 2026 ; le flux les recalcule à partir des échéances.

- Factures en retard Excel, 6 Ko · huit factures, deux colonnes calculées [Télécharger](https://meridal.fr/assets/apprendre/fichiers/atelier-relance/factures-en-retard.xlsx)

  **Voir le tableau**

  Exercice de Meridal. Les sociétés, les adresses et les montants sont fabriqués pour l'exercice ; les adresses en « .example » ne reçoivent aucun courriel. Les retards sont comptés au 8 octobre 2026.

  | N° | Client | Contact | Montant TTC (€) | Échéance | Jours de retard | Payée | Relances déjà faites | Pénalités de retard (€) | Indemnité forfaitaire (€) |
  |---|---|---|---|---|---|---|---|---|---|
  | F-2026-097 | Société A | compta@societe-a.example | 1250,00 | 15/09/2026 | 23 | non | 0 |  |  |
  | F-2026-101 | Société B | factures@societe-b.example | 4320,00 | 30/08/2026 | 39 | non | 1 |  |  |
  | F-2026-104 | Société C | admin@societe-c.example | 860,40 | 30/09/2026 | 8 | non | 0 |  |  |
  | F-2026-108 | Société D | paiements@societe-d.example | 2975,00 | 05/10/2026 | 3 | oui | 0 |  |  |
  | F-2026-110 | Société E | compta@societe-e.example | 610,00 | 31/07/2026 | 69 | non | 2 |  |  |
  | F-2026-112 | Société F | contact@societe-f.example | 3400,00 | 15/10/2026 | 0 | non | 0 |  |  |
  | F-2026-115 | Société B | factures@societe-b.example | 1980,00 | 20/09/2026 | 18 | oui | 1 |  |  |
  | F-2026-118 | Société G | daf@societe-g.example | 7200,00 | 25/09/2026 | 13 | non | 0 |  |  |

  #### Les deux colonnes calculées

  **Pénalités de retard** : un calcul indicatif, montant × taux × jours de retard ÷ 365, avec le taux par défaut du second semestre 2026, 12,40 %. Ce taux est calculé par Meridal d'après l'article L441-10 du code de commerce : le taux de la Banque centrale européenne en vigueur au 1er juillet 2026, 2,40 %, majoré de 10 points ; aucune autorité ne le publie. Votre contrat peut prévoir un autre taux, jamais inférieur à trois fois le taux de l'intérêt légal, soit 8,25 % au second semestre 2026.

  **Indemnité forfaitaire** : 40 euros pour frais de recouvrement, dus de plein droit par tout professionnel en retard de paiement (article D441-5 du code de commerce).

  Les pénalités sont dues sans qu'un rappel soit nécessaire ; la relance ne crée pas le droit, elle le rappelle.

## Consignes

Le flux, nœud par nœud

1. 1 Chaque lundi à 8 h · Schedule Trigger intervalle Weeks, Trigger on Weekdays : Monday, Trigger at Hour : 8am
2. 2 Lire les factures · Google Sheets Get Row(s), le classeur et l'onglet des factures, sans filtre
3. 3 Préparer les relances · Code Run Once for All Items ; le code ci-dessous
4. 4 Relance ou personne · If action est égal à personne
5. 5 Prévenir une personne · Gmail Send, à la comptable : le motif, sans écrire au client
6. 6 Une facture à la fois · Loop Over Items Batch Size : 1
7. 7 Faire approuver · Gmail Send and Wait for Approval, à la comptable ; Approve and Disapprove
8. 8 Approuvée ? · If la réponse d'approbation, lue dans la sortie du nœud précédent
9. 9 Écrire au client · Gmail Send, au contact de la facture, avec l'objet et le texte préparés
10. 10 Noter la relance · Google Sheets Update Row : Relances déjà faites plus un, repéré par le N°

*Le nœud 4 envoie les dossiers « personne » vers le nœud 5, les relances vers la boucle ; après le nœud 10, et après un refus au nœud 8, la boucle reprend à la facture suivante. Cerclés : l'approbation, et ce qui en dépend. Noms des nœuds et des réglages en anglais, ceux de n8n.*

1. Ouvrez le tableau dans Google Sheets. Mettez votre propre adresse dans la colonne Contact de deux factures, pour recevoir de vrais courriels ; laissez les autres en « .example ».
2. Dans n8n, créez les identifiants Google pour Sheets et pour Gmail, puis les dix nœuds de la figure.
3. Collez le code du nœud 3, et lancez le flux à la main, avec le bouton d'essai : regardez la sortie de chaque nœud.
4. Approuvez une relance, refusez-en une, laissez une sans réponse ; regardez ce qui part, et ce qui est noté dans le tableur.
5. Ajoutez un flux d'erreur qui vous prévient si une exécution échoue.
6. Enregistrez et publiez le flux : un déclencheur programmé ne part que sur un flux publié.

`preparer-relances.js`

```
// Nœud Code de n8n, mode « Run Once for All Items » : une ligne par facture lue dans le tableur.
// Garde les factures échues et non payées ; prépare la relance ; envoie le reste à une personne.
const AUJOURDHUI = new Date('2026-10-08T12:00:00');   // pour l'exercice ; en service : new Date()
const SEUIL_JOURS = 7;                                  // pas de relance avant 7 jours de retard
const TAUX = 0.124;                                     // taux par défaut, second semestre 2026 (voir l'atelier)

const nombre = (v) => typeof v === 'number' ? v : Number(String(v).replace(/\s/g, '').replace(',', '.'));
const date = (v) => {
  const m = String(v).match(/^(\d{2})\/(\d{2})\/(\d{4})$/);       // 15/09/2026
  return m ? new Date(`${m[3]}-${m[2]}-${m[1]}T12:00:00`) : new Date(`${v}T12:00:00`);
};
const euros = (x) => x.toLocaleString('fr-FR', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) + ' €';

const sortie = [];
for (const item of $input.all()) {
  const f = item.json;
  if (f['Payée'] === 'oui') continue;
  const jours = Math.round((AUJOURDHUI - date(f['Échéance'])) / 86400000);
  if (jours < SEUIL_JOURS) continue;
  const montant = nombre(f['Montant TTC (€)']);
  const relances = nombre(f['Relances déjà faites']);
  const base = { numero: f['N°'], client: f['Client'], contact: f['Contact'], montant, jours, relances };
  if (relances >= 2) {                                   // la suite se décide par une personne
    sortie.push({ json: { ...base, action: 'personne',
      motif: `${relances} relances déjà faites, ${jours} jours de retard : la suite se décide par une personne.` } });
    continue;
  }
  const penalites = Math.round(montant * TAUX * jours / 365 * 100) / 100;
  const objet = `Facture ${f['N°']} : ${relances === 0 ? 'rappel' : 'deuxième rappel'}`;
  let texte = `Bonjour,\n\nSauf erreur de notre part, la facture ${f['N°']}, d'un montant de ${euros(montant)} TTC, `
    + `arrivée à échéance le ${f['Échéance']}, reste à régler, soit ${jours} jours de retard.`;
  if (relances === 1) {
    texte += `\n\nÀ ce jour, les pénalités de retard s'élèvent à ${euros(penalites)}, auxquelles s'ajoute `
      + `l'indemnité forfaitaire de 40,00 € pour frais de recouvrement.`;
  }
  texte += `\n\nSi le règlement est déjà parti, merci de ne pas tenir compte de ce message.\n\nBien cordialement,`;
  sortie.push({ json: { ...base, action: 'relance', penalites, objet, texte } });
}
return sortie;
```

Le nœud Code exécute du JavaScript ; dans le mode « Run Once for All Items », par défaut, il tourne une fois pour toutes les lignes reçues. La date est figée au 8 octobre 2026 pour que vos résultats se comparent à la correction ; en service, `new Date()`. Les pénalités suivent le taux et la formule de l'atelier.

## Critères de réussite

- Le nœud Code rend 5 éléments : 4 relances et 1 dossier pour une personne F-2026-097, 101, 104, 118 ; F-2026-110
- Les factures payées et celle qui n'est pas échue ne bougent pas F-2026-108, 115 et 112
- La relance de F-2026-101 est un deuxième rappel, avec 57,24 € de pénalités et l'indemnité de 40 € le même montant que la colonne calculée du classeur
- La comptable reçoit une demande d'approbation par relance, et rien ne part au client sans son clic
- Une relance refusée n'écrit rien au client et ne touche pas au tableur
- Une relance approuvée part au client, et le tableur passe ses « Relances déjà faites » de 0 à 1, ou de 1 à 2
- Le dossier de la Société E arrive à la comptable avec son motif, et pas au client deux relances déjà faites, 69 jours de retard

## Indications

**Le nœud Code ne rend rien**

**Cause**Les noms de colonnes lus dans Sheets ne sont pas ceux du code : un accent, une majuscule, une parenthèse.

**À faire**Regardez la sortie du nœud Google Sheets, et recopiez les noms tels quels : « Payée », « Échéance », « Montant TTC (€) ».

**Toutes les factures partent en relance**

**Cause**Les dates arrivent dans une autre forme que JJ/MM/AAAA, et le calcul des jours échoue.

**À faire**Le code lit JJ/MM/AAAA et AAAA-MM-JJ ; regardez la forme reçue dans la sortie de Sheets.

**La comptable reçoit toutes les demandes d'un coup, ou une seule**

**Cause**La boucle n'est pas en place, ou sa taille de lot n'est pas 1.

**À faire**Loop Over Items, Batch Size : 1, et le retour vers la boucle après le dernier nœud.

**Le flux n'est pas parti lundi**

**Cause**Le flux n'est pas publié, ou le fuseau horaire de l'instance n'est pas le bon.

**À faire**Publiez-le ; réglez le fuseau horaire ([n8n : mise en place](https://meridal.fr/apprendre/n8n/)).

**Des exécutions restent en attente**

**Cause**Une demande d'approbation sans réponse garde son exécution ouverte.

**À faire**C'est voulu : rien ne part. Pour une approbation plus complexe, n8n conseille le nœud Wait, qui peut limiter le temps d'attente.

**Une relance est partie deux fois**

**Cause**Le flux a tourné deux fois avant la mise à jour du tableur.

**À faire**Le nœud 10 juste après l'envoi ; et un essai à la main sur des adresses en « .example » seulement.

## Correction commentée

**Ouvrir la correction**

Le nœud Code, exécuté par Meridal hors de n8n : un petit programme lit les huit factures de l'atelier, les passe au code comme le ferait n8n, et affiche le résultat.

`essai.mjs`

```
// Essai du nœud Code hors de n8n : $input est remplacé par les huit factures de l'atelier.
import { readFileSync } from 'node:fs';
const md = readFileSync(new URL('../../../automatiser/atelier-relance/fichiers/factures-en-retard.md', import.meta.url), 'utf8');
const lignes = md.split('\n').filter((l) => l.startsWith('| F-'));
const tete = md.split('\n').find((l) => l.startsWith('| N°')).split('|').slice(1, -1).map((c) => c.trim());
const items = lignes.map((l) => {
  const cases = l.split('|').slice(1, -1).map((c) => c.trim());
  return { json: Object.fromEntries(tete.map((t, i) => [t, cases[i]])) };
});
const code = readFileSync(new URL('./preparer-relances.js', import.meta.url), 'utf8');
const resultat = new Function('$input', code)({ all: () => items });
for (const { json: r } of resultat) {
  console.log(`${r.numero}  ${r.client}  ${r.jours} jours  ${r.action === 'relance' ? r.objet : 'à une personne'}`);
}
const deux = resultat.find((r) => r.json.objet && r.json.objet.includes('deuxième'));
console.log('\n--- ' + deux.json.objet + ' ---\n' + deux.json.texte);
```

La sortie`node essai.mjs`

```
F-2026-097  Société A  23 jours  Facture F-2026-097 : rappel
F-2026-101  Société B  39 jours  Facture F-2026-101 : deuxième rappel
F-2026-104  Société C  8 jours  Facture F-2026-104 : rappel
F-2026-110  Société E  69 jours  à une personne
F-2026-118  Société G  13 jours  Facture F-2026-118 : rappel
 
--- Facture F-2026-101 : deuxième rappel ---
Bonjour,
 
Sauf erreur de notre part, la facture F-2026-101, d'un montant de 4 320,00 € TTC, arrivée à échéance le 30/08/2026, reste à régler, soit 39 jours de retard.
 
À ce jour, les pénalités de retard s'élèvent à 57,24 €, auxquelles s'ajoute l'indemnité forfaitaire de 40,00 € pour frais de recouvrement.
 
Si le règlement est déjà parti, merci de ne pas tenir compte de ce message.
 
Bien cordialement,
```

Exécuté le 9 octobre 2026 avec Node.js 22.17.0. Le flux complet dans n8n n'a pas encore été exécuté par Meridal.

**Les trois écartées.** F-2026-108 et F-2026-115 sont payées ; F-2026-112 arrive à échéance le 15 octobre. Une règle les écarte avant toute écriture, sans IA.

**La Société E.** Deux relances sans effet, 69 jours de retard : la suite, une mise en demeure, un appel, un arrangement, se décide par une personne qui connaît le client. Le flux le lui signale ; il n'écrit pas au client.

**Ce qui compte le plus.** L'ordre des nœuds 7 à 10 : l'approbation avant l'envoi, la mise à jour du tableur après. Un flux qui écrit au client puis demande l'avis de la comptable n'a pas d'approbation, il a un compte rendu.

## Extensions

- **Un texte rédigé par l'IA** : un nœud de modèle à la place du texte fixe, avec la consigne de n'utiliser que les données de la facture ; l'approbation reste. n8n propose des nœuds pour les modèles d'OpenAI, d'Anthropic, de Mistral et d'autres.
- **Un agent qui choisit ses outils** : n8n peut exiger l'accord d'une personne avant chaque outil d'un agent ; il le recommande pour les envois ( [un agent en entreprise de bout en bout](https://meridal.fr/apprendre/un-agent-en-entreprise/) ).
- **Un tableur qui reste juste** : la date de la dernière relance dans une colonne de plus, remplie par le nœud 10.
- **Le même flux ailleurs** : Power Automate, Make ou Zapier ( [les outils d'automatisation](https://meridal.fr/apprendre/outils-d-automatisation/) ).

## Lectures suivantes

↑ Plus général [n8n en ligne ou hébergé chez soi : mise en place Faire · Niveau 2 · 18 minutes](https://meridal.fr/apprendre/n8n/)

← Avant [Atelier : une relance automatique avec validation S'exercer · Niveau 2 · 60 minutes](https://meridal.fr/apprendre/atelier-relance-automatique-avec-validation/)

Vous êtes ici

Projet : une relance automatique avec validation sur n8n

→ Ensuite [Projet : extraction de factures vers un fichier vérifié S'exercer · Niveau 3 · 30 minutes](https://meridal.fr/apprendre/projet-extraction-de-factures/)

Progression par projets · étape 6 sur 12

↓ Plus concret [Projet : un assistant de projet pour une équipe S'exercer · Niveau 1 · 40 minutes](https://meridal.fr/apprendre/projet-assistant-de-projet/)

[Tout le dossier « Projets d'entraînement »](https://meridal.fr/apprendre/dossier/projets/)

Les pages qui renvoient ici

- [Projet : un tableau de bord alimenté par un formulaire](https://meridal.fr/apprendre/projet-tableau-de-bord-par-formulaire/)

**Limites et sources**

Les factures et les sociétés sont fabriquées ; le nœud Code a été exécuté hors de n8n, sur ces factures ; le flux complet n'a pas encore été exécuté par Meridal.

Les noms des nœuds et des réglages sont ceux de la documentation de n8n, lue le 9 octobre 2026, en anglais.

1. [n8n, Gmail, Send and Wait for Approval](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.gmail/message-operations) ; [n8n, Google Sheets](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/sheet-operations) ; [n8n, le nœud Code](https://docs.n8n.io/build/code-in-n8n/using-the-code-node) ; [n8n, Loop Over Items](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.splitinbatches) ; [n8n, Schedule Trigger](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger).
2. Le code : `apprendre/pages/projets/projet-relance-n8n/code/`.

Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.fr) : reprenez-les en citant Meridal. Le code sous licence MIT.

Service correspondant

Ne plus recopier d'un logiciel à l'autre

1 100 € à 3 400 €, puis sur devis

[Voir le service](https://meridal.fr/offre/#automatisation)

## Un premier échange de 30 minutes

En visio et sans frais : vous décrivez votre situation, nous vous indiquons ce qui est réalisable, avec quels outils et pour quel ordre de prix. Vous pouvez aussi nous écrire ; chaque message reçoit une réponse écrite.

[Réserver 30 minutes](https://meridal.fr/contact/#reserver) [Écrire un message](https://meridal.fr/contact/)
