Google Apps Script : importer automatiquement un CSV depuis une pièce jointe de Gmail vers un Google Sheets
Vous recevez tous les jours un fichier CSV en pièce jointe de la part d’un de vos collègues. Ce fichier contient des données que vous souhaitez importer dans un Google Sheets. Et bien pourquoi ne […]

Ce que vous allez découvrir
- Fonction de récupération dans un tableau Sheets des données d’une pièce jointe de type CSV située dans le dernier email d’un destinataire donné
- Fonction d'insertion des données dans un Google Sheets
- Appel des deux fonctions précédentes dans une seule et même fonction MAIN()
- Planifier l’appel de la fonction MAIN()
Google Apps Script : importer automatiquement un CSV depuis une pièce jointe de Gmail vers un Google Sheets
Vous recevez tous les jours un fichier CSV en pièce jointe de la part d’un de vos collègues. Ce fichier contient des données que vous souhaitez importer dans un Google Sheets. Et bien pourquoi ne pas automatiser cette tâche chronophage avec un peu de code ?
Google Apps Script est là pour vous !
Avant toute chose posons un contexte :
Olivier travaille dans une usine de production d’arbres à came et vilebrequins pour moteurs de camions. Il est en charge de la qualité et donc de la gestion des rebuts. Ces derniers sont répertoriés par le chef de production dans un logiciel. Le chef de production, appelons-le Ghislain, extrait quotidiennement ces données du logiciel sous format CSV (Comma Separator Value : fichier de données séparées par une virgule) et envoie tous les jours à 9h00 un fichier en pièce jointe d’un mail à Olivier.
Olivier doit donc manuellement :
Vérifier si Ghislain a envoyé un mail concernant les rebutsOuvrir le mail reçu de GhislainEnregistrer le CSV dans le driveOuvrir le CSV avec Google SheetsCopier les données du Google SheetsColler ces données dans un autre Google Sheets à la suite des anciennes donnéesSupprimer le fichier CSV du drive
Beaucoup d’étapes pour un simple transfert de données !
Le contexte est posé, voyons comment automatiser tout ceci avec Google Apps Script, la plateforme de développement de Google :
Fonction de récupération dans un tableau Sheets d
Veuillez créer un compte pour lire la suite de cette ressource
L’accès à cette ressource se fait gratuitement en créant un compte Numerifan. Les abonnements payants donnent également accès aux cours gratuits.

Cet article est réservé aux abonnés. Pourquoi ?
Fournir tout ce contenu nous demande beaucoup de temps, des ressources et une veille permanente. Accédez à ce contenu en rejoignant notre super communauté, pour tous nous remercier 💪
Besoin d'un peu plus d'aide sur Sheets ?
Des formateurs sont disponibles toute l'année pour vous accompagner et optimiser votre utilisation de Sheets, que ce soit pour votre entreprise ou pour vos besoins personnels !
Découvrir nos formations Sheets- Tutos connexes
- Plus de l'auteur
Bonjour,
Si j’ai bien vu, dans la function du second script :
function IMPORT_DATA(csvData) {
la parenthèse n’est pas fermée.
Il faut donc ajouter } en FIN de la fonction.
Elisa
Cet avis vous a été utile ?
Merci Elisa pour la remarque ! Ghislain a corrigé.
Cet avis vous a été utile ?
Bonjour , Question bête: faut il forcément être avec G suite?
Merci ?
Cet avis vous a été utile ?
Les méthodes et fonctions abordées dans cet article sont spécifiques aux outils de la suite Google. Il ne vous sera donc malheureusement pas possible de les utiliser sous Outlook ou une messagerie sous Mac par exemple.
Cependant vous pouvez transférer automatiquement vos mail vers une adresse GMAIL et travailler à partir de cette dernière.
Cet avis vous a été utile ?
Bonjour,
Dans la fonction MAIN, il faut renommer IMPORT_AVEC_FILTRE_ID(RECUP_CSV_PIECE_JOINTE(mail)) en
IMPORT_DATA(RECUP_CSV_PIECE_JOINTE(mail)) sinon ça ne fonctionne pas 😉
Merci pour ce script, il va bien me servir !!
Cet avis vous a été utile ?
Bonjour!
Un tour grand merci pour ce script, il pourra en effet m’aider dans bon nombre de cas 🙂
Google script indique qu’il ne sait pas lire la fonction
var dernier_email= fil_email.getMessage()[fil_mail.getMessages().length-1]
il me retourne cette erreur:
TypeError: fil_email.getMessage is not a function (line 5, file « Code »)
Un tout grand merci
Cet avis vous a été utile ?
idem, tu as trouvé une solution ?
Cet avis vous a été utile ?
Pareil, vous avez une solution ?
Cet avis vous a été utile ?
Bonjour,
Attention c’est la fonction getMessages (avec un s à la fin)
Il y a une coquille dans le dernier script de l’article.
Cet avis vous a été utile ?
Bonjour,
Merci pour cet article 🙂
Je voudrais importer automatiquement un fichier Excel depuis une piece jointe de gmail vers un dossier sur mon PC.
C’est faisable ?
Cet avis vous a été utile ?
Bonjour Laurie, oui cela est possible mais il faut enregistrer le fichier XLS puis le convertir en Google Sheets. Pour cela voici un extrait de code qui permet la conversion ( Attention : cette méthode nécessite l’ajout de l’API DRIVE dans les services de l’interface Google Apps Script : https://developers.google.com/drive/api/v3/reference)
//Enregistrement du fichier dans le dossier
var fichier = dossier.createFile(piece_jointe_blob)
//Conversion du fichier xls en Google Sheet
//Nécessite l’ajout du service Drive API (voir barre latérale de gauche en bas)
var newFile = { title: fichier.getName() + ‘_converted’ };
file = Drive.Files.insert(newFile, piece_jointe_blob, { convert: true });
Cet avis vous a été utile ?
Bonjour
Est il possible de faire l’import sans la première ligne du CSV qui est l’entête dans mon cas ?
Cet avis vous a été utile ?
Bonjour,
Vous pouvez couper le tableau avec la fonction splice. Ce qui donnerait :
//Découpe du tableau en enlevant la 1ere ligne:
csvData=csvData.splice(0,1)
//Copie du tableau dans le Google Sheets
REBUTS.getRange(REBUTS.getLastRow()+1, 2, csvData.length, csvData[0].length).setValues(csvData)
Cet avis vous a été utile ?
Bonjour,
Merci pour ce script !
Par contre j’ai un message d’erreur suivant :
Erreur
ReferenceError: email is not defined
RECUP_CSV_PIECE_JOINTE @حسن الحسن تمياس Code.gs:3
Avez vous une solution ?
Cet avis vous a été utile ?
Bonjour,
Il semblerait que votre variable email ne soit pas définie dans l’utilisation du script, d’après le message d’erreur. Il faut donc vérifier que vous n’ayez pas utiliser mail au lieu de email comme nom de variable
Cet avis vous a été utile ?
Dans mon cas je reçois un mail tous les mois avec des données CSV appelé VITESSE DE FACTURATION, je souhaite déposer les données automatiquement dans un sheet intitulé FACTURATION dans l’onglet DFMED.
J’arrive à la saturation, j’ai des erreurs à tous les niveaux !
Je précise je débute dans le langage script !
Cet avis vous a été utile ?
bonjour
j’ai une erreur de ce type que je n’arrive pa a résoudre
Erreur
Exception: Gmail operation not allowed. : Mail service not enabled
RECUP_CSV_PIECE_JOINTE @حسن الحسن تمياس Code.gs:3
et j’ai 2 question sur cette ligne
var fil_email=GmailApp.search(‘from:’+mail +’ filename:csv’ ,0,1)[0]
– à l’emplacemment « +mail + » je doit préciser l’adresse de l’expéditeur ? j’ai fait plusieurs tentative mais a partir de « @حسن الحسن تمياس » la ligne devient erronée »
-« gmailapp.search » est applicable seulement au adresse gmail ou pas ? si je doit utiliser une adresse hotmail je doit changer la variable ?
merci d’avance pour les réponses
Cet avis vous a été utile ?
Bonjour Jérémy,
Il semble que l’API (la boite à outil) de Gmail ne semble pas active dans votre code.
Normalement, les API s’activent lors de la première exécution du code. Cependant cela peut parfois ne pas s’activer.
Pour vérifier cela, il faut regarder dans la présentation du projet (via le menu en haut à gauche).
Dans la liste, des champs OAuth, vous devriez avoir la ligne avec https://www.googleapis.com/auth/script.send_mail.
Si ce n’est pas le cas : recréer une même fonction avec un autre nom et tentez de lancer la nouvelle fonction créée
Si c’est le cas : supprimez votre script et fichier Sheets et le recréer
Cet avis vous a été utile ?
Bonjour,
Tout d’abord merci à Mr Sunjuan pour ce code,
J’ai rectifié quelque point dans le code pour l’adapter à mon besoin et maintenant le code est bien fonctionnel:
La variable déclarée dans la fonction main est : « mail » => il faut changer dans la ligne 4 « email » en « mail ».
Pour la ligne 10, j’ai comme séparateur dans le fichier csv « ; ». alors je doit changer replace(/ »/g, ‘ ‘) par replace(/;/g, » « ). (il faut faire la différence entre ‘ ‘ et » « ).
En fin, pour la ligne , il faut chager » parseCsv(txt, » « ) » et » parseCsv(txt, » « ) » et n’oublier pas l’espace entre » « .
Le code complet :
function RECUP_CSV_PIECE_JOINTE(mail){
// Recherche les messages venant de l’adresse “email” et qui ont une piece jointe au format CSV
var fil_email=GmailApp.search(‘from:’+mail +’ filename:csv’ ,0,1)[0]
// Prends le dernier message
var dernier_email=fil_email.getMessages()[fil_email.getMessages().length-1]
//Recupère la première pièce jointe
var piece_jointe=dernier_email.getAttachments()[0]
//Mise en forme des données et transformation en texte
var txt=piece_jointe.getDataAsString().replace(/;/g, » « )
//Séparation des données pour renvoyer un tableau
var csvData = Utilities.parseCsv(txt, » « )
//Renvoie le tableau de données
return csvData
}
function IMPORT_DATA(csvData){
//Récupère l’onglet GESTION REBUTS
var REBUTS=SpreadsheetApp.getActive().getSheetByName(« alarmes »)
//Vérification que le tableau possède des données
if(csvData.length>0){
//Insertion des données
REBUTS.getRange(REBUTS.getLastRow()+1, 2, csvData.length, csvData[0].length).setValues(csvData)
Logger.log(« Import terminé »)
}
else{
Logger.log(« Aucune données dans le csv »)
}
}
function MAIN(){
//L’email de Ghislain, le chef de production
var mail= »achraf.sahli@sudac.fr »
//L’appel des deux fonctions
IMPORT_DATA(RECUP_CSV_PIECE_JOINTE(mail))
}
Cet avis vous a été utile ?
Bonjour et merci pour ce script.
De mon coté j’ai corrigé le script mais je me retrouve avec cet erreur :
Journal d’exécution
14:38:28 Avis Exécution démarrée
14:38:29 Erreur
TypeError: Cannot read property ‘getMessages’ of undefined
RECUP_CSV_PIECE_JOINTE @حسن الحسن تمياس Code.gs:5
MAIN @حسن الحسن تمياس Code.gs:41
Je ne comprends pas d’où cela peut venir…
Quelqu’un a eu le même soucis ?
Cet avis vous a été utile ?
Bonjour Richard,
J’ai la même erreur, je cherche encore une solution. …
Cet avis vous a été utile ?