diff --git a/doc/variable/choice.md b/doc/variable/choice.md
index 5f5d158e0..855361be4 100644
--- a/doc/variable/choice.md
+++ b/doc/variable/choice.md
@@ -1,6 +1,6 @@
# Les variables à choix
-## Les variables à choix simple
+## Une variable à choix
Il est possible d'imposer une liste de valeur pour une variable particulière :
@@ -12,11 +12,10 @@ Il est possible d'imposer une liste de valeur pour une variable particulière :
```
-Dans ce cas, seules les valeurs proposées sont possibles pour cette variable. Mais il est possible de mettre la valeur "None".
+Dans ce cas, seules les valeurs proposées sont possibles pour cette variable.
+Cette variable n'est pas obligatoire dont il est possible de mettre la valeur "None".
-## Les variables à choix avec valeur
-
-Si on précise une valeur, la variable passe obligatoire et la valeur "None" n'est plus autorisé :
+Si la variable est obligatoire ou si une valeur est précisée (la variable passe obligatoire) alors la valeur "None" n'est plus autorisé :
```
@@ -26,3 +25,67 @@ Si on précise une valeur, la variable passe obligatoire et la valeur "None" n'e
val1
```
+
+## Un variable à choix typée
+
+Par défaut les choix sont de type "string". Il est possible de préciser des nombres, des booléens ou la valeur None :
+
+```
+
+ val1
+ val2
+ 3
+ True
+
+
+```
+
+Comme vu précédement ajouter la valeur None n'est pas utile parce qu'elle est automatiquement ajouté si la variable n'est pas obligatoire.
+
+## Ajouter une option à une variable à choix existante
+
+Pour ajouter un choix à une variable à choix existante, rien de plus simple, juste redéfinir la variable en ajoutant le choix voulu :
+
+```
+
+ val4
+
+```
+
+## Redéfinir une option à choix
+
+Si on veut supprimer un choix ou redéfinir complètement la liste, il faut redéfinir cette variable et ajouter l'attribut "remove_choice" à "True" :
+
+```
+
+ val1
+ val2
+
+```
+
+Dans ce cas toutes les anciens choix ne seront plus possible. Seuls les nouveaux le seront.
+
+## Un variable à choix provenant d'une variable
+
+Une variable à valeur multiple peut servir de source des choix :
+
+```
+
+ other_variable
+
+```
+
+Dans ce cas, toutes les valeurs de la variable seront des choix utilisables par l'utilisateur.
+Seul un choice de type "variable" est possible par variable.
+
+## Un variable à choix provenant d'une fonction
+
+```
+
+
+ 0
+ 10
+
+ 9
+
+```
diff --git a/tests/dictionaries/10valid_enum_append/00-base.xml b/tests/dictionaries/10valid_enum_append/00-base.xml
new file mode 100644
index 000000000..18c238b3c
--- /dev/null
+++ b/tests/dictionaries/10valid_enum_append/00-base.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+ non
+
+
+
+
+ b
+ a
+ b
+
+
+
+
+
diff --git a/tests/dictionaries/10valid_enum_append/01-base.xml b/tests/dictionaries/10valid_enum_append/01-base.xml
new file mode 100644
index 000000000..bf8e4389e
--- /dev/null
+++ b/tests/dictionaries/10valid_enum_append/01-base.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+ c
+ c
+
+
+
+
+
+
diff --git a/tests/dictionaries/10valid_enum_append/__init__.py b/tests/dictionaries/10valid_enum_append/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/10valid_enum_append/makedict/after.json b/tests/dictionaries/10valid_enum_append/makedict/after.json
new file mode 100644
index 000000000..d6497f423
--- /dev/null
+++ b/tests/dictionaries/10valid_enum_append/makedict/after.json
@@ -0,0 +1,10 @@
+{
+ "rougail.general.mode_conteneur_actif": {
+ "owner": "default",
+ "value": "non"
+ },
+ "rougail.enumfam.enumvar": {
+ "owner": "default",
+ "value": "c"
+ }
+}
diff --git a/tests/dictionaries/10valid_enum_append/makedict/base.json b/tests/dictionaries/10valid_enum_append/makedict/base.json
new file mode 100644
index 000000000..58c810c57
--- /dev/null
+++ b/tests/dictionaries/10valid_enum_append/makedict/base.json
@@ -0,0 +1,4 @@
+{
+ "rougail.general.mode_conteneur_actif": "non",
+ "rougail.enumfam.enumvar": "c"
+}
diff --git a/tests/dictionaries/10valid_enum_append/makedict/before.json b/tests/dictionaries/10valid_enum_append/makedict/before.json
new file mode 100644
index 000000000..d6497f423
--- /dev/null
+++ b/tests/dictionaries/10valid_enum_append/makedict/before.json
@@ -0,0 +1,10 @@
+{
+ "rougail.general.mode_conteneur_actif": {
+ "owner": "default",
+ "value": "non"
+ },
+ "rougail.enumfam.enumvar": {
+ "owner": "default",
+ "value": "c"
+ }
+}
diff --git a/tests/dictionaries/10valid_enum_append/tiramisu/base.py b/tests/dictionaries/10valid_enum_append/tiramisu/base.py
new file mode 100644
index 000000000..0f349e81f
--- /dev/null
+++ b/tests/dictionaries/10valid_enum_append/tiramisu/base.py
@@ -0,0 +1,20 @@
+from importlib.machinery import SourceFileLoader
+from importlib.util import spec_from_loader, module_from_spec
+loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py')
+spec = spec_from_loader(loader.name, loader)
+func = module_from_spec(spec)
+loader.exec_module(func)
+for key, value in dict(locals()).items():
+ if key != ['SourceFileLoader', 'func']:
+ setattr(func, key, value)
+try:
+ from tiramisu3 import *
+except:
+ from tiramisu import *
+option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"expert", "mandatory"}))
+option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"expert"}))
+option_5 = ChoiceOption(name="enumvar", doc="multi", values=('a', 'b', 'c'), default="c", properties=frozenset({"expert", "mandatory"}))
+option_5.impl_set_information('help', "bla bla bla")
+option_4 = OptionDescription(name="enumfam", doc="enumfam", children=[option_5], properties=frozenset({"expert"}))
+option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2, option_4])
+option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1])