Les fonctions personnalisées dans Google Sheets : amplifiez votre productivité

Google Sheets est un outil puissant et flexible utilisé par des millions de personnes pour analyser, organiser et partager des données.

Une de ses fonctionnalités les plus puissantes est la possibilité de créer des fonctions personnalisées.

Ces fonctions permettent aux utilisateurs d’étendre les capacités de Google Sheets au-delà de ses fonctions intégrées, offrant une personnalisation et une flexibilité accrues.

Qu’est-ce qu’une fonction personnalisée ?

Une fonction personnalisée dans Google Sheets est une formule créée par l’utilisateur qui peut être utilisée pour effectuer des calculs ou des opérations spécifiques non couvertes par les fonctions standard de Google Sheets. Ces fonctions sont écrites en JavaScript dans l’éditeur de scripts de Google Sheets, offrant ainsi une vaste gamme de possibilités pour manipuler des données.

Avantages des fonctions personnalisées

Les fonctions personnalisées peuvent traiter des tâches répétitives, complexifier les calculs, ou manipuler des données de manière spécifique. Elles peuvent être particulièrement utiles pour :

  • Automatiser les calculs : Automatisez des tâches répétitives, économisant ainsi du temps et réduisant les erreurs.
  • Traiter des données complexes : Réalisez des calculs qui seraient autrement impossibles ou très complexes à réaliser avec les fonctions standard.
  • Personnalisation : Adaptez les feuilles de calcul à vos besoins spécifiques, en offrant des solutions sur mesure.

Créer une fonction personnalisée

Pour créer une fonction personnalisée dans Google Sheets :

  1. Ouvrez une nouvelle feuille de calcul via le lien sheets.new,
  2. Ouvrez l’éditeur de scripts : Dans votre feuille de calcul, cliquez sur Extensions > Apps Script.
  3. Écrivez votre fonction : Utilisez JavaScript pour créer votre fonction. Par exemple, une fonction simple pour doubler une valeur pourrait ressembler à cela :
/**
 * Multiplie la valeur d'entrée par 2.
 *
 * @param {number} valeur La valeur ou la plage de cellules à multiplier.
 * @return {number} La valeur d'entrée multipliée par 2.
 * @customfunction
 */
function DOUBLER(valeur) {
  return Array.isArray(valeur) ?
    valeur.map(ligne => ligne.map(cellule => cellule * 2)) :
    valeur * 2;
}
  1. Nommez votre projet
  2. Enregistrer la fonction
  3. Utilisez votre fonction : Retournez dans votre feuille de calcul et tapez =DOUBLER(A1) (en remplaçant A1 par la cellule ou la plage de votre choix).

Bonnes pratiques

  • Testez votre fonction : Assurez-vous de tester votre fonction avec différentes valeurs pour garantir qu’elle fonctionne comme prévu.
  • Documentez votre fonction : Utilisez des commentaires pour expliquer ce que fait votre fonction, rendant ainsi votre code plus facile à comprendre pour vous-même et pour les autres.
  • Gérez les erreurs : Ajoutez une gestion des erreurs pour vous assurer que votre fonction se comporte correctement même avec des entrées inattendues.

Conclusion

Les fonctions personnalisées dans Google Sheets ouvrent un monde de possibilités pour l’analyse et la manipulation des données. Avec un peu de pratique et de créativité, vous pouvez transformer vos feuilles de calcul parfaitement adaptées à vos besoins. Je vous propose ci-dessous quelques fonctions personnalisées pour vous donner des idées .

/**
 * Formate un numéro de téléphone brut en un format lisible.
 *
 * @param {string} numero Le numéro de téléphone à formater.
 * @return {string} Le numéro de téléphone formaté.
 * @customfunction
 */
function FORMATER_NUMERO_TELEPHONE(numero) {
  var numeroNettoye = numero.replace(/D/g, '');
  var match = numeroNettoye.match(/^(d{3})(d{3})(d{4})$/);
  if (match) {
    return '(' + match[1] + ') ' + match[2] + '-' + match[3];
  }
  return null;
}

/**
 * Génère un mot de passe aléatoire.
 *
 * @param {number} longueur La longueur du mot de passe généré.
 * @return {string} Un mot de passe aléatoire.
 * @customfunction
 */
function GENERER_MOT_DE_PASSE(longueur) {
  var caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()';
  var motDePasse = '';
  for (var i = 0; i < longueur; i++) {
    var indiceAleatoire = Math.floor(Math.random() * caracteres.length);
    motDePasse += caracteres.charAt(indiceAleatoire);
  }
  return motDePasse;
}
/**
 * Vérifie si une adresse email est valide.
 *
 * @param {string} adresse L'adresse email à valider.
 * @return {string} Retourne "Valide" si l'adresse email est dans un format correct, sinon "Invalide".
 * @customfunction
 */
function VALIDER_EMAIL(adresse) {
  var regexEmail = /^[^s@]+@[^s@]+.[^s@]+$/;
  return regexEmail.test(adresse) ? "Valide" : "Invalide";
}
/**
 * Calcule le nombre de jours entre deux dates.
 *
 * @param {Date} dateDebut La date de début.
 * @param {Date} dateFin La date de fin.
 * @return {number} Le nombre de jours entre les deux dates.
 * @customfunction
 */
function CALCULER_JOURS_ENTRE_DATES(dateDebut, dateFin) {
  const unJour = 24 * 60 * 60 * 1000; // heures*minutes*secondes*millisecondes
  const diffTemps = Math.abs(dateFin.getTime() - dateDebut.getTime());
  return Math.ceil(diffTemps / unJour);
}
/**
 * Calcule le nombre de jours ouvrables entre deux dates (exclut les weekends).
 *
 * @param {date} dateDebut Date de début du projet.
 * @param {date} dateFin Date de fin du projet.
 * @return {number} Nombre de jours ouvrables.
 * @customfunction
 */
function DUREE_PROJET(dateDebut, dateFin) {
  var start = new Date(dateDebut);
  var end = new Date(dateFin);
  var count = 0;
  
  for (var day = start; day <= end; day.setDate(day.getDate() + 1)) {
    var dayOfWeek = day.getDay();
    if (dayOfWeek != 0 && dayOfWeek != 6) count++;
  }
  
  return count;
}
/**
 * Calcule l'âge à partir d'une date de naissance.
 *
 * @param {date} dateNaissance La date de naissance.
 * @return {number} L'âge calculé.
 * @customfunction
 */
function CALCULER_AGE(dateNaissance) {
  const aujourdHui = new Date();
  const naissance = new Date(dateNaissance);
  let age = aujourdHui.getFullYear() - naissance.getFullYear();
  const m = aujourdHui.getMonth() - naissance.getMonth();
  if (m < 0 || (m === 0 && aujourdHui.getDate() < naissance.getDate())) {
    age--;
  }
  return age;
}
/**
 * Élimine les doublons d'une plage de cellules et retourne un tableau unique.
 *
 * @param {range} plage La plage de cellules contenant les valeurs à filtrer.
 * @return {Array} Un tableau de valeurs uniques.
 * @customfunction
 */
function FILTRER_DOUBLONS(plage) {
  const valeurs = plage.flat(); // Aplatit le tableau si nécessaire
  return [...new Set(valeurs)];
}
/**
 * Transforme le texte selon le mode spécifié : en majuscules, minuscules ou casse de titre.
 *
 * @param {string} texte Le texte à transformer.
 * @param {string} mode 'majuscules', 'minuscules' ou 'titre'
 * @return {string} Le texte transformé.
 * @customfunction
 */
function TRANSFORMER_TEXTE(texte, mode) {
  switch (mode.toLowerCase()) {
    case 'majuscules':
      return texte.toUpperCase();
    case 'minuscules':
      return texte.toLowerCase();
    case 'titre':
      return texte.replace(/wS*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
    default:
      return 'Mode non reconnu';
  }
}
/**
 * Extrait les domaines d'une liste d'adresses email.
 *
 * @param {Array} emails Une liste d'adresses email.
 * @return {Array} Une liste des domaines extraits.
 * @customfunction
 */
function EXTRAIRE_DOMAINES(emails) {
  return emails.map(email => email.split('@')[1]);
}