diff --git a/src/exercices/2NDE/2DS-REA.ts b/src/exercices/2NDE/2DS-REA.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dbc77fe85e8356787d8022b6f7e1d3f58b8d6bec
--- /dev/null
+++ b/src/exercices/2NDE/2DS-REA.ts
@@ -0,0 +1,172 @@
+/**
+ * 2DS-REA.ts // Conversions
+ * @author Régis Ferreira Da Silva
+ * @date 2024-12-18
+ */
+
+import { combinaisonListes } from '../../lib/outils/arrayOutils'
+import Exercice from '../Exercice'
+import { listeQuestionsToContenu, randint } from '../../modules/outils.js'
+import { chiffresSignificatifs, ecritureScientifique } from '../../lib/outils_phys/ecritures'
+import { ajouteChampTexteMathLive } from '../../lib/interactif/questionMathLive.js'
+import { approximatelyCompare } from '../../lib/interactif/comparisonFunctions'
+import { handleAnswers } from '../../lib/interactif/gestionInteractif'
+import { prenom } from '../../lib/outils/Personne'
+
+// à remplacer
+export const titre = 'Effectuer des procédures courantes (calculs, représentations, collectes de données, etc.).'
+export const interactifReady = true
+export const interactifType = 'mathLive'
+// à remplacer
+export const dateDePublication = '18/12/2024'
+// à remplacer : pnpm getNewUuid pour récupérer l'UUID pour un nouvel exercice
+export const uuid = '1dd27'
+// à remplacer "test-2" par la référence dans le référentiel (disponible dans "src/json/allExercice.json")
+export const refs = {
+  'fr-fr': ['2DS-REA']
+}
+
+export default class Conversions extends Exercice {
+  constructor () {
+    super()
+    this.nbQuestions = 1
+    this.sup = 1
+    this.besoinFormulaireNumerique = ['Choix des questions', 3, '1 : Conversion grandeur simple (novice)\n 2 : Conversion grandeur composée  (confirmé)\n 3 : Conversion grandeur composée  (expert)']
+    // On énonce la question
+    this.introduction = `Aide ${prenom()} à réaliser la (ou les) conversion(s) d'unité suivante(s) : <br>`
+  }
+
+  nouvelleVersion () {
+    this.listeQuestions = []
+    this.listeCorrections = []
+
+    let typesDeQuestionsDisponibles
+    if (this.sup === 1) {
+      typesDeQuestionsDisponibles = ['novice']
+    } else if (this.sup === 2) {
+      typesDeQuestionsDisponibles = ['confirme']
+    } else if (this.sup === 3) {
+      typesDeQuestionsDisponibles = ['expert']
+    }
+
+    const listeTypeDeQuestions = combinaisonListes(typesDeQuestionsDisponibles, this.nbQuestions)
+
+    for (let i = 0, N, cpt = 0; i < this.nbQuestions && cpt < 50;) {
+      // variables conversions simples
+      N = randint(200, 500)
+      const nUnite = randint(0, 6)// choix de l'unité
+      const unitesList = ['m', 'g', 'L', 'A', 'V', 'W', 'J']
+      const unitesConvertieList = ['déci', 'centi', 'milli', 'déca', 'hecto', 'kilo']
+      const nSousUnite = randint(1, 5)// choix de la sous-unité
+      const symbolesUniteConvertieList = ['d', 'c', 'm', 'da', 'h', 'k']
+      const explicitationUniteConvertieList = ['un dixième', 'un centième', 'un millième', 'une dizaine', 'une centaine', 'un millier']
+      const facteursConversionUniteList = ['10 fois plus grand', '100 fois plus grand', '1000 fois plus grand', '10 fois plus petit', '100 fois plus petit', '1000 fois plus petit']
+      const NExpressionConvertiList = [`${N}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}\\times 10`, `${N}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}\\times 100`, `${N}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}\\times 1000`, `\\cfrac{${N}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}}{10}`, `\\cfrac{${N}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}}{100}`, `\\cfrac{${N}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}}{1000}`]
+      const NConvertiList = [N * 10, N * 100, N * 1000, N / 10, N / 100, N / 1000]
+      // variables conversions vitesse
+      const Vkmh = randint(25, 120)
+      const Vms = Vkmh / 3.6
+
+      const nbcs = 3
+
+      switch (listeTypeDeQuestions[i]) {
+        case 'novice':
+
+          if (this.interactif) {
+            //   On y ajoute le champ de réponse interactif
+            this.question = ajouteChampTexteMathLive(this, i, 'inline largeur01', { texteAvant: `$${N}\\, \\text{${unitesList[nUnite]}} =$`, texteApres: `$\\text{ ${symbolesUniteConvertieList[nSousUnite]}}\\text{${unitesList[nUnite]}}$` })
+          } else {
+            this.question = `$${N}\\, \\text{${unitesList[nUnite]}} = ... \\, \\text{ ${symbolesUniteConvertieList[nSousUnite]}}\\text{${unitesList[nUnite]}}$
+            `
+          }
+
+          //   On génère la réponse
+          this.reponse = NConvertiList[nSousUnite]
+          //   On gère la réponse. Ici, on utilise la fonction approximatelyCompare pour vérifier la valeur de T
+          handleAnswers(this, i, { reponse: { value: this.reponse, compare: approximatelyCompare } })
+          //   On écrit la correction
+          this.correction = `Pour réaliser la conversion, il suffit de savoir que 1 ${unitesConvertieList[nSousUnite]} correspond à ${explicitationUniteConvertieList[nSousUnite]} d'une unité. <br> 
+                    Une unité est donc ${facteursConversionUniteList[nSousUnite]} qu'un ${unitesConvertieList[nSousUnite]} . <br>
+                    Par conséquent $${N}\\, \\text{${unitesList[nUnite]}} = ${NExpressionConvertiList[nSousUnite]}=${NConvertiList[nSousUnite]}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}$.<br><br>
+                    En tenant compte des chiffres significatifs, on peut écrire que $${N}\\, \\text{${unitesList[nUnite]}} = ${ecritureScientifique(NConvertiList[nSousUnite], nbcs)}\\, \\text{${symbolesUniteConvertieList[nSousUnite]}${unitesList[nUnite]}}$.
+                    `
+          // fin question
+          break
+        case 'confirme':
+          if (this.interactif) {
+            //   On y ajoute le champ de réponse interactif
+            this.question = ajouteChampTexteMathLive(this, i, 'inline largeur01', { texteAvant: `$${chiffresSignificatifs(Vkmh, nbcs)}\\, \\text{km/h} =$`, texteApres: '$\\text{m/s}$' })
+          } else {
+            this.question = `$${chiffresSignificatifs(Vkmh, nbcs)}\\, \\text{km/h} = ... \\, \\text{m/s}$
+            `
+          }
+          //   On génère la réponse
+          this.reponse = Vms
+          //   On gère la réponse. Ici, on utilise la fonction approximatelyCompare pour vérifier la valeur de T
+          handleAnswers(this, i, { reponse: { value: this.reponse, compare: approximatelyCompare } })
+          //   On écrit la correction
+          this.correction = `Il s'agit de faire ici une double conversion : les kilomètres en mètres et les heures en seconde. <br>
+                    <ul>
+                    <li>1 kilomètre correspond à 1000 mètres,</li>
+                    <li>1 heure correspond à 3 600 secondes ($60\\times 60\\,\\text{s}$).</li>
+                    </ul>
+                    Ramenons-nous à la formule de la vitesse en faisant figurer les unités :<br><br>
+                    $v=\\cfrac{\\text{distance parcourue}}{\\text{durée du trajet}}=\\cfrac{${chiffresSignificatifs(Vkmh, nbcs)}\\,\\text{km}}{1\\, \\text{h}}=\\cfrac{${chiffresSignificatifs(Vkmh, nbcs)}\\times\\text{1 km}}{1\\, \\text{h}}$<br><br>
+                    Il s'agit maintenant de reporter les conversions d'unité directement dans la formule comme suit :<br><br>
+                    $v=\\cfrac{${chiffresSignificatifs(Vkmh, nbcs)}\\times\\text{1 km}}{\\text{1\\, \\text{h}}}=\\cfrac{${chiffresSignificatifs(Vkmh, nbcs)}\\times\\text{1 000 m}}{\\text{3600 s}}=${chiffresSignificatifs(Vms, nbcs)} \\,\\text{m/s}$<br><br>
+                    On peut donc écrire que $v=${chiffresSignificatifs(Vkmh, nbcs)} \\,\\text{km/h} =${chiffresSignificatifs(Vms, nbcs)} \\,\\text{m/s}$
+                    `
+          // fin question
+          break
+        case 'expert':
+          if (this.interactif) {
+            //   On y ajoute le champ de réponse interactif
+            this.question = ajouteChampTexteMathLive(this, i, 'inline largeur01', { texteAvant: `$${chiffresSignificatifs(Vms, nbcs)}\\, \\text{m/s} =$`, texteApres: '$\\text{hm/h}$' })
+          } else {
+            this.question = `$${chiffresSignificatifs(Vms, nbcs)}\\, \\text{m/s} = ... \\, \\text{km/h}$
+            `
+          }
+          //   On génère la réponse
+          this.reponse = Vkmh
+          //   On gère la réponse. Ici, on utilise la fonction approximatelyCompare pour vérifier la valeur de T
+          handleAnswers(this, i, { reponse: { value: this.reponse, compare: approximatelyCompare } })
+          //   On écrit la correction
+          this.correction = `Il s'agit de faire ici une double conversion : les mètres en kilomètres et les secondes en heures. <br>
+                    <ul>
+                    <li>Comme 1 kilomètre correspond à 1000 mètre alors 1 mètre correspond donc à $\\cfrac{1}{1000}\\,\\text{km}$.</li>
+                    <li>Comme 1 heure correspond à 3 600 s alors 1 seconde correspond donc à $\\cfrac{1}{3600}\\,\\text{h}$. <br>
+                    Le raisonnement précédent peut se ramener à une situation de proportionnalité : <br><br>
+
+                    $\\def\\arraystretch{1.5}
+                    \\begin{array}{|c|c|}
+                    \\hline
+                    1  \\text{h} & 3 600 \\text{s}\\\\
+                    \\hline
+                    \\cfrac{1  \\text{h}}{3 600} &1\\ \\text{s} \\\\
+                    \\hline
+                    \\end{array}
+                    $<br><br>
+                    
+                    </li>
+                    </ul>
+                    Ramenons-nous à la formule de la vitesse en faisant figurer les unités :<br><br>
+                    $v=\\cfrac{\\text{distance parcourue}}{\\text{durée du trajet}}=\\cfrac{${chiffresSignificatifs(Vms, nbcs)}\\,\\text{m}}{1\\, \\text{s}}=\\cfrac{${chiffresSignificatifs(Vms, nbcs)}\\times\\text{1 m}}{1\\, \\text{s}}$<br><br>
+                    Il s'agit maintenant de reporter les conversions d'unité directement dans la formule comme suit :<br><br>
+                    $v=\\cfrac{${chiffresSignificatifs(Vms, nbcs)}\\times\\text{1 m}}{\\text{1 s}}=\\cfrac{\\cfrac{${chiffresSignificatifs(Vms, nbcs)}\\times\\text{1 km}}{\\text{1 000}}}{\\cfrac{\\text{1 h}}{3 600}}=${chiffresSignificatifs(Vkmh, nbcs)} \\,\\text{km/h}$<br><br>
+                    On peut donc écrire que $v=${chiffresSignificatifs(Vms, nbcs)} \\,\\text{m/s} =${chiffresSignificatifs(Vkmh, nbcs)} \\,\\text{km/h}$
+                    `
+          // fin question
+          break
+      }
+
+      if (this.questionJamaisPosee(i, N!)) { // Si la question n'a jamais été posée, on en créé une autre
+        this.listeQuestions.push(this.question!) // Sinon on enregistre la question dans listeQuestions
+        this.listeCorrections.push(this.correction!) // On fait pareil pour la correction
+        i++ // On passe à la question suivante
+      }
+      cpt++ // Sinon on incrémente le compteur d'essai pour avoir une question nouvelle
+    }
+
+    listeQuestionsToContenu(this) // La liste de question et la liste de la correction
+  }
+}
diff --git a/src/json/allExercice.json b/src/json/allExercice.json
index 8b20f93d566ad37679bf17f3da6493c16ad35477..32bdf218710198966b4edc2f321fc52cc5689e0e 100644
--- a/src/json/allExercice.json
+++ b/src/json/allExercice.json
@@ -1,5 +1,21 @@
 {
   "2NDE": {
+    "2DS":{
+      "2DS-ANA":{
+        "ref": "2DS-ANA",
+        "uuid": "",
+        "url": "2NDE/2DS-ANA.js",
+        "titre": "Évaluer des ordres de grandeur.",
+        "tags": {}
+      },
+      "2DS-REA":{
+        "ref": "2DS-REA",
+        "uuid": "",
+        "url": "2NDE/2DS-REA.js",
+        "titre": "Effectuer des procédures courantes (calculs, représentations, collectes de données, etc.).",
+        "tags": {}
+      }
+    },
     "2CM1": {
       "2CM1-1": {
         "ref": "2CM1-1",
diff --git a/src/json/levelsThemesList.json b/src/json/levelsThemesList.json
index 43c8b67e70ef9d3a6b673bb70168e8f54b05a8ae..0897ac56a8a6a37931c260268bf918d64d072d0a 100644
--- a/src/json/levelsThemesList.json
+++ b/src/json/levelsThemesList.json
@@ -1,4 +1,7 @@
 {
+  "2DS": {
+    "titre": "Démarche scientifique"
+  },
   "2CM1": {
     "titre": "Corps purs et mélanges au quotidien"
   },
diff --git a/tasks/emptyRef2022.json b/tasks/emptyRef2022.json
index 01986e5d6b071119ecc393df58ea45612545f8d0..d89e7f13f49064e1599687358bf4ac9b99890e3a 100644
--- a/tasks/emptyRef2022.json
+++ b/tasks/emptyRef2022.json
@@ -1,5 +1,6 @@
 {
     "2NDE": {
+      "2DS": {},
       "2I": {},
       "2CM1": {},
       "2CM2": {},