Dans la plupart des formules, gérer les colonnes vides est essentiel pour éviter les erreurs. Avec la colonne Formule de monday.com, cela peut être assez complexe. Advanced Formula Booster offre des options beaucoup plus simples. Jetons un œil à un exemple pratique pour voir la différence.

Si vous n’êtes pas familier avec l’app Advanced Formula Booster qui réinvente les formules de monday.com, je vous recommande de lire Les notions de base d’Advanced Formula Booster. Cet article vous guide à travers les étapes de création de votre première formule, puis de son automatisation à l’aide de copies d’écran et d’une vidéo.

Un exemple pratique

Je consacre quelques minutes chaque jour pour aider les utilisateurs avec la colonne Formule sur le forum de la communauté monday. Parfois, la question est complexe et y répondre est un défi. Comme celle-ci : Calculating hours between 2 date/time columns. Il m’a fallu quelques minutes pour trouver une solution et quelques minutes de plus pour rédiger une explication compréhensible. Au final, la solution est la suivante:

(WORKDAYS(FORMAT_DATE({Resolved On},“YYYY-MM-DD”),FORMAT_DATE({Reported On},“YYYY-MM-DD”)1)*8 + (TIMEVALUE({Resolved On}) – TIMEVALUE({Reported On}))*24

Cette formule calcule le nombre d’heures de travail entre la date {Reported On} et la date {Resolved On}. Le seul problème est que l’infâme icône rouge apparaît sur chaque ligne où aucune date n’est saisie.

The Formula column with the infamous red icon

Comment les éliminer ? Sincèrement, je ne sais pas. J’ai essayé sans succès. C’est probablement possible en ajoutant et en répétant plusieurs instructions IF, mais la complexité de la formule est telle que cela devient rapidement ingérable.

Approche zélée vs paresseuse dans les instructions IF

Le problème principal est que monday utilise une approche zélée pour les instructions IF. Une instruction IF est structurée ainsi : IF(Condition, Résultat_Si_Condition_Remplie, Résultat_Si_Condition_Non_Remplie). L’approche zélée consiste à calculer les deux résultats, puis à évaluer la condition et à retourner le résultat qui satisfait la condition.

L’approche paresseuse consiste à évaluer d’abord la condition, puis à calculer uniquement le résultat approprié.

Pourquoi est-ce important ? Dans la gestion des erreurs, on cherche généralement à ajouter une instruction IF pour éviter de calculer l’un des résultats car celui-ci génère une erreur. Mais l’approche zélée rend cela inefficace car, quelle que soit la condition, les deux résultats sont calculés (l’un d’eux pour rien).

Gérer les erreurs avec la fonction STOP() dans Advanced Formula Booster

Voici comment j’aborderais la formule en utilisant Advanced Formula Booster. Comme d’habitude, je détaille le code au maximum pour qu’il soit facile à comprendre (je suis pleinement conscient que cela pourrait être réalisé de manière plus succincte).

La première ligne vérifie si les colonnes {Reported On} et {Resolved On} sont vides et stocke l’information (vrai ou faux) dans la variable [Interrompre].

  • Si l’une d’elles est vide, l’instruction de la ligne 2 vide la colonne cible – une colonne de type Nombre appelée {Temps passé} – et celle de la ligne 3 arrête l’exécution de la formule.
  • Si elles ne le sont pas, les lignes 2 et 3 sont ignorées (notez l’utilisation de l’instruction IF avec un seul paramètre, donc rien ne se passe si [Interrompre] est faux).
  • Le “vrai” calcul commence en ligne 4.

1: [Interrompre]=OR({Reported On}=””,{Resolved On}=””)

2: {Temps passé}=IF([Interrompre],””)

3: [Stop]=IF([Interrompre],STOP())

4: [JoursPleins]=COUNTWORKINGDAYS({Resolved On},{Reported On})

5: [HeuresJoursPleins]=MULTIPLY([JoursPleins],8)

6: [HeureRésolution]=TIME({Resolved On})

7: [HeureRapport]=TIME({Reported On})

8: [DiffEnMinutes]=MINUTES([HeureRésolution],[HeureRapport])

9: [DiffEnHeure]=DIVIDE([DiffEnMinutes],60)

10: {Temps passé}=SUM([HeuresJoursPleins],[DiffEnHeure])

NOTE : Si des calculs supplémentaires au-delà de la ligne 10 étaient nécessaires, l’utilisation des fonctions SKIP() et RESUME() serait plus appropriée que STOP(). Elle permettrait la poursuite de l’exécution de la formule après la ligne 10.

Tester avec l’éditeur de formule

Grâce à l’intégration des tests dans l’éditeur de formule de Advanced Formula Booster, vous pouvez facilement visualiser le résultat de chaque ligne. Ceci est particulièrement intéressant dans ce scénario.

Test #1
Test #2