Solution

Stocker les données

Premièrement stocker le prix des différents véhicules directement dans le code tablea html

<td class="violet">THDI</td>
<td class="prix" data-prix="30000"></td>

Faire de même pour les options

Première approche stocker la liste des options disponibles. Mais cela ne règle pas le cas des prix différenciés.

<td class="violet" data-options="multimédia">THDI</td>
<td class="prix" data-prix="30000" data-options="multimédia,sécurité"></td>

Le plus simple est de stocker le prix de l'option directement dans la cellule

<tr>
<td class="violet">THDI</td>
<td class="prix" data-prix="30000" data-multimedia="900" data-securite="800"></td>

Prendre toutes les cellules

let cellules = document.querySelectorAll("td[data-prix]")

Recopier le prix initial dans un dataset calcul car nous allons le modifier pour ajouter les options. Il faut pouvoir y revenir.

cellules.forEach(cell => cell.dataset.calcul = cell.dataset.prix);

Pour chaque case qui est cochée

document.querySelectorAll("form[name='ex1'] input[type='checkbox']:checked").forEach(check => 

si le data option n'est pas présent, le prix doit être désactivé

document.querySelectorAll(`td.prix:not([data-${check.name}])`).forEach(cell => cell.dataset.calcul = -1); 

si le data option est présent et que le prix n'est pas désactivé par une précédente option

document.querySelectorAll(`td.prix[data-${check.name}]:not([data-calcul='-1'])`)

Ajouter le prix de l'option au calcul du prix

.forEach(td => td.dataset.calcul = Number(td.dataset.calcul) + Number(td.dataset[check.name]) );

Pour toute les cellules recopier le prix ou effacer la cellule si le prix est désactivé

cellules.forEach(cell => cell.innerHTML = cell.dataset.calcul == -1 ? "" : Number(cell.dataset.calcul).toLocaleString('fr-FR'));

Attacher la méthode de Calcul sur l'événement click des cases à cocher

document.querySelectorAll("form[name='ex1'] input[type='checkbox']").forEach(elt => elt.addEventListener("click", Calcul));

Résultat en 19 lignes de codes !

function Calcul()
{
let cellules = document.querySelectorAll("td[data-prix]")

cellules.forEach(cell => cell.dataset.calcul = cell.dataset.prix);

document.querySelectorAll("form[name='ex1'] input[type='checkbox']:checked").forEach(check =>
{
document.querySelectorAll(`td.prix:not([data-${check.name}])`).forEach(cell => cell.dataset.calcul = -1);
document.querySelectorAll(`td.prix[data-${check.name}]:not([data-calcul='-1'])`)
.forEach(td => td.dataset.calcul = Number(td.dataset.calcul) + Number(td.dataset[check.name]) );
});

cellules.forEach(cell => cell.innerHTML = cell.dataset.calcul == -1 ? "" : Number(cell.dataset.calcul).toLocaleString('fr-FR'));
}

document.querySelectorAll("form[name='ex1'] input[type='checkbox']").forEach(elt => elt.addEventListener("click", Calcul));

Calcul();