Numeriblog Google Workspace Google Apps Script, la puissance des outils Google à portée de scripts Utiliser Apps Script pour mettre automatiquement à jour vos présentations Google Slides

Utiliser Apps Script pour mettre automatiquement à jour vos présentations Google Slides

Vous connaissez Google Slides, l’outil de création de présentations de Google, mais peut-être ne savez-vous pas que vous pouvez lier certaines diapositives entre elles ! L’option est bel et bien disponible : copiez tout simplement […]

personnes ont consulté cet article

6 minutes

Rédigé par Pierre Benneton - il y a 2 ans

Ce que vous allez découvrir

  • Problématique de la répétition de la manipulation (le temps)
  • Ma problématique de mise à jour des diapositives liées
  • Mon raisonnement face à ce problème
  • La création du script et les différentes fonctions utilisées
  • Le code complet du script
  • Utiliser ce script sur votre domaine
  • Un petit détail qui a son importance
  • Conclusion de cette histoire

Utiliser Apps Script pour mettre automatiquement à jour vos présentations Google Slides

Vous connaissez Google Slides, l’outil de création de présentations de Google, mais peut-être ne savez-vous pas que vous pouvez lier certaines diapositives entre elles !

L’option est bel et bien disponible : copiez tout simplement une ou plusieurs diapositives depuis une présentation « source » et collez-les sur la présentation cible. Un message vous demandera de choisir entre une importation simple ou une importation liée avec la présentation d’origine. Mais dans quelle situation peut-elle être utile ?

  • Vous possédez de nombreuses présentations dans lesquelles certaines diapositives sont similaires.
  • Ces diapositives présentent des informations susceptibles d’être modifiées : un numéro de téléphone, une vidéo de présentation, une citation en exemple, etc.
  • Plutôt que de copier-coller la diapositive, et afin de pouvoir la mettre à jour en un clic, vous décidez de l’associer dans chaque présentation à une diapositive unique.
Lors de l’import d’une diapositive, vous pouvez cliquer sur « Lien vers la présentation d’origine » pour lier les diapositives.

Ceci vous permet d’utiliser l’option “Mettre à jour les objets associés” dans le menu Outils > Objets Associés.

Visualisation du bouton de mise à jour.

Problématique de la répétition de la manipulation (le temps)

Dans certaines situations, les présentations à mettre à jour sont nombreuses et les mises à jour fréquentes. Je suis coupable d’avoir utilisé la solution de mise à jour manuelle bien trop longtemps. C’est, à mon goût, chronophage et peu efficace. 

Une tâche qui ne prend que 10 secondes multipliée par 60 présentations une fois par semaine, cela ne représente que 600 secondes, soit 10 minutes tous les 7 jours, me direz-vous, mais il faut aussi prendre en compte le temps de s’y mettre, d’ouvrir le dossier ainsi que toutes les présentations, attendre que celles-ci chargent (quand votre navigateur est capable de gérer autant d’onglets à la fois). 

Ces tâches génèrent aussi du stress. Je ne sais pas vous, mais je ne trouve rien de plus énervant que d’effectuer une tâche répétitive qui pourrait être assurée automatiquement par une machine. 

C’est là qu’entre en compte l’automatisation via Google Apps Script. En créant un script qui effectue cette tâche à ma place chaque nuit, je vais me libérer du temps (que je vais pouvoir passer avec mes collègues autour de la machine à café car le rapport humain est important), tout en baissant mon niveau de stress. Si on ajoute à cela le fait d’être sûr de ne jamais oublier d’effectuer une mise à jour avant une présentation : je dis “Banco”.

Partisan du moindre effort, j’ai tout d’abord cherché un script tout fait permettant de résoudre mon problème avant de me rendre compte qu’il n’y en avait pas de disponible. Si je souhaitais mettre en place ce script, il faudrait que je me remonte les manches et que je passe du temps à travailler dessus en amont avant de pouvoir profiter en aval de ce nouveau temps disponible.

C’était l’occasion rêvée pour me plonger dans un nouvel outil, Apps Scripts.

Ci-dessous, vous trouverez l’explication de mon raisonnement ainsi que le script que j’ai créé avec l’aide de Antoine Martin (que vous connaissez sûrement déjà si vous êtes un lecteur de ce blog).

Ma problématique de mise à jour des diapositives liées

Mon problème est que j’ai des dizaines de présentations qui sont créées à partir de différents fichiers sources, et comme vous l’aurez compris, jusqu’à aujourd’hui il fallait que j’ouvre toutes ces présentations une à une pour les mettre à jour. Une info changeait, une personne masquait une diapositive, et il fallait tout recommencer ou vérifier avant le début de chaque présentation que personne n’avait apporté de modifications aux fichiers.

Mon raisonnement face à ce problème

Avant de rentrer dans le script lui-même, je vais essayer de vous expliquer le raisonnement que je me suis fait. Pour qu’un script soit efficace il faut qu’il suive une logique, et même si certains d’entre vous ne liront sûrement pas cette partie, cette étape me paraît particulièrement importante.

Pour mettre à jour toutes les diapositives de mes présentations il me fallait :

  1. Lister tous les fichiers de présentation présents dans mon dossier
  2. Récupérer l’identifiant de chacun des fichiers afin de pouvoir l’ouvrir
  3. Ouvrir la présentation
  4. Lister toutes les diapositives de la présentation  
  5. Mettre à jour les diapositives liées à sa diapositive source
  6. Recommencer les points 3, 4 et 5 tant de fois qu’il y avait un fichier dans le fameux dossier.

La création du script et les différentes fonctions utilisées

Je tiens à vous préciser que je ne suis pas développeur de formation, il est possible que vous trouviez des solutions plus efficaces que celle dont vous trouverez le code en fin d’article. Je suis bien évidemment preneur de toute remarque constructive sur le sujet, mais je ne suis pas sûr de pouvoir répondre à toutes les questions qui peuvent se poser sur Apps Script.

J’en profite pour vous rappeler que si vous souhaitez développer des solutions d’automatisation pour votre entreprise, vous pouvez faire appel aux services de Numericoach (promis ce n’est pas moi qui travaillerait sur vos scripts).

Lister tous les fichiers dans un dossier Google Drive

Sûrement la partie la plus simple de ce projet.

[mepr-show rules= »32869″ unauth= »message »]

function findFiles() {
// Use MimeType enum to log the name of every Google_slides in the Drive folder called by folder ID.
// Change getFolderById with the id of the relevant folder
const docs = DriveApp.getFolderById('MYFOLDERID').getFilesByType(MimeType.GOOGLE_SLIDES);
while (docs.hasNext())
{
 const doc = docs.next();
 //debug
 Logger.log(doc.getId())
 //All files in the folder are logged
  }
}

[/mepr-show]

Cette fonction permet de dresser la liste de toutes les présentations Google Slides présentes dans un dossier Google Drive dont vous connaissez l’identifiant. Attention à bien remplacer dans le script “MYFOLDERID” par le véritable ID du dossier que vous souhaitez lister.

Logger.log vous permet de visualiser les identifiants de tous ces fichiers dans la console. 

Mettre à jour toutes les diapositives liées à une source

Lister et mettre à jour toutes les diapositives dans une présentation était pour moi la deuxième étape. Objectif atteint avec le code suivant :

function updateAllSlides() {
   //change line to use variable for openById
   const currentPresentation = SlidesApp.openById('PRESENTATIONID');
   const slides = currentPresentation.getSlides();
   for (let i = 0; i < slides.length; i++) {
       const slide = slides[i];
 // Update slides if slide linked, if slide not linked, no update
       slide.refreshSlide();
       }
}

Un problème subsistait : comment faire en sorte de récupérer la liste des identifiants des présentations de la fonction précédente et les utiliser dans cette seconde fonction ? 

Lier les fonctions et faire en sorte qu’elles s’appellent entre-elles

C’est là qu’Antoine m’a complètement débloqué. J’avais mes deux fonctions et j’étais coincé, obnubilé par un problème qui n’en était pas un. 

Comme il me l’a dit, il suffit :

“[…] d’appeler la fonction updateAllSlide dans la boucle findFile en passant l’ID de la présentation en argument de la fonction. 

(Antoine M, 8 mai 2021 14h54, in. Ma vie, mon oeuvre, mes mémoires de dev, Numedition 2021)

Aussitôt dit, aussitôt fait.

Une ligne ajoutée à la première fonction :

//Use updateAllSlides function for all presentation Ids found with the function
 updateAllSlides(doc.getId());

Deux petites modifications à la deuxième fonction avec l’ajout de l’argument « presentationId » :

function updateAllSlides(presentationId)

ainsi que :

var currentPresentation = SlidesApp.openById(presentationId);

Et voilà que le script va automatiquement chercher les IDs de toutes les présentations dans un dossier, les ouvre une à une et met à jour toutes les diapositives liées présentes.  

Le code complet du script

Ci-dessous vous trouverez le code complet du script. Pensez à ajouter l’ID de votre dossier où se trouvent vos présentations.

 

// UPDATE ALL LINKED SLIDES IN ALL PRESENTATIONS IN A DRIVE FOLDER
// TODO LIST
// Change the MYFOLDERID to reflect the folder to be scanned on Drive
// Create Head trigger based on time
// TO BE NOTICED
// This script does not add new slides if they are created in the master presentation
// This script does not remove slides if erased from the master presentation
// WHAT IT DOES
// This script does hide a slide is hidden in the master presentation
// This script does update slides content if updated in the master presentation
// This script does update speaker notes if updated in the master presentation
function findFiles() {
// Use MimeType enum to log the name of every Google_slides in the Drive folder called by folder ID.
// Change getFolderById with the id of the relevant folder
const docs = DriveApp.getFolderById('MYFOLDERID').getFilesByType(MimeType.GOOGLE_SLIDES);
while (docs.hasNext())
{
 const doc = docs.next();
 //debug
 //Logger.log(doc.getId())
 //All files in the folder are logged
 //Use updateAllSlides function for all presentation Ids found with the function
 updateAllSlides(doc.getId());
 }
}
function updateAllSlides(presentationId) {
   //Find all slides in the presentations listed in the findFiles function
   const currentPresentation = SlidesApp.openById(presentationId);
   const slides = currentPresentation.getSlides();
   for (let i = 0; i < slides.length; i++) {
       const slide = slides[i];
     // Update slides if slide linked, if slide not linked, no update
       slide.refreshSlide();
   }
}
// Script created by Pierre BENNETON
// With the help of Antoine MARTIN
// Two minds are always better than one

 

Utiliser ce script sur votre domaine

Si vous le souhaitez, vous pouvez utiliser ce script sur votre domaine. Bien que je l’utilise à titre personnel, je ne peux être tenu comme responsable de l’utilisation faite du présent code.

  1. Se rendre sur https://script.google.com/home
  2. Créer un nouveau projet 
  3. Nommer le projet
  4. Copier le code fourni dans l’éditeur
  5. Remplacer le FolderID par l’identifiant de votre fichier 
  6. Créer un déclencheur
    1. Fonction à exécuter : findFiles
    2. Exécution au déploiement : Head
    3. Source de l’événement : déclencheur horaire
    4. Type et heure : selon vos besoins
    5. Enregistrer
  7. Vérifier que le déclencheur fonctionne comme vous le souhaitez dans la partie exécution.

Un petit détail qui a son importance

Les diapositives dans cet exemple ne contiennent pas de données importées de Google Sheets, comme une table de données ou un graphique. Si c’est votre cas, vous pouvez vous baser sur ce script et y ajouter une ligne de commande afin d’obtenir le résultat souhaité. 

Il existe de nombreux scripts en ligne pour faire exactement cela et toutes les infos officielles sont présentes ici : https://developers.google.com/apps-script/reference/slides/sheets-chart

Conclusion de cette histoire

Me voici l’heureux propriétaire de mon premier script fait maison. Je sais que celui-ci répond à mes besoins particuliers et qu’il va me faire gagner (en cumulé) un temps précieux. 

J’espère qu’il répondra aussi aux besoins de certains d’entre vous, et si ce n’est pas totalement le cas, qu’il vous aidera à avancer dans votre projet. En ce qui me concerne, j’ai aujourd’hui très envie d’approfondir mes connaissances sur cet outil et je commence déjà à réfléchir s’il n’y a pas d’autres automatisations qui pourraient m’être utiles et sur lesquelles je pourrai continuer à me faire la main. 

Un dernier conseil avant de finir, si comme moi vous vous laissez tenter par Apps Script, pensez à tester vos scripts sur des fichiers tests et non directement sur vos données, cela semble évident mais ça ne coûte rien de le rappeler.

L’espace commentaires est à votre disposition pour me faire vos retours. 

Besoin d'un peu plus d'aide sur Google Slides ?

Des formateurs sont disponibles toute l'année pour vous accompagner et optimiser votre utilisation de Google Slides, que ce soit pour votre entreprise ou pour vos besoins personnels !

Découvrir nos formations Google Slides

Rédacteur

S’abonner
Notification pour
guest
5 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Dreadaxe

Bonjour
J’ai un soucicomment image

Cet avis vous a été utile ?

Benoît
Répondre à  Pierre BENNETON
1 année il y a

Pardon de la réponse tardive. Le blog ne semble pas me notifier d’une réponse.
Je pense que je n’avais pas bien lu le « Un petit détail qui a son importance » c’est bien des informations venant d’un tableur que je veux mettre à jour automatiquement.

Cet avis vous a été utile ?

Roulleau
Roulleau

Merci bcp 🙂

Cet avis vous a été utile ?

Carmèle SAVARINO
Carmèle SAVARINO

Bonjour,
Merci beaucoup pour ce script !
Je rencontre néanmoins un problème : en effet le dossier DRIVE contient neuf présentations de 22 Mo (elles pourront aller jusque 70Mo) toutes liées au dossier source.
J’ai copié/coller le code proposé ci-dessus comme convenu, cela ne fonctionnait pas.
J’ai ensuite remplacé « const currentPresentation = SlidesApp.openById(presentationId) » (4ème ligne à partir de la deuxième fonction) par l’id du slide à rafraîchir en question.
Cela fonctionne.
Hors, je dois mettre à jour neuf présentations.
J’ai copié/collé la fonction « updateallslides » par le nombre de slides en remplaçant l’id « const currentPresentation = SlidesApp.openById(presentationId) » par l’id de chaque slides.
Or, le temps d’attente est vraiment long, car ce sont des fichers volumineux et l’exécution se fait très lentement.
Comment optimiser le temps de traitement ?
Cordialement,
Carmèle (j’ai écrit ce commentaire deux fois, je me suis trompée de page la première)

Cet avis vous a été utile ?