La facturation… Comme beaucoup d’indépendants et de PME, vous en avez assez du temps passé à cette tâche fastidieuse? Mettez-la une fois pour toutes en pilote automatique grâce à Google script! On vous explique comment.
Le niveau 0, c’est quand vous devez rechercher les infos un peu partout, les consolider comme vous pouvez, et générer vos factures manuellement, une par une. Il y a le « slow food », le « slow motion »… vous, c’est la « slow facturation ». Éloge de la lenteur dans un monde hystérique… ou pas! Vous avez mieux à faire.
Création automatique des factures en format PDF à partir d’un fichier Google Sheets
Imaginons que, d’une manière ou d’une autre (si vous ne savez pas comment faire, on y reviendra plus bas), vous ayez les infos nécessaires dans un tableau. Un beau tableau tout simple, dans Excel, Google Sheets ou tout autre tableur, où vous avez, ligne par ligne:
- le nom du client
- ses coordonnées (adresse, numéro de TVA, etc.)
- le montant à lui facturer
- et toute autre information nécessaire à l’établissement de votre facture.
Pour accéder à toute la puissance de Google script, vous allez devoir introduire ce tableau dans Google Sheets. Si vous n’en avez pas encore, créez-vous un compte sur Google Drive. Allez sur drive.google.com:
et créez-vous un compte ou, si vous en avez déjà un, connectez-vous à l’aide de votre identifiant et de votre mot de passe.
Dans le coin supérieur gauche de la page, cliquez sur le bouton « Nouveau » puis, dans le menu déroulant qui apparaît alors, sur « Importer un fichier ».
Sélectionnez le fichier contenant vos données et importez-le.
Dans l’arborescence de votre Google Drive, cliquez sur le nom de ce fichier avec le bouton droit de la souris. Dans le menu qui apparaît alors, choisissez Ouvrir avec > Google Sheets:
Dans votre Drive, vous verrez apparaître un nouveau fichier: la conversion de votre fichier initial en fichier Google Sheets:
En parallèle, Google Sheets s’ouvre aussi sur vos données ainsi importées.
Pour commencer à programmer, dans le menu au-dessus du tableau, cliquez sur Outils, puis Éditeur de scripts.
Dans la fenêtre d’édition de script qui s’ouvre alors, insérez le code suivant à l’intérieur de la fonction pré-définie:
Quelques explications:
- La première ligne (ligne 2 selon les numéros donnés dans la marge de la figure ci-dessus) récupère toutes les données du tableau contenu dans le fichier Google Sheets.
- La ligne suivante démarre une boucle qui va traiter ces données ligne par ligne.
- Pour chacune des lignes du tableau, un document Google Docs est créé, les différentes données de la facture correspondante y sont introduites, avec les titres nécessaires à leur bonne compréhension, ce document est provisoirement sauvegardé, le fichier pdf correspondant est créé puis le fichier Google Docs est supprimé.
- Pour adapter ce code à vos données, il vous suffit de modifier les indices de la variable « donneesFacture[ ] », en commençant à 0 pour la colonne A de votre tableau.
Ce script vous permet donc d’automatiser le transfert des données de Google Sheets vers Google Docs:
Avant de le faire tourner, vous devez sauvegarder votre script. Comme dans votre traitement de texte préféré, l’icône pour ce faire représente une bonne vieille disquette (« Je vous parle d’un temps que les moins de 20 ans ne peuvent pas connaître… » 😉 ):
Pour lancer l’exécution du script, cliquez sur l’icône en forme de flèche:
Assurez-vous que le nom de la fonction que vous souhaitez exécuter est bien celui qui est repris à droite de cette icône (voir ci-dessus).
La première fois que vous essaierez d’exécuter ce script, Google vous enverra un message d’avertissement: ce script, c’est vous qui l’avez introduit, pour Google il n’émane donc pas d’une entité reconnue officiellement comme fiable. Vous devrez donc confirmer que oui, vous souhaitez vraiment faire tourner ce script développé par vos soins.
Dans la fenêtre qui vous signale qu’une autorisation est requise de votre part, cliquez sur « Examiner les autorisations »:
Google vous demande alors avec quel compte vous souhaitez vous connecter pour l’exécution de ce script. Cliquez sur le compte que vous souhaitez utiliser:
Et c’est là qu’il va vous falloir une fameuse dose de confiance en vous:
Non, vous ne devez pas « revenir » en lieu sûr. Cliquez sans crainte sur l’hyperlien « Paramètres avancés » (voir ci-dessus).
Dans le bas de la fenêtre (vous devrez probablement agrandir celle-ci ou « scroller » vers le bas), confirmez votre volonté d’accéder à ce script:
Et enfin, dans le bas de la dernière fenêtre, cliquez résolument sur le bouton bleu « Autoriser »:
Cette procédure est laborieuse, mais c’est le prix à payer pour votre sécurité. Bonne nouvelle: vous ne devrez passer par là que la première fois que vous exécuterez ce script. Par la suite, Google retiendra que vous êtes d’accord et ne vous le redemandera plus, ouf!
Une fois que l’exécution du script est lancée, il ne vous reste plus qu’à retourner dans votre drive, pour voir vos factures apparaître, l’une après l’autre:
Bien sûr, la mise en page est ici on ne peut plus basique, il manque vos coordonnées, votre logo, la séparation entre le montant avec et hors TVA, etc. Le but de cette explication était juste de vous montrer à quel point il est facile de se simplifier la vie avec Google Apps Script. Après, à vous de personnaliser vos factures comme vous le souhaitez. Voyez entre autres toutes les options possibles pour personnaliser vos documents sur la page correspondant à la classe « body » de Google Docs: https://developers.google.com/apps-script/reference/document/body
Voilà, vous savez maintenant comment automatiser la communication entre Google Sheets et Google Docs.
Alors, convaincu? Vous imaginez le temps que vous allez gagner?
Et si, en plus, nous pouvions automatiser l’envoi de ces factures, que ce soit aux différents clients ou à votre comptable, par exemple?
Chiche!
Envoi automatique par email des factures
Pour pouvoir envoyer chaque facture au client concerné, commençons par ajouter, dans nos données de facturation, une colonne reprenant les adresses email correspondantes:
Pour retourner dans l’éditeur de scripts, comme ci-dessus, cliquez sur Outils, puis Éditeur de scripts. Dans le script précédent, ajoutez les lignes supplémentaires données ci-dessous:
- À la ligne 23, on récupère l’adresse email du client. Dans nos données, cette adresse se trouve dans la colonne H. Si elle se trouve dans une autre colonne dans vos données, il vous suffit d’adapter l’indice de l’élément correspondant dans la variable « donneesFacture[ ] ».
- La ligne 24 définit le sujet de l’email, combinant des parties de texte fixe avec le numéro et la date de la facture.
- Les lignes 25 et 26 n’en font en réalité qu’une, qui définit le texte de l’email. Les caractères « \n » y représentent des sauts de lignes. Ici aussi, on combine des parties de texte fixe avec le numéro et la date de la facture.
- Les lignes 27 à 29 également n’en forment qu’une: c’est là que le fichier PDF contenant la facture est défini comme pièce attachée à l’email.
- C’est la ligne 30 qui rassemble tous ces paramètres pour l’envoi proprement dit de l’email.
Ci-dessous, l’email reçu par votre client:
Il vous reste juste à l’adapter à votre format. Vous trouverez d’autres méthodes disponibles pour la classe GmailApp sur cette page: https://developers.google.com/apps-script/reference/gmail/gmail-app.
Voilà, 5 lignes de code et l’envoi de vos factures est, lui aussi, en pilote automatique! Avec 25 lignes de code, vous êtes à la tête d’une procédure qui relie de façon automatisée Google Sheets, Google Docs et Gmail.
Si ça vous tente, vous pouvez tout aussi facilement:
- ajouter au menu un élément permettant de lancer l’exécution de cette routine sans devoir passer par l’éditeur de scripts
- programmer son déclenchement automatique (sans aucune intervention de votre part) à intervalles réguliers
- etc.
Maintenant que vous avez les bases, le ciel est votre seule limite! Imaginez la suite:
- Récupérer les durées de travail pour chaque client à partir de Google Agenda pour générer automatiquement les montants à facturer
- Récupérer les données de facturation dans des documents plus complexes: PDF, emails reçus de votre site WooCommerce…
- Last but not least… tout le reste! Maintenant que votre facturation est en pilote automatique, il ne vous reste plus qu’à… automatiser le travail que vous pourrez facturer!
Envie d’un coup de main pour démarrer? Contactez-nous!
Bonjour, où peut on télécharger les fichiers et code dont vous parlez ? merci
Bonjour,
Toutes les applications de Google sont disponibles (gratuitement!) en ligne: https://gsuite.google.com
Bonne automatisation à vous 🙂
Bonjour, j’ai créé le même fichier Google Sheet, puis créé le script mais cela ne fonctionne pas. Je ne trouve aucun pdf dans mon drive.
Une idée de la source d’erreurs ? Merci pour votre aide et bonne journée !
Voici le script (pour ceux qui le cherchent):
function Facture() {
var data=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getDataRange().getValues();
for (var i=1;i<data.lenght;i++) {
var donneesFacture=data[i];
var doc=DocumentApp.create("facture"+donneesFacture[6].toString());
var body=doc.getBody();
body.appendParagraph("Facture n°"+donneesFacture[6]+" – Date: "+donneesFacture[5]);
body.appendHorizontalRule();
body.appendParagraph("Nom client:").setSpacingBefore(24);
body.appendParagraph(donneesFacture[0]);
body.appendParagraph("Adresse:").setSpacingBefore(24);
body.appendParagraph(donneesFacture[1]);
body.appendParagraph(donneesFacture[2]);
body.appendParagraph("N° de TVA:").setSpacingBefore(24);
body.appendParagraph(donneesFacture[3]);
body.appendParagraph("Prix:").setSpacingBefore(24);
body.appendParagraph(donneesFacture[4]+" €");
doc.saveAndClose();
var pdf=doc.getAs('application/pdf');
var file=DriveApp.createFile(pdf);
DriveApp.removeFile(DriveApp.getFileById(doc.getId()));
}
}
Bonjour,
Je vois déjà une erreur typo à la troisième ligne: data.lenght au lieu de data.length.
Si vous corrigez ça, ça devrait fonctionner 🙂
Cordialement
Bonjour
Je débute dans le code, j’aimerai avoir un code pour réaliser des belles factures (pas besoin d’un truc fort compliqué), est ce que quelqu’un aurait un code pour faire cela et serait d’accord de me le partager. Bonne fin de journée
Bonjour,
Avec le code expliqué ci-dessus, vous devriez avoir tout ce qu’il vous faut pour faire ça. N’hésitez pas à revenir vers nous si vous souhaitez des explications complémentaires sur l’un ou l’autre point 🙂
Cordialement
Bonjour,
Votre article est vraiment très intéressant, bien expliqué et complet. Ca m’a beaucoup aidé.
Merci à vous et bonne continuation
Merci beaucoup, j’ai beaucoup appris!