====== Utiliser les formules ====== Lorsque vous [[guide:kmed_01#"Scénariser" le simulateur : la notion de chemin|scénarisez]] des chemins comprenant des champs de valeur ou lorsque vous [[guide:expert_03|"maquillez"]] des champs de valeur, il est possible d'utiliser des formules afin de contrôler ou afficher des valeurs dynamiques. ----- ===== Contrôler / afficher une date dynamique ===== Vous pouvez rendre une date dynamique en utilisant la formule : =FORMAT("format d'affichage de la date";valeur de la date) ----- ==== Définir le format d'affichage de la date ==== Le format d’affichage d’une date est à définir en combinant les éléments suivants : | EE | Jour de la semaine en toutes lettres (français) | | E | Jour de la semaine en 3 premières lettres (français) | | D | Jour sur 1 chiffre si inférieur à 10. Sinon, affichage sur 2 chiffres | | DD | Jour sur 2 chiffres | | M | Mois sur 1 chiffre si inférieur à 10. Sinon, affichage sur 2 chiffres | | MM | Mois sur 2 chiffres | | MMM | Mois en lettres, en anglais| | MMMM | Mois en lettres, en français | | YY | Année sur 2 chiffres | | YYYY | Année sur 4 chiffres | Par exemple : |DD/MM/YYYY|Date de type 07/09/2018| |DD-MM-YY |Date de type 02-11-18| |EE D MMMM |Date de type lundi 6 mai| |DD MMMM YYYY|Date de type 02 juin 2018 | ----- ==== Définir la valeur de la date ==== * Afficher la date du jour : **Aujourd'hui()** =FORMAT("DD.MM.YYYY";AUJOURDHUI()) ----- * Afficher la date du jour : **Maintenant()** (avec affichage de l'heure) =FORMAT("DD.MM.YY hh:mm:ss";MAINTENANT()) ----- ==== Contrôler / afficher une date, calculée en fonction de la date du jour ==== ----- === Un nombre de jours fixes, avant ou après aujourd’hui === Basé sur la formule **AUJOURDHUI**. Indiquez un nombre de jours en **+** ou en **-** après **AUJOURDHUI()**. Par exemple : |Le lendemain| =FORMAT("DD.MM.YYYY";AUJOURDHUI()+1)| |La veille| =FORMAT("DD.MM.YYYY";AUJOURDHUI()-1)| |Il y a 2 jours| =FORMAT("DD.MM.YYYY";AUJOURDHUI()-2)| |Il y a une semaine| =FORMAT("DD.MM.YYYY";AUJOURDHUI()-7)| |Dans une semaine| =FORMAT("DD.MM.YYYY";AUJOURDHUI()+7)| ----- === Un nombre de jours ouvrés, avant ou après aujourd’hui === La formule **SERIE.JOUR.OUVRE()** est utilisée avec 2 paramètres; la date de début et le nombre de jours en plus ou en moins. Elle renvoie la date correspondant au nombre de jours spécifiés en plus ou en moins, en ignorant les jours fermés (samedi et dimanche). En cas de jours ouvrés dans le passé, faire précéder le nombre de jours en moins, de 0. Par exemple : |Dans 1 jour ouvré| =FORMAT("DD.MM.YYYY";SERIE.JOUR.OUVRE(AUJOURDHUI();1))| |5 jours ouvrés à partir de demain| =FORMAT("DD.MM.YYYY";SERIE.JOUR.OUVRE(AUJOURDHUI()+1;5))| |Il y a 2 jours ouvrés| =FORMAT("DD.MM.YYYY";SERIE.JOUR.OUVRE(AUJOURDHUI();0-2))| |3 jours ouvrés avant demain| =FORMAT("DD.MM.YY";SERIE.JOUR.OUVRE(AUJOURDHUI()+1;0-3))| ----- === Le dernier jour du mois === =FORMAT("DD.MM.YY";FIN.MOIS(AUJOURDHUI())) ----- === Une date passée ou future, calculée par rapport à la date du jour === Une formule plus complète pour afficher une date est utilisée : =FORMAT("DD.MM.YYYY";DATE(JOUR(AUJOURDHUI());MOIS(AUJOURDHUI());ANNEE(AUJOURDHUI())) Dans cette formule, indiquez un nombre de jours en **+** ou en **-** après **JOUR(AUJOURDHUI())**, un nombre de mois en **+** ou en **-** après **MOIS(AUJOURDHUI())** ou un nombre d’années en **+** ou en **-** après **ANNEE(AUJOURDHUI())**. Par exemple : Dans 8 mois =FORMAT("DD.MM.YYYY";DATE(JOUR(AUJOURDHUI());MOIS(AUJOURDHUI())+8;ANNEE(AUJOURDHUI()))) Il y a un an =FORMAT("DD.MM.YYYY";DATE(JOUR(AUJOURDHUI());MOIS(AUJOURDHUI());ANNEE(AUJOURDHUI())-1)) Dans 1 an et 6 mois =FORMAT("DD.MM.YYYY";DATE(JOUR(AUJOURDHUI());MOIS(AUJOURDHUI())+6;ANNEE(AUJOURDHUI())+1))| ----- === Conditionner une date en fonction du numéro du jour === Pour afficher une date correspondant à une prochaine occurrence d’un jour ou une occurrence passée, la fonction **SI** et le numéro du jour vont être introduits dans la formule **DATE** complète. Par exemple : Le prochain 5 du mois (Si la date du jour est strictement inférieure à 5, la date affichée sera le 5 du mois en cours. Sinon, la date sera le 5 du mois suivant.) =FORMAT("DD.MM.YYYY";DATE(05;SI(JOUR(AUJOURDHUI())<5;0;1)+MOIS(AUJOURDHUI());ANNEE(AUJOURDHUI()))) Le 15 du mois, 6 occurrences en arrière (Si la date du jour est strictement inférieure à 15, la date affichée sera le 15 de 6 mois auparavant. Sinon, la date sera le 15 de 5 mois auparavant.) =FORMAT("DD.MM.YYYY";DATE(15;SI(JOUR(AUJOURDHUI())<15;0;1)+MOIS(AUJOURDHUI())-6;ANNEE(AUJOURDHUI()))) Dans 2 ans, le prochain 10 du mois =FORMAT("DD.MM.YYYY";DATE(10;SI(JOUR(AUJOURDHUI())<10;0;1)+MOIS(AUJOURDHUI());ANNEE(AUJOURDHUI())+2)) ----- ===== Contrôler / afficher une valeur précédemment rencontrée ===== La formule **VALEURPREC** permet de répéter une valeur rencontrée ou saisie précédemment. Elle est construite sur le modèle suivant : =VALEURPREC("id scene";"chemin du cadre";"id champ";"valeur par défaut") **id scene** : identifiant de la scène, qui contient la valeur à récupérer. Pour connaître l'identifiant d'une scène, survoler son nom dans la partie "Scènes" à gauche de K-Méléon Editor. **chemin du cadre** associé au champ qui contient la valeur à récupérer. Le chemin du cadre est indiqué dans les propriétés d'un champ. **identifiant du champ**, qui contient la valeur à récupérer. L'identifiant est indiqué dans les propriétés d'un champ. **valeur par défaut**, affichée si la scène renseignée n’est pas visitée. === Exemple === =VALEURPREC("scene1";"appFrame";"nom") Cette formule affichera le contenu du champ « nom » de « scène1 ». =VALEURPREC("scene1";"appFrame";"nom";"Durand") Cette formule affichera le contenu du champ « nom » de « scène1 ». Si la scène 1 n’est pas visitée, alors « Durand » sera affiché. ----- ===== Afficher une valeur sous conditions ===== Une formule **SI** permet de spécifier les conditions d'affichage d'une valeur ou d'une autre. Elle est construite sur le modèle suivant : =SI(Condition;"Valeur OK";"Valeur KO facultative") === Exemples === =SI(JOUR(AUJOURDHUI())<15;"A";"B") Cette formule affichera A si le jour renseigné est inférieur à 15, sinon B. =SI(JOUR(AUJOURDHUI())>15;"Retard") Cette formule affichera "Retard" si le jour renseigné est supérieur à 15, sinon rien. ----- ===== Contrôler une comparaison de nombres ===== Lorsque vous exercez un contrôle de valeur dans un chemin, il est possible d'effectuer un contrôle de type **supérieur à**, **inférieur à**, **intervalle de valeurs**. Sélectionnez dans votre chemin la permission de saisie **plage de valeurs**... {{ :guide:selectionnerpermissionsaisie.png?direct |}} ... et utilisez la **formule** adéquate. ----- === Contrôle valeur "strictement inférieure" === =CONTROL.INFERIOR(valeur test;"séparateur de milliers";"séparateur des décimales") **séparateur des milliers** : virgule en Anglais et espace en Français **séparateur des décimales** : point en anglais et virgule en Français A noter que les séparateurs sont facultatifs. __Exemple__ : =CONTROL.INFERIOR(3600;" ";",") Avec cette formule l'apprenant devra saisir une valeur **strictement inférieure** à 3600 en respectant la syntaxe des séparateurs précisée. Si la valeur saisie est supérieur ou égale à 3600 ou si le nombre saisi utilise les séparateurs anglais, le simulateur affichera le message d'erreur. ----- === Contrôle valeur "inférieure ou égale" === =CONTROL.INFERIOR.OR.EQUAL(valeur test; "séparateur des milliers"; "séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **inférieure ou égale** à la valeur test en respectant la syntaxe des séparateurs précisée. ----- === Contrôle valeur "strictement supérieure" === =CONTROL.SUPERIOR(valeur test;"séparateur des milliers";"séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **strictement supérieure** à la valeur test en respectant la syntaxe des séparateurs précisée. ----- === Contrôle valeur "supérieure ou égale" === =CONTROL.SUPERIOR.OR.EQUAL(valeur test;"séparateur des milliers";"séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **supérieure ou égale** à la valeur test en respectant la syntaxe des séparateurs précisée. ----- === Contrôle valeur "comprise ou égale entre" === =CONTROL.INTERVAL(valeur min test;valeur max test;"séparateur des milliers";"séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **comprise ou égale entre** la valeur minimale test et la valeur maximale test en respectant la syntaxe des séparateurs précisée. ----- === Contrôle valeur "strictement comprise entre" === =CONTROL.INTERVAL.OPEN(valeur min test;valeur max test;"séparateur des milliers";"séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **strictement comprise entre** la valeur minimale test et la valeur maximale test en respectant la syntaxe des séparateurs précisée. ----- === Contrôle valeur "comprise entre valeur min exclue et valeur max inclue" === =CONTROL.INTERVAL.LEFT.OPEN(valeur min test;valeur max test;"séparateur des milliers";"séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **comprise entre** la valeur minimale test (exclue) et la valeur maximale test (inclue) en respectant la syntaxe des séparateurs précisée. ----- === Contrôle valeur "comprise entre valeur min inclue et valeur max exclue" === =CONTROL.INTERVAL.RIGHT.OPEN(valeur min test;valeur max test;"séparateur des milliers";"séparateur des décimales") Avec cette formule l'apprenant devra saisir une valeur **comprise entre** la valeur minimale test (inclue) et la valeur maximale test (exclue) en respectant la syntaxe des séparateurs précisée. ----- ===== Contrôler une comparaison de dates ===== Lorsque vous exercez un contrôle de valeur de date dans un chemin, il est possible d'effectuer un contrôle de type **antérieur à**, **postérieur à**, **intervalle de valeurs de date**. Sélectionnez dans votre chemin la permission de saisie **plage de valeurs**... {{ :guide:selectionnerpermissionsaisie.png?direct |}} ... et utilisez la **formule** adéquate. ----- === Contrôle "date strictement antérieure à" === =CONTROL.INFERIOR(valeur de date test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date strictement antérieure** à la date test en respectant le format de date spécifié. ----- === Contrôle "date antérieure ou similaire à" === =CONTROL.INFERIOR.OR.EQUAL(valeur de date test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date antérieure ou similaire** à la date test en respectant le format de date spécifié. ----- === Contrôle "date strictement postérieure à" === =CONTROL.SUPERIOR(valeur de date test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date strictement postérieure** à la date test en respectant le format de date spécifié. ----- === Contrôle "date postérieure ou similaire à" === =CONTROL.SUPERIOR.OR.EQUAL(valeur de date test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date postérieure ou similaire** à la date test en respectant le format de date spécifié. ----- === Contrôle "date comprise ou similaire entre" === =CONTROL.INTERVAL(valeur de date min test;valeur de date max test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date comprise ou similaire** entre la date test min et la date test max en respectant le format de date spécifié. ----- === Contrôle "date strictement comprise entre" === =CONTROL.INTERVAL.OPEN(valeur de date min test;valeur de date max test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date strictement comprise** entre la date test min et la date test max en respectant le format de date spécifié. ----- === Contrôle "date comprise entre date min exclue et date max inclue" === =CONTROL.INTERVAL.LEFT.OPEN(valeur de date min test;valeur de date max test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date comprise** entre la date test min (exclue) et la date test max (inclue) en respectant le format de date spécifié. ----- === Contrôle "date comprise entre date min inclue et date max exclue" === =CONTROL.INTERVAL.RIGHT.OPEN(valeur de date min test;valeur de date max test;"format de date";"langue") [[guide:expert_04#Définir la valeur de la date|Pour définir la valeur de date test]]. [[guide:expert_04#Définir le format d'affichage de la date|Pour définir le format de date]]. Avec cette formule l'apprenant devra saisir une **date comprise** entre la date test min (inclue) et la date test max (exclue) en respectant le format de date spécifié. ----- ===== Manipuler du texte ===== Pour toutes les formules suivantes //string// peut être une **formule** retournant une chaîne de caractères et //n// une formule retournant un nombre. Si //String// est une chaîne de caractère fixe, placer des guillemets //"ma chaîne de caractères"//. ----- === CONCATENER === =CONCATENER(string;string;string; …) concatène les caractères. En anglais **CONCATENATE**. === Exemples === Si vous souhaitez qu'un champ affiche la saisie libre de l'apprenant d'un autre champ ainsi que le prochain jour ouvré vous utiliserez une formule **CONCATENER** qui comprendra les formules **[[guide:expert_04#Contrôler / afficher une valeur précédemment rencontrée |VALEURPREC]]** et **[[guide:expert_04#Un nombre de jours ouvrés, avant ou après aujourd’hui |SERIE.JOUR.OUVRE]]**. =CONCATENER(VALEURPREC("scene1";"appFrame";"nom");FORMAT("DD.MM.YYYY";SERIE.JOUR.OUVRE(AUJOURDHUI();1))) Si vous souhaitez qu'un champ affiche la concaténation des noms Pierre, Paul, Jacques vous utiliserez la formule : =CONCATENER("Pierre";"Paul";"Jacques") ----- === Afficher n caractères depuis la gauche === =GAUCHE(string; n) retourne les n caractères de la string en partant de la gauche. En anglais **LEFT**. ----- === Afficher n caractères depuis la droite === =DROITE(string; n) retourne les n caractères de la string en partant de la droite. En anglais **RIGHT**. ----- === Afficher une chaîne de caractères en minuscule === =MINUSCULE(string) retourne le texte en minuscule. En anglais **LOWER**. ----- === Afficher une chaîne de caractères en majuscule === =MAJUSCULE(string) retourne le texte en majuscule. En anglais **UPPER**. ----- === Afficher une chaîne de caractères en nom propre === =NOMPROPRE(string) retourne le texte avec la 1ère lettre de chaque mot en majuscule et les suivantes en minuscule. En anglais **PROPER**. ----- ===== Utiliser les opérateurs logiques ===== -----