> For the complete documentation index, see [llms.txt](https://docs.dietrichs.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.dietrichs.com/dietrichs-intelligent-documentation/francais/le-systeme-de-variables/formules-et-textes/formules.md).

# Formules

Voici les fonctions qui peuvent être employées dans les formules, en particulier pour les valeurs intermédiaires :

<details>

<summary>+ - * /</summary>

Les signes opératoires courant : plus, moins, multiplier et diviser.

</details>

<details>

<summary>()</summary>

Parenthèses pour déterminer les priorités dans les formules.

</details>

<details>

<summary>sin, cos, tan</summary>

Les fonctions trigonométriques courantes : Sinus, Cosinus et Tangente. L’angle doit être indiqué en degrés (cercle = 360°).

</details>

<details>

<summary>asin, acos, atan</summary>

Les fonctions trigonométriques courantes : Arc Sinus, Arc Cosinus et Arc Tangente pour calculer la mesure d’un angle orienté en degrés (cercle = 360°).

</details>

<details>

<summary>sqrt</summary>

Racine carré Exemple: sqrt(25) = 5.

</details>

<details>

<summary>^</summary>

Exposant. 5^2 (Soit 5 exposant 2) = 25.

</details>

<details>

<summary>Pi</summary>

Nombre Pi. Le périmètre d’un cercle de diamètre 2.5 m est calculé comme suit: 2.5\*Pi

</details>

<details>

<summary>round</summary>

Arrondi. Le résultat est arrondi. round(2.4) donne 2.0, round(2.5) donne 3.0. Si VAB doit toujours être arrondi au-dessus, la formule à utiliser est : round(VAB+0.5). Cette fonction est importante pour une répartition.

</details>

<details>

<summary>abs</summary>

Valeur absolue, Valeur sans signe (sans le signe moins -).\
abs(25) donne 25, abs(-25) donne également 25. Cette fonction est importante pour calculer une différence (distance) entre deux valeurs dont l’une est plus grande mais sans savoir laquelle.

</details>

### Éditeur de formules

(14.01) Dans l’éditeur de formules, la liste des variables utilisées est affichée dans une zone à gauche de la fenêtre. Le commentaire est également affiché derrière le nom de la variable. La sélection de l’une d’entre elles génère l’affichage de l’image d’aide associée que son emplacement dans l’arborescence ce qui rend la compréhension de la formule plus simple.

(20.01) Editeur DI-COB – Affichage des valeurs actuelles dans l’éditeur de formules\
Si une formule est ouverte dans l'éditeur de formules, les valeurs actuelles des variables sont également affichées dans la liste des variables après les textes. En haut de la boîte de dialogue, vous pouvez voir le résultat de la formule entière. Ces affichages sont très utiles pour vérifier les formules ; il est ainsi plus facile d’identifier si un résultat est dû à la formule actuelle ou s'il y a une valeur inattendue pour une variable. Les valeurs ne peuvent être affichées que dans l'éditeur DI-COB car c’est le seul module depuis lequel les variables système possèdent une valeur.

### Toutes les variables dans l’éditeur de formules

(15.01) Toutes les formules peuvent être munies de conditions. Les valeurs chiffrées mais aussi les autres types de valeurs peuvent désormais être utilisées dans les conditions (Par exemple, les textes). C’est pourquoi toutes les variables sont maintenant visibles depuis l’éditeur de formules et pas seulement les variables avec un format chiffré.

## **Formules conditionnelles, conditions**

Les conditions peuvent être traitées dans les formules. Ainsi, il est possible de créer une formule plus flexible qui réagira à différentes situations. Par ex., le nombre d’EAI peut être réduit considérablement en utilisant une formule conditionnelle.

Une telle formule se compose de trois parties qui sont séparées par un point-virgule :

**`(condition);(Formule si condition remplie);(Formule si condition non remplie)`**

(14.03) Les parenthèses permettent de couvrir plus de deux hypothèses.

Exemples:

**`(condition 1);((condition 2);(2 remplie);(2 non remplie));(1 non remplie)`**

&#x20;             **`(---------------`*****`1 remplie-----------------`*****`)`**

&#x20;

**`(condition 1);(1 remplie);((condition 2);(2 remplie);(2 non remplie))`**

&#x20;                         **`(---------------`*****`1 non remplie-------------`*****`)`**

L’imbrication de conditions peut être poursuivie à l’intérieure des conditions "remplie" et "non remplie".

Ainsi, un niveau conditionnel inférieur peut être introduit. Exemple :

**`(con. 1);(1 remplie.);((con. 2);(2 remplie.);((con. 3);(3 remplie.);(3 non remplie.)))`**

&#x20;                     **`(---------`*****`1 non remplie----------------------------------------`*****`)`**

&#x20;                                            **`(---------`*****`2 non remplie----------------`*****`)`**

### Comparaisons conditionnelles

<details>

<summary>=</summary>

identique. Les valeurs situées de part et d’autre du signe = doivent être identiques.\
\&#xNAN;*Exemple : la condition VAB = 4 est remplie lorsque VAB est égale à 4.*

</details>

<details>

<summary>!=</summary>

différent. Les valeurs situées de part et d’autre du signe != doivent être différentes.\
\&#xNAN;*Exemple: la condition VAB!=4 est remplie lorsque VAB est différent de 4.*

</details>

<details>

<summary>></summary>

plus grand. La valeur devant le signe > doit être plus grande que la valeur située derrière.\
\&#xNAN;*Exemple la condition VAB>4 est remplie lorsque VAB est supérieure à 4.*

</details>

<details>

<summary>>=</summary>

plus grand ou égal. La valeur devant le signe > doit être plus grande ou identique à la valeur située derrière le signe.\
\&#xNAN;*Exemple la condition VAB>=4 est remplie lorsque VAB est supérieure ou égale à 4.*

</details>

<details>

<summary>&#x3C;</summary>

plus petit. La valeur devant le signe > doit être plus petite que la valeur située derrière.\
\&#xNAN;*Exemple la condition VAB<4 est remplie lorsque VAB est inférieure à 4.*

</details>

<details>

<summary>&#x3C;=</summary>

plus petit ou égal. La valeur devant le signe > doit être plus petite ou identique à la valeur située derrière le signe.\
\&#xNAN;*Exemple la condition VAB<=4 est remplie lorsque VAB est inférieure ou égale à 4.*

</details>

<details>

<summary>&#x26;</summary>

et. Par ce signe, plusieurs conditions peuvent être liées.\
Exemple : Si la variable VAB doit être comprise entre 4 et 8, la condition sera : (VAB>4)&(VAB<8)

</details>

### Conditions liées, liens logiques

Plusieurs conditions peuvent être logiquement liées :

<details>

<summary>&#x26;</summary>

logique du "**et**" : Toutes les conditions utilisant la logique du "et" doivent être remplies. Ainsi, si VAB doit être supérieur à 4 est plus petit que 8, l’expression suivante sera formulée dans les conditions : **`(VAB>4)&(VAB<8)`**

</details>

<details>

<summary>|</summary>

logique du "**ou**" : (V20.01) Au moins une des conditions doit être remplie :

* Comme défini dans le language C++) pour définir ou, le caractère "|" est utilisé. Il est obtenu sur un clavier Azerty avec la combinaison de touches "Alt Gr" "6" (la touche 6 placée au-dessus des touches T et Y).
* Nous utilisons ici la logique habituelle du "**ou**" : si au moins une des deux conditions partielles est remplie, l'ensemble ou l'expression est rempli. Les deux conditions partielles peuvent également être remplies. (Avec l'exclusivité - ou une seule des deux peut être remplie).

</details>

Les liens logiques "**et**" et "**ou**" peuvent également être utilisés en combinaison. Voici des exemples de formules conditionnelles :

Exemple : **`((V_abc=a)|(V_abc=b));(0.04);(0.16)`**

Si la variable V\_abc a la valeur a **ou** b, la valeur est de 0.04. Dans tous les autres cas, la valeur est de 0.16.

Exemple : **`((V_aa=a)|(V_bb=b));(0.04);(0.16)`**

Si la variable V\_aa a la valeur a **ou** V\_bb a la valeur b, alors la valeur est 0.04. La condition générale est également remplie si les deux parties s'appliquent (V\_aa=a et V\_bb=b). Dans tous les autres cas, la valeur est de 0.16.

Exemple de simulation exclusive avec "ou" : **`(((V_a1=0)&(V_a2!=0))|((V_a1!=0)&(V_a2=0)));(0.04);(0.16)`**

Si une seule des variables V\_a1 et V\_a2 peut avoir la valeur 0, alors la valeur est 0.04. Dans tous les autres cas, la valeur est 0.16.

### Possibilités de conditions imbriquées

Dans les formules conditionnelles, les conditions peuvent être très imbriquées, par ex. :

<mark style="color:green;">**`(((V_a1=0)&(V_a2!=0))|((V_a1!=0)&(V_a2=0)))`**</mark>**`;(0.04);(0.16)`**

Dans les formules conditionnelles, les conditions peuvent également contenir des formules, par ex. :

**`(V_a1=`**<mark style="color:green;">**`(1+2+V_a2)`**</mark>**`);(0.04);(0.16)`**

Dans les formules conditionnelles, les parties vrai/faux (après le premier ou le deuxième point-virgule) peuvent également contenir des formules conditionnelles complètes et donc être imbriquées davantage, par ex. :

**`(V_a1=0);(`**<mark style="color:green;">**`(V_a2=0);(0.04);(0.16)`**</mark>**`);(0.16)`**

Toutefois, vous ne pouvez pas utiliser une formule conditionnelle complète dans le cadre d'une condition.

Par conséquent, ce qui suit n'est pas autorisé :

**`(0.3<(`**<mark style="color:red;">**`(0.4<0.5);(0.6);(0.1)`**</mark>**`);(0.04);(0.10)`**

Comme mentionné ci-dessus, les conditions en soi peuvent être imbriquées arbitrairement et les différentes parties (à gauche et à droite du caractère de comparaison) peuvent également contenir des formules. Mais la condition ne doit pas contenir une <mark style="color:red;">formule conditionnelle complète</mark>. Il ne doit donc y avoir aucun point-virgule.

Logiquement, ces cas peuvent être couverts en changeant la formule ou être divisés en plusieurs valeurs intermédiaires pour une meilleure vue d'ensemble.

### Tolérance pour la comparaison de nombres

Lorsque l’on souhaite comparer des valeurs qui ont été calculées, il faut garder à l’esprit que les nombres sont conservés avec plusieurs décimales par l’ordinateur. Aussi, la valeur enregistrée par l’ordinateur peut être 0.99999999999 ou 1.00000000000001 au lieu de 1. Cela explique qu’une comparaison avec la valeur 1.0 (VA=1.0) peut échouer même si elle semble remplie à première vue.

* Pour éviter cela, une tolérance peut être définie dans la condition. Elle permet de vérifier la différence par rapport à la valeur souhaitée. Pour que la condition VA=1.0 soit remplie avec une tolérance de 0.01, le résultat doit être compris entre -0.01 et +0.01. La condition doit alors être définie ainsi : **`((0.01>(VA - 1.0))&(-0.01<(VA - 1.0)))`**\
  Pour éliminer le signe, vous pouvez également utiliser la fonction abs sur la différence : **`(0.01>(abs(VA - 1.0)))`**
* Dans les autres cas, un nombre sûr suffit pour la comparaison. C’est souvent le cas lorsque l’on calcule un nombre d’éléments pour une répartition. Si la condition définit que le nombre (VANZ) est supérieur à 3, nous ne comparons pas (VANZ>3) mais (VANZ>2.5). Peu importe que le résultat pour VANZ soit 2.999999 ou 3.0000001.

### Textes dans les formules conditionnelles

(21.01) Ce chapitre de la version 18.01 a été complètement supprimé.

### Comparaison des textes

Les textes peuvent également être utilisés pour la comparaison. Ces variables peuvent être utilisées avec toutes les unités qui n’ont pas une valeur numérique : txt, Idnr., Enum, A-F, ...

La valeur de comparaison est écrite directement en tant que texte sans aucun caractère supplémentaire. Par exemple, si la variable "**`V_Textevariable`**" doit être identique à "*Test*", la condition sera formulée ainsi: **`(V_Textevariable=Test)`**

Les textes sont classés par ordre alphabétique et peuvent par conséquent être comparés avec "supérieur" et "inférieur". Le texte le plus petit correspond à celui dont l’ordre alphabétique arrive en premier: "**Aluminium**" est ainsi "*inférieur*" à "**Plomb**".

Si l’on souhaite qu’une valeur de variable ne doit pas être vide, nous devons indiquer que la valeur est  "supérieure" à " " (un espace): **`(V_Textevariable> )`**. Il n’existe pas de formule pour identifier si le texte n’est pas renseigné (vide), il faut donc comparer la valeur de la variable avec un texte court. La classification des caractères positionne l’espace " " en première position dans l’ordre alphabétique. L’utilisation de l’espace est utile lorsque l’on souhaite utiliser les textes avec un "**#**" (Référence produit des éléments d’aide) car le caractère "**#**" est situé avant les nombres et lettres de l’alphabet.

### Texte dans les conditions : Spécifique aux fichiers \*.oa1 (IFC Premium)

Dans les conditions (= Condition) des fichiers \*.oa1, les comparaisons sont effectuées avec des variables système. Les informations suivantes doivent être respectées :

Si la variable système est un nombre, celui est écrit directement ; Exemple : Condition=(OH=1.23) Toutefois, s’il s’agit d’un texte précédé d’un nombre, ce dernier devra être écrit (et seulement dans ce cas-là) entre guillemets. Exemple : Condition=(IFCNAME="1.23")

### Liste et joker (méta caractère) dans les conditions

(15.01) Jusqu’à présent, une condition pouvait être comparée uniquement à une valeur. De nouvelles dispositions ajoutées pour les conditions permettent désormais d’interroger les étages (<mark style="color:blue;">**`SWAKT`**</mark>) ou les modèles de conception (<mark style="color:blue;">**`AUSF`**</mark>).

Listes : Si une condition est valable uniquement pour le RC, elle s’énonce **`(`**<mark style="color:blue;">**`SWAKT`**</mark>**`=GF)`**. Si elle est valable pour les étages RC, Et et Co, elle s’énonce **`(`**<mark style="color:blue;">**`SWAKT`**</mark>**`={GF~UF~AG})`**. Les données d’une liste doivent être renseignées entre deux accolades {} et délimités par le caractère \~.

Joker : Une condition s’applique uniquement sur le modèle de conception **Mur extérieur\_V**, lorsque l’on écrit **`(`**<mark style="color:blue;">**`AUSF`**</mark>**`=Mur extérieur_V)`**. Elle s’applique à tous les modèles de conception commençant par **Mu** avec la condition **`(`**<mark style="color:blue;">**`AUSF`**</mark>**`={Mu*})`**. L’expression est renseignée entre deux accolades et le joker par un astérisque **\***. Les commandes suivantes sont prises en compte :

**ABC\*** Commence par *ABC*, peu importe la fin

**\*ABC** Peu importe le début, se termine par *ABC*

**\*ABC\*** Comporte *ABC*, peu importe l’endroit où se situe ces caractères

Listes et joker: Ces deux possibilités peuvent également être combinées. Pour appliquer une condition à toutes les conceptions, on devra utiliser les lettres <mark style="color:blue;">**`AW`**</mark> (mur extérieur) et <mark style="color:blue;">**`IW`**</mark> (mur intérieur). Ce qui se traduira par la formule suivante :**`(`**<mark style="color:blue;">**`AUSF`**</mark>**`={`**<mark style="color:blue;">**`AW`**</mark>**`*~`**<mark style="color:blue;">**`IW`**</mark>**`*})`**.

## Répartition dans les formules

Seulement dans les E.C.P. : Une répartition peut être formulée pour définir les coordonnées de points des composants, des bibliothèques de composant, des bibliothèques d’élément de plan (V20.01) et pour les points de référence des E.A.I. :

* Chaque coordonnée reçoit sa valeur sous la forme **`(Départ~Saut~Chiffre)`**. Le chiffre 1 signifie qu’aucun saut n’est effectué, ainsi l’objet sera réalisé uniquement au point de départ.
* Les répartitions ne peuvent être formulées qu’en direction de X, Y et Z :

**`X(1.0~0.1~5)Y(0.0~0.0~1)Z(0.0~0.0~1)`** Série suivant X avec 5 éléments, Départ de 1.0 avec incrémentation tous les 0.1

**`X(1.0~0.1~5)Y(0.0~0.2~4)Z(0.0~0.0~1)`** Série suivant X avec 5 éléments, Départ de 1.0 avec incrémentation tous les 0.1, Cette série est reproduite 4 fois en direction de Y.

* Avec cette fonction de répartition, il est donc également possible de créer des grilles 2D ou 3D d’éléments de dessin, de composants, etc...

## Messages d’erreur, message lors de formules incorrectes

(V20.01) Avec l'introduction du nouveau système de formule, les messages d'erreur ont également été révisés :

* L'affichage des erreurs de formule a été étendu :
  * Les formules sont vérifiées de manière optionnelle lors de l'ouverture des fichiers (COB, ECP, configuration). Si vous le souhaitez, la case correspondante peut être cochée dans la fonction *5-02-1 Sauvegarde et historique*. Le bâtiment doit être redémarré pour que la prise en compte de cette option soit disponible.
  * Dans la mesure du possible, le type d'erreur de formule et la formule affectée sont affichés. Ce message peut être copié dans le presse-papiers et utilisé ensuite dans la fonction de recherche des éditeurs.
  * Le bouton dans le message peut être utilisé pour arrêter l'affichage d'autres erreurs. Ceci est valable jusqu'au redémarrage du bâtiment (ou de l'éditeur DI-COB). Toutefois, le message d'erreur d'une division par 0 ne peut pas être supprimé.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.dietrichs.com/dietrichs-intelligent-documentation/francais/le-systeme-de-variables/formules-et-textes/formules.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
