3.4 · Fonctions : texte, date, conditionnelles (If/Select)

Niveau 3 · Avancé : formules & mise en forme conditionnelle

3.4Fonctions : texte, date, conditionnelles (If/Select)

Objectif : exploiter les fonctions intégrées (texte, date, If-Then-Else, Select Case) pour des formules robustes.
Temps estimé : 11 min

Les FONCTIONS et la LOGIQUE CONDITIONNELLE sont ce qui rend les formules vraiment puissantes. Crystal Reports offre des CENTAINES de fonctions intégrées, regroupées par catégorie ; les plus utiles au quotidien : (1) Fonctions TEXTE (chaînes) : UpperCase / LowerCase (majuscules/minuscules), Left / Right / Mid (extraire une partie d'un texte), Len (longueur), Trim (enlever les espaces), Replace (remplacer), ToText (convertir un nombre/date en texte). Elles servent à nettoyer, extraire, composer du texte (un code produit, une initiale, un libellé formaté). (2) Fonctions DATE : Year / Month / Day (extraire l'année/le mois/le jour — essentiel pour regrouper par période), DateDiff (écart entre deux dates : un délai en jours/mois), DateAdd (ajouter une durée), Today / CurrentDate (date du jour). Elles servent à calculer des délais, extraire des périodes, comparer des dates. La manipulation des dates est très fréquente en reporting (échéances, ancienneté, regroupement mensuel).

La LOGIQUE CONDITIONNELLE est le cœur des formules intelligentes. (1) If…Then…Else : renvoie une valeur selon une condition. Exemple : If {Montant} > 1000 Then "Gros" Else "Standard". On peut ENCHAÎNER : If … Then … Else If … Then … Else … pour plusieurs cas. (2) Select…Case (équivalent d'un aiguillage) : plus lisible quand on teste UNE valeur contre plusieurs cas (Select {Statut} Case "A" : … Case "B" : … Default : …). (3) Les OPÉRATEURS logiques (And, Or, Not) combinent des conditions. La logique conditionnelle permet de CATÉGORISER (classer un montant, un délai, un statut), d'AFFICHER conditionnellement (un texte selon la valeur), de gérer les cas particuliers (valeurs nulles, exceptions). Points importants. (1) Les fonctions TEXTE (extraire, nettoyer, composer) et DATE (extraire période, calculer délai) couvrent la plupart des besoins de manipulation. (2) If…Then…Else et Select…Case permettent la logique CONDITIONNELLE — le cœur des formules intelligentes (catégories, statuts, affichages conditionnels). (3) Attention aux TYPES et aux VALEURS NULLES : tester IsNull avant d'utiliser un champ potentiellement nul évite des erreurs (une formule qui rencontre un nul peut échouer ou donner un résultat vide). (4) Enchaîner les If pour plusieurs cas, ou préférer Select…Case pour la lisibilité quand on teste une seule valeur. (5) Ces formules alimentent l'affichage, les regroupements (3-5), la mise en forme conditionnelle (3-2), les filtres. Maîtriser les fonctions texte/date et la logique conditionnelle (If/Select) donne le vocabulaire pour construire à peu près n'importe quelle valeur calculée — c'est ce qui rend les rapports réellement sur-mesure et intelligents.

Vocabulaire de la section

Fonctions texte (chaînes)
UpperCase/LowerCase, Left/Right/Mid (extraire), Len (longueur), Trim (nettoyer), Replace, ToText (convertir en texte) — pour nettoyer, extraire, composer du texte.
Fonctions date
Year/Month/Day (extraire — pour regrouper par période), DateDiff (délai entre deux dates), DateAdd (ajouter une durée), Today/CurrentDate — pour délais, périodes, comparaisons.
If…Then…Else
Renvoie une valeur selon une condition (If {Montant} > 1000 Then "Gros" Else "Standard"). Enchaînable (If…Then…Else If…) pour plusieurs cas.
Select…Case
Aiguillage : teste UNE valeur contre plusieurs cas (Select {Statut} Case "A":… Case "B":… Default:…). Plus lisible que des If enchaînés pour une seule valeur.
Gestion des valeurs nulles (IsNull)
Tester IsNull avant d'utiliser un champ potentiellement nul : un nul non géré peut faire échouer une formule ou donner un résultat vide.
Vérifiez votre compréhension

Comment catégoriser des données (classer un montant, traduire un code) dans une formule ?

Tutoriel 3.4
Tutos « 3.4 » Crystal Reports fonction texte date conditionnelle If Select (recherche)
Cliquer pour voir les résultats à jour ↗

En pratique — Utiliser fonctions et logique conditionnelle

  1. Testez des fonctions TEXTE : UpperCase, Left (extraire), Trim (nettoyer), et composez un libellé avec ToText pour un nombre.
  2. Testez des fonctions DATE : Year({Date}) pour extraire l'année (utile pour regrouper), DateDiff pour un délai en jours.
  3. Écrivez une formule If…Then…Else (ex. catégoriser un montant en « Gros »/« Standard ») ; enchaînez pour plusieurs cas ou utilisez Select…Case.
  4. Gérez les valeurs nulles avec IsNull avant d'utiliser un champ ; vérifiez la syntaxe et testez en aperçu.
Vous manipulez le texte et les dates et écrivez de la logique conditionnelle (If/Select) : vous pouvez construire quasiment n'importe quelle valeur calculée — des rapports sur-mesure et intelligents.

Points clés à retenir

  • Fonctions TEXTE : UpperCase/LowerCase, Left/Right/Mid (extraire), Len, Trim (nettoyer), Replace, ToText (convertir) — nettoyer, extraire, composer du texte. Fonctions DATE : Year/Month (extraire période), DateDiff (délai), DateAdd, Today.
  • LOGIQUE CONDITIONNELLE (cœur des formules intelligentes) : IF…THEN…ELSE (valeur selon condition, enchaînable) et SELECT…CASE (aiguillage sur une valeur, plus lisible). Opérateurs And/Or/Not.
  • Usages : CATÉGORISER (classer montant/délai/statut), AFFICHER conditionnellement, gérer les cas particuliers. Ces formules alimentent affichage, regroupements (3-5), mise en forme conditionnelle (3-2), filtres.
  • Vigilance : les TYPES (convertir texte/nombre) et les VALEURS NULLES — tester ISNULL avant d'utiliser un champ potentiellement nul (un nul non géré fait échouer la formule ou renvoie vide).

Questions fréquentes

Comment utiliser If…Then…Else et Select…Case pour catégoriser des données ?

If…Then…Else et Select…Case sont les outils de la logique conditionnelle : ils renvoient une valeur DIFFÉRENTE selon les données, ce qui permet de CATÉGORISER (classer en catégories calculées) — voici comment les utiliser. La logique de base : une formule conditionnelle TESTE une condition et renvoie une valeur selon le résultat. Pour catégoriser, on teste la valeur d'un champ et on renvoie une ÉTIQUETTE de catégorie. If…Then…Else : (1) Cas simple (deux issues) : « If {Montant} > 1000 Then "Gros" Else "Standard" » → renvoie « Gros » si le montant dépasse 1000, « Standard » sinon. (2) Plusieurs cas (enchaînement) : « If {Montant} >= 5000 Then "Très gros" Else If {Montant} >= 1000 Then "Gros" Else If {Montant} >= 100 Then "Moyen" Else "Petit" » → classe en 4 tranches. L'ordre des conditions compte : on teste du plus restrictif au plus général (ou par bornes décroissantes), et la première condition vraie l'emporte. (3) If…Then…Else convient bien pour des SEUILS et des conditions variées (comparaisons, plages, combinaisons). Select…Case : (1) Quand on teste UNE valeur contre plusieurs cas précis, Select…Case est plus LISIBLE : « Select {Statut} Case "A" : "Actif" Case "S" : "Suspendu" Case "F" : "Fermé" Default : "Inconnu" » → traduit un code de statut en libellé. (2) C'est l'équivalent d'un aiguillage : on compare la même valeur à une liste de cas, chacun avec sa réponse, plus un cas par défaut. (3) Plus clair que des If enchaînés quand il s'agit d'égalités sur une seule valeur (des codes, des catégories fixes). Quand utiliser chacun : (1) SEUILS, plages, conditions variées (comparaisons, combinaisons) → IF…THEN…ELSE (enchaîné pour plusieurs tranches). Ex. classer par montant en tranches. (2) Une valeur testée contre des cas PRÉCIS (égalités) → SELECT…CASE (plus lisible). Ex. traduire un code en libellé, classer par catégorie fixe. Les usages de catégorisation : (1) Classer des MONTANTS en tranches (petit/moyen/gros). (2) Classer des DÉLAIS (à temps / en retard, en calculant DateDiff puis en testant). (3) Traduire des CODES en libellés lisibles (statuts, types). (4) Créer des GROUPES calculés (la catégorie devient un champ sur lequel on peut regrouper — niveau 3-5). (5) Déterminer un affichage ou une couleur (combiné à la mise en forme conditionnelle). Les bonnes pratiques : (1) Couvrez TOUS les cas : prévoyez un Else / Default pour les valeurs non prévues (sinon la formule peut renvoyer vide). (2) Ordre des conditions (If enchaîné) : du plus spécifique au plus général, par bornes cohérentes. (3) Gérez les NULS : testez IsNull si le champ peut être nul (un nul peut fausser la comparaison). (4) Types cohérents : toutes les branches doivent renvoyer le même TYPE (toutes du texte, ou tous des nombres). (5) Lisibilité : préférez Select…Case pour des cas d'égalité multiples ; décomposez une logique très complexe en plusieurs formules. En résumé : utilisez IF…THEN…ELSE (enchaîné pour plusieurs tranches) pour catégoriser selon des SEUILS ou conditions variées (montants en tranches, délais), et SELECT…CASE pour traduire/classer UNE valeur testée contre des cas précis (codes → libellés, catégories fixes) — plus lisible. Couvrez tous les cas (Else/Default), gérez les nuls, gardez des types cohérents. Ces formules conditionnelles créent des catégories calculées qui rendent le rapport intelligent (classer, étiqueter, interpréter les données) et servent ensuite à regrouper, colorer ou afficher conditionnellement — une compétence centrale des formules.

Comment manipuler les dates (délais, périodes) et gérer les valeurs nulles dans les formules ?

La manipulation des dates (extraire une période, calculer un délai) et la gestion des valeurs nulles sont deux besoins très fréquents en reporting — voici les fonctions et réflexes clés. Manipuler les DATES : (1) Extraire une partie : Year({Date}), Month({Date}), Day({Date}) renvoient l'année, le mois, le jour. Très utile pour REGROUPER par période (grouper par Year({Date}) pour un état annuel, par Month pour un état mensuel) ou afficher une période. (2) Calculer un DÉLAI : DateDiff renvoie l'écart entre deux dates dans l'unité voulue (jours, mois, années). Exemples : délai de livraison (DateDiff en jours entre date de commande et date de livraison), ancienneté d'un client, âge, retard (jours entre échéance et aujourd'hui). C'est essentiel pour les indicateurs de délai et les échéanciers. (3) Ajouter/retrancher une durée : DateAdd ajoute une durée à une date (calculer une date d'échéance = date + 30 jours). (4) Date du jour : Today ou CurrentDate donne la date courante (pour calculer un retard « à aujourd'hui », l'âge d'une créance). (5) Comparer des dates : les opérateurs de comparaison fonctionnent sur les dates (Date > #2026-01-01#). (6) Convertir : ToText pour afficher une date au format voulu, ou CDate/DateValue pour convertir un texte en date. Les usages courants : regrouper par période (Year/Month), calculer des délais et retards (DateDiff avec Today), des échéances (DateAdd), l'ancienneté d'une créance. Gérer les VALEURS NULLES (un réflexe crucial) : (1) Le problème : un champ peut être NUL (vide, sans valeur — différent de zéro ou d'une chaîne vide). Une formule qui utilise un champ nul sans précaution peut ÉCHOUER, renvoyer un résultat VIDE, ou fausser un calcul (une date nulle dans un DateDiff, un montant nul dans une addition). En Crystal, par défaut, une expression impliquant un nul peut renvoyer nul entièrement. (2) Le réflexe : tester IsNull AVANT. Utilisez IsNull({champ}) pour détecter un nul et le traiter : « If IsNull({DateLivraison}) Then 0 Else DateDiff("d", {DateCommande}, {DateLivraison}) » → évite de calculer un délai sur une date manquante. Pour du texte : « If IsNull({champ}) Then "" Else {champ} ». Pour un montant : traiter le nul comme 0 si c'est le sens voulu. (3) Placez le test IsNull EN PREMIER dans la formule (avant toute utilisation du champ), car une fois qu'on manipule le nul, il est trop tard. (4) Option « Convertir les valeurs nulles en valeurs par défaut » : Crystal a un réglage qui transforme automatiquement les nuls en valeur par défaut (0, chaîne vide) — pratique, mais comprendre IsNull reste important pour les cas précis. Les bonnes pratiques : (1) Pour les dates, utilisez Year/Month (extraire, regrouper), DateDiff (délais), DateAdd (échéances), Today (retards à aujourd'hui). (2) TESTEZ IsNull sur tout champ potentiellement nul AVANT de l'utiliser, surtout dans les calculs (délais, sommes) et les concaténations de texte. (3) Décidez comment traiter le nul (0 ? vide ? une mention « N/A » ?) selon le sens métier. (4) Attention aux TYPES (une date, un nombre, un texte se manipulent différemment ; convertir si besoin). (5) Testez avec des données incluant des nuls et des dates variées. En résumé : manipulez les DATES avec Year/Month/Day (extraire, regrouper par période), DateDiff (calculer des délais/retards), DateAdd (échéances) et Today (à aujourd'hui) — la gestion des dates est omniprésente en reporting (délais, périodes, échéances). Gérez les VALEURS NULLES en testant IsNull AVANT d'utiliser un champ potentiellement nul (« If IsNull(...) Then ... Else ... »), pour éviter des formules qui échouent ou des résultats vides/faux, en décidant du traitement du nul selon le métier. Ces deux réflexes — fonctions de date et gestion des nuls — sont indispensables pour des formules fiables sur des données réelles (qui contiennent toujours des dates à traiter et des valeurs manquantes).

Autres ressources