SPB Git

spb/uqo_cours

Public

IMM1033 TP2 allégé (30 oct.) : quantity survey réduit à 5 grandeurs + 22 composantes à un prix unitaire nu ; barème 8/6/10/10/8/10/8/10/14/16 ; schéma TikZ de la chaîne, temps indicatifs, tableaux lisibles, coquilles (secteurs, 4,5 pi) ; make_tp2_tables.py ; solutionnaire Excel vérifié 69/69 ; diapos séance 7 (uqoshot sans « ! », √, troncature gen_qs_cas, frame TP2)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 30, 2026) parent cd9236a Browse files

24 changed files +421 −286

24 changed files
Unified Split
modified IMM1033-20_Methodes_du_cout/02_Slides/pdf/seance07_couts_directs.pdf +0 −0

Binary file not shown.

modified IMM1033-20_Methodes_du_cout/02_Slides/sources/gen_qs_cas.py +11 −1
@@ -30,7 +30,17 @@ def mix(d):
30 30 if not d: return "---"
31 31 return ", ".join(f"{fr(k)} {round(v*100)}\\,\\%" for k, v in sorted(d.items(), key=lambda kv: -kv[1]) if v > 0)
32 32 def short_name(p): return re.sub(r" \(RSMeans.*\)$", "", p["name"])
33 −def cut(s, n): return s if len(s) <= n else s[:n-1].rstrip() + "…"
33 +def cut(s, n):
34 + """Tronque à n caractères sans couper une commande TeX (\textsuperscript{2}), un groupe ou un mode math — 2026-10-30."""
35 + if len(s) <= n:
36 + return s
37 + c = s[:n - 1]
38 + k = c.rfind("\\")
39 + if k >= 0 and (re.fullmatch(r"\\[A-Za-z]*", c[k:]) or c[k:].count("{") != c[k:].count("}")):
40 + c = c[:k]
41 + if c.count("$") % 2:
42 + c = c[:c.rfind("$")]
43 + return c.rstrip() + "…"
34 44
35 45 def load(n):
36 46 d = json.load(open(os.path.join(IMG, f"cas{n}", "data.json")))
modified IMM1033-20_Methodes_du_cout/02_Slides/sources/parties/seance07_qs_cas.tex +11 −11
@@ -379,10 +379,10 @@ Couverture & surface de toit & toit 111 m\textsuperscript{2} & \textbf{111} m\te
379 379 \toprule
380 380 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\
381 381 \midrule
382 −Fermes de toit + support… & \texttt{061753100210} fermes fink 4/12 à 24 po c/c (par pi\textsu… & 111 m\textsuperscript{2} $\times$ 10,010 = 1~106 pi\textsuperscript{2} & 6,23~\$ + 0,67~\$ + 0,90~\$ = 7,80~\$ & \textbf{8~629~\$} \\
383 −Murs de fondation (h 1.2… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m\textsuper… & 6,53 m\textsuperscript{2} $\times$ 1,308 = 8,5 vg\textsuperscript{3} & 281,49~\$ + 284,59~\$ + 23,89~\$ = 589,97~\$ & \textbf{5~037~\$} \\
382 +Fermes de toit + support… & \texttt{061753100210} fermes fink 4/12 à 24 po c/c (par pi… & 111 m\textsuperscript{2} $\times$ 10,010 = 1~106 pi\textsuperscript{2} & 6,23~\$ + 0,67~\$ + 0,90~\$ = 7,80~\$ & \textbf{8~629~\$} \\
383 +Murs de fondation (h 1.2… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m… & 6,53 m\textsuperscript{2} $\times$ 1,308 = 8,5 vg\textsuperscript{3} & 281,49~\$ + 284,59~\$ + 23,89~\$ = 589,97~\$ & \textbf{5~037~\$} \\
384 384 Couverture & \texttt{073113100300} bardeaux d'asphalte laminés standard & 111 m\textsuperscript{2} $\times$ 10,764 = 1~190 pi\textsuperscript{2} & 1,65~\$ + 0,91~\$ = 2,57~\$ & \textbf{3~052~\$} \\
385 −Porte de garage & \texttt{083613200800} porte de garage sectionnelle métal 16 $\tim… & 1,00 unité & 2~031,43~\$ + 133,58~\$ = 2~165,01~\$ & \textbf{2~165~\$} \\
385 +Porte de garage & \texttt{083613200800} porte de garage sectionnelle métal 16… & 1,00 unité & 2~031,43~\$ + 133,58~\$ = 2~165,01~\$ & \textbf{2~165~\$} \\
386 386 Entrée électrique 200 A & \texttt{260590101150} entrée et panneau résidentiels 150 A (RSMea… & 1,00 unité & 1~262,00~\$ + 513,45~\$ = 1~775,45~\$ & \textbf{1~775~\$} \\
387 387 \bottomrule
388 388 \end{tabular}\end{center}
@@ -398,10 +398,10 @@ Entrée électrique 200 A & \texttt{260590101150} entrée et panneau résidentie
398 398 Fermes de toit + support OSB & \texttt{061753100210} & 1~106 & pi\textsuperscript{2} & 6,23~\$ & 0,67~\$ & 0,90~\$ & 8~629~\$ \\
399 399 Murs de fondation (h 1.2 m) & \texttt{033053404200} & 8,5 & vg\textsuperscript{3} & 281,49~\$ & 284,59~\$ & 23,89~\$ & 5~037~\$ \\
400 400 Fermes de toit + support OSB & \texttt{061636100100} & 1~190 & pi\textsuperscript{2} & 2,61~\$ & 0,56~\$ & --- & 3~771~\$ \\
401 −Murs extérieurs ossature 2$… & \texttt{061636100600} & 957 & pi\textsuperscript{2} & 2,61~\$ & 0,70~\$ & --- & 3~167~\$ \\
401 +Murs extérieurs ossature 2… & \texttt{061636100600} & 957 & pi\textsuperscript{2} & 2,61~\$ & 0,70~\$ & --- & 3~167~\$ \\
402 402 Poutre centrale LVL & \texttt{061813206150} & 80,3 & pi & 36,33~\$ & 1,74~\$ & --- & 3~058~\$ \\
403 403 Couverture & \texttt{073113100300} & 1~190 & pi\textsuperscript{2} & 1,65~\$ & 0,91~\$ & --- & 3~052~\$ \\
404 −Murs extérieurs ossature 2$… & \texttt{061110260800} & 120 & pi & 16,16~\$ & 8,69~\$ & --- & 2~972~\$ \\
404 +Murs extérieurs ossature 2… & \texttt{061110260800} & 120 & pi & 16,16~\$ & 8,69~\$ & --- & 2~972~\$ \\
405 405 Semelles filantes & \texttt{033053403935} & 9,5 & vg\textsuperscript{3} & 203,40~\$ & 106,48~\$ & 0,70~\$ & 2~959~\$ \\
406 406 Perron préfabriqué & \texttt{034123500350} & 1,0 & unité & 2~400,75~\$ & 264,60~\$ & 225,53~\$ & 2~891~\$ \\
407 407 Dalle sur sol isolée & \texttt{033053405010} & 512 & pi\textsuperscript{2} & 3,77~\$ & 1,24~\$ & 0,01~\$ & 2~573~\$ \\
@@ -720,11 +720,11 @@ Revêtement brick (30 \%) & murs extérieurs nets $\times$ part & net 84,98 m\te
720 720 \toprule
721 721 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\
722 722 \midrule
723 −Murs de fondation (h 2.44… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m\textsuper… & 21,10 m\textsuperscript{2} $\times$ 1,308 = 27,6 vg\textsuperscript{3} & 315,65~\$ + 286,06~\$ + 23,80~\$ = 625,51~\$ & \textbf{17~263~\$} \\
723 +Murs de fondation (h 2.44… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m… & 21,10 m\textsuperscript{2} $\times$ 1,308 = 27,6 vg\textsuperscript{3} & 315,65~\$ + 286,06~\$ + 23,80~\$ = 625,51~\$ & \textbf{17~263~\$} \\
724 724 Revêtement brick (30 \%) & \texttt{042113132000} placage de brique standard, appareil courant & 25,50 m\textsuperscript{2} $\times$ 10,764 = 274 pi\textsuperscript{2} & 33,29~\$ + 8,25~\$ = 41,54~\$ & \textbf{11~402~\$} \\
725 725 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 8,00 unité & 848,89~\$ + 51,18~\$ = 900,07~\$ & \textbf{7~201~\$} \\
726 726 Plancher hardwood (80 \%) & \texttt{096429106200} lames de chêne blanc préverni 31/4 po & 58,03 m\textsuperscript{2} $\times$ 10,764 = 625 pi\textsuperscript{2} & 8,88~\$ + 2,24~\$ = 11,12~\$ & \textbf{6~946~\$} \\
727 −Fermes de toit + support… & \texttt{061753100210} fermes fink 4/12 à 24 po c/c (par pi\textsu… & 145 m\textsuperscript{2} $\times$ 10,010 = 1~447 pi\textsuperscript{2} & 2,39~\$ + 0,66~\$ + 0,90~\$ = 3,95~\$ & \textbf{5~714~\$} \\
727 +Fermes de toit + support… & \texttt{061753100210} fermes fink 4/12 à 24 po c/c (par pi… & 145 m\textsuperscript{2} $\times$ 10,010 = 1~447 pi\textsuperscript{2} & 2,39~\$ + 0,66~\$ + 0,90~\$ = 3,95~\$ & \textbf{5~714~\$} \\
728 728 \bottomrule
729 729 \end{tabular}\end{center}
730 730 {\tiny\textcolor{uqoGris}{Montant = quantité convertie $\times$ coût unitaire bare (RSMeans Year 2026 Quarter 4 $\cdot$ GATINEAU (C57) $\cdot$ STD). Les conversions (m\textsuperscript{2} $\rightarrow$ pi\textsuperscript{2} $\times$ 10,764 ; m\textsuperscript{3} $\rightarrow$ vg\textsuperscript{3} $\times$ 1,308 ; m $\rightarrow$ pi $\times$ 3,281) et les facteurs de quantité documentés (ex. m\textsuperscript{2} de mur $\rightarrow$ m d'ossature $\div$ 2,44) sont faits par le moteur.}}\end{frame}
@@ -1088,7 +1088,7 @@ Revêtement brick (30 \%) & murs extérieurs nets $\times$ part & net 209 m\text
1088 1088 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\
1089 1089 \midrule
1090 1090 Revêtement brick (30 \%) & \texttt{042113132000} placage de brique standard, appareil courant & 62,73 m\textsuperscript{2} $\times$ 10,764 = 675 pi\textsuperscript{2} & 33,31~\$ + 9,66~\$ = 42,97~\$ & \textbf{29~014~\$} \\
1091 −Murs de fondation (h 2.44… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m\textsuper… & 20,51 m\textsuperscript{2} $\times$ 1,308 = 26,8 vg\textsuperscript{3} & 329,96~\$ + 295,76~\$ + 27,28~\$ = 653,00~\$ & \textbf{17~515~\$} \\
1091 +Murs de fondation (h 2.44… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m… & 20,51 m\textsuperscript{2} $\times$ 1,308 = 26,8 vg\textsuperscript{3} & 329,96~\$ + 295,76~\$ + 27,28~\$ = 653,00~\$ & \textbf{17~515~\$} \\
1092 1092 Plancher hardwood (80 \%) & \texttt{096429106200} lames de chêne blanc préverni 31/4 po & 121 m\textsuperscript{2} $\times$ 10,764 = 1~305 pi\textsuperscript{2} & 7,67~\$ + 2,94~\$ = 10,61~\$ & \textbf{13~845~\$} \\
1093 1093 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 14,00 unité & 843,46~\$ + 59,97~\$ = 903,43~\$ & \textbf{12~648~\$} \\
1094 1094 Planchers portés (solives) & \texttt{061733101200} solives en I 24 po c/c, portée 15--24 pi & 222 m\textsuperscript{2} $\times$ 10,764 = 2~389 pi\textsuperscript{2} & 2,98~\$ + 0,83~\$ = 3,81~\$ & \textbf{9~101~\$} \\
@@ -1439,7 +1439,7 @@ Revêtement vinyl (20 \%) & murs extérieurs nets $\times$ part & net 270 m\text
1439 1439 \midrule
1440 1440 Revêtement brick (80 \%) & \texttt{042113132000} placage de brique standard, appareil courant & 216 m\textsuperscript{2} $\times$ 10,764 = 2~324 pi\textsuperscript{2} & 33,33~\$ + 9,66~\$ = 42,99~\$ & \textbf{99~906~\$} \\
1441 1441 Plancher hardwood (80 \%) & \texttt{096429106200} lames de chêne blanc préverni 31/4 po & 170 m\textsuperscript{2} $\times$ 10,764 = 1~825 pi\textsuperscript{2} & 7,64~\$ + 2,94~\$ = 10,58~\$ & \textbf{19~313~\$} \\
1442 −Murs de fondation (h 2.44… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m\textsuper… & 21,79 m\textsuperscript{2} $\times$ 1,308 = 28,5 vg\textsuperscript{3} & 345,44~\$ + 298,12~\$ + 28,70~\$ = 672,26~\$ & \textbf{19~163~\$} \\
1442 +Murs de fondation (h 2.44… & \texttt{033053404200} mur de béton 8 po coffré (0,203 m… & 21,79 m\textsuperscript{2} $\times$ 1,308 = 28,5 vg\textsuperscript{3} & 345,44~\$ + 298,12~\$ + 28,70~\$ = 672,26~\$ & \textbf{19~163~\$} \\
1443 1443 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 21,00 unité & 844,37~\$ + 65,16~\$ = 909,53~\$ & \textbf{19~100~\$} \\
1444 1444 Plomberie brute (appareil… & \texttt{224116133580} plomberie brute par appareil (alimentation,… & 21,00 unité & 341,10~\$ + 429,52~\$ = 770,62~\$ & \textbf{16~183~\$} \\
1445 1445 \bottomrule
@@ -1749,7 +1749,7 @@ Fenêtres & comptées sur les plans & comptees 6,00 & \textbf{6,00} unité \\
1749 1749 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 6,00 unité & 851,61~\$ + 58,40~\$ = 910,01~\$ & \textbf{5~460~\$} \\
1750 1750 Plomberie brute (appareil… & \texttt{224116133580} plomberie brute par appareil (alimentation,… & 7,00 unité & 347,10~\$ + 427,96~\$ = 775,06~\$ & \textbf{5~425~\$} \\
1751 1751 Plancher hardwood (80 \%) & \texttt{096429106200} lames de chêne blanc préverni 31/4 po & 40,86 m\textsuperscript{2} $\times$ 10,764 = 440 pi\textsuperscript{2} & 8,96~\$ + 2,24~\$ = 11,20~\$ & \textbf{4~926~\$} \\
1752 −Fermes de toit + support… & \texttt{061753100210} fermes fink 4/12 à 24 po c/c (par pi\textsu… & 88,42 m\textsuperscript{2} $\times$ 10,010 = 885 pi\textsuperscript{2} & 3,65~\$ + 0,84~\$ + 0,90~\$ = 5,39~\$ & \textbf{4~771~\$} \\
1752 +Fermes de toit + support… & \texttt{061753100210} fermes fink 4/12 à 24 po c/c (par pi… & 88,42 m\textsuperscript{2} $\times$ 10,010 = 885 pi\textsuperscript{2} & 3,65~\$ + 0,84~\$ + 0,90~\$ = 5,39~\$ & \textbf{4~771~\$} \\
1753 1753 Revêtement wood (100 \%) & \texttt{074623103600} clin de cèdre « B » 3/4 $\times$ 10 po & 62,04 m\textsuperscript{2} $\times$ 10,764 = 668 pi\textsuperscript{2} & 3,11~\$ + 1,45~\$ = 4,56~\$ & \textbf{3~045~\$} \\
1754 1754 \bottomrule
1755 1755 \end{tabular}\end{center}
@@ -1771,7 +1771,7 @@ Planchers portés (solives) & \texttt{061733101200} & 616 & pi\textsuperscript{2
1771 1771 Revêtement wood (100 \%) & \texttt{074623103600} & 668 & pi\textsuperscript{2} & 3,11~\$ & 1,45~\$ & --- & 3~045~\$ \\
1772 1772 Couverture & \texttt{074113100300} & 952 & pi\textsuperscript{2} & 1,26~\$ & 1,78~\$ & --- & 2~893~\$ \\
1773 1773 Gypse 1/2 po murs (face int… & \texttt{092910300350} & 1~459 & pi\textsuperscript{2} & 0,75~\$ & 1,01~\$ & --- & 2~568~\$ \\
1774 −Murs extérieurs ossature 2$… & \texttt{061110260800} & 125 & pi & 9,48~\$ & 10,93~\$ & --- & 2~554~\$ \\
1774 +Murs extérieurs ossature 2… & \texttt{061110260800} & 125 & pi & 9,48~\$ & 10,93~\$ & --- & 2~554~\$ \\
1775 1775 Peinture 2 couches (murs +… & \texttt{099123720840} & 2~075 & pi\textsuperscript{2} & 0,58~\$ & 0,59~\$ & --- & 2~428~\$ \\
1776 1776 \bottomrule
1777 1777 \end{tabular}\end{center}
modified IMM1033-20_Methodes_du_cout/02_Slides/sources/seance07_couts_directs.tex +8 −11
@@ -1456,19 +1456,16 @@ Compléter l'exercice d'estimation du bungalow et entamer le TP2 (énoncé et ga
1456 1456 \begin{frame}{TP2 --- Bordereau de coût de remplacement neuf avec UQO Éval (15\,\%)}
1457 1457 \footnotesize
1458 1458 \begin{importbox}[Mandat]
1459 −Un promoteur de Gatineau projette un \textbf{quadruplex de 2 étages} (18,3 $\times$ 10,4 m, 4 logements, sous-sol non fini, brique 80\,\%). Vous montez le bordereau complet à partir du \textbf{cas d'étude « Cas 9 » du module Quantity Survey d'UQO Éval} : plans, relevé des quantités condensé en \textbf{22 composantes à prix composites RSMeans 2026 T4 (Gatineau)} --- puis indirects réels, profit et validation par \textbf{8 ventes réelles de quadruplex neufs}.
1459 +Un promoteur de Gatineau projette un \textbf{quadruplex de 2 étages} (18,3 $\times$ 10,4 m, 4 logements, sous-sol non fini, brique 80\,\%). Bordereau complet depuis le \textbf{cas d'étude « Cas 9 » d'UQO Éval} : relevé fourni, condensé en \textbf{22 composantes à un prix unitaire nu (RSMeans 2026 T4, Gatineau)}, puis indirects réels, profit et validation par \textbf{8 ventes réelles}.
1460 1460 \end{importbox}
1461 −\vspace{0.5mm}
1462 1461 \uqotitle{Objectifs pédagogiques :}
1463 −\begin{itemize}
1464 − \item Reproduire 7 grandeurs du relevé depuis le plan et chiffrer 22 composantes (coût unitaire nu, montant, sous-totaux par division) --- séance 7
1465 − \item Passer des coûts nus aux coûts directs du cours (conditions générales, frais généraux, profit de l'entrepreneur), puis contingences
1466 − \item Calculer les indirects réels : permis de Gatineau (\texttt{MAX}), GCR, intercalaires avec facteur ½, honoraires --- séance 8
1467 − \item Asseoir le profit entrepreneurial, puis \textbf{extraire du marché} la valeur du bâtiment et le profit implicite ; comparer au moteur de coût d'UQO Éval et à Altus
1462 +\begin{itemize}\scriptsize\setlength{\itemsep}{0pt}
1463 + \item 5 grandeurs du relevé reproduites ; 22 composantes chiffrées (quantité $\times$ prix nu, sous-totaux par division) --- séance 7
1464 + \item Coûts nus $\rightarrow$ directs du cours (conditions générales, frais généraux, profit de l'entrepreneur) $\rightarrow$ contingences
1465 + \item Indirects réels : permis de Gatineau (\texttt{MAX}), GCR, intercalaires (facteur ½), honoraires --- séance 8
1466 + \item Profit entrepreneurial ; \textbf{extraction du marché} (bâtiment et profit implicites) ; moteur d'UQO Éval, Altus
1467 + \item Données réelles (29 oct. 2026) : RSMeans 2026 T4, règl. 501-2005, GCR 2026, préférentiel 4,70\,\%, 8 ventes 2024-2025
1468 1468 \end{itemize}
1469 −\begin{notebox}[Données réelles (29 octobre 2026)]
1470 −\footnotesize RSMeans 2026 T4 (Gatineau C57), règlement 501-2005 (4,70\,\$/1\,000\,\$, min. 335\,\$/logement), GCR 2026 (2\,656,68\,\$/unité), préférentiel 4,70\,\% (hausse du taux directeur du 28 octobre), 8 ventes 2024-2025 de quadruplex 2021-2024, moteur de coût UQO Éval, Altus 2026.
1471 −\end{notebox}
1472 1469 \end{frame}
1473 1470
1474 1471 \begin{frame}{TP2 --- Livrables, modalités et gabarit}
@@ -1492,7 +1489,7 @@ Un promoteur de Gatineau projette un \textbf{quadruplex de 2 étages} (18,3 $\ti
1492 1489 \uqotitle{Les onglets du gabarit :}
1493 1490 \begin{itemize}
1494 1491 \item \textbf{Données} : 10 tableaux réels (ne pas modifier)
1495 − \item \textbf{Relevé} : Q1-Q3 --- plan $\rightarrow$ 7 quantités $\rightarrow$ 22 composantes
1492 + \item \textbf{Relevé} : Q1-Q3 --- plan $\rightarrow$ 5 quantités $\rightarrow$ 22 composantes $\times$ prix nu
1496 1493 \item \textbf{Bordereau} : Q4-Q8 --- directs du cours, contingences, permis, GCR, intercalaires, honoraires, profit, \$/pi\up{2}
1497 1494 \item \textbf{Marché} : Q9 --- extraction sur 8 ventes, moteur, Altus, profit extrait
1498 1495 \item \textbf{Dashboard} + \textbf{Note} : Q10 --- KPI, verdict, graphiques, note
modified IMM1033-20_Methodes_du_cout/02_Slides/sources/uqo-style.sty +4 −3
@@ -10,6 +10,7 @@
10 10
11 11 % --- Packages requis ---
12 12 \RequirePackage[utf8]{inputenc}
13 +\DeclareUnicodeCharacter{221A}{\ensuremath{\surd}} % « √ » (seance07_qs_cas) — 2026-10-30
13 14 \RequirePackage[T1]{fontenc}
14 15 \RequirePackage[french]{babel}
15 16 \RequirePackage{lmodern}
@@ -490,7 +491,7 @@
490 491 \node[anchor=center, text=uqoBlanc, font=\fontsize{4.6}{5.5}\selectfont\ttfamily,
491 492 fill=uqoBleu!55!uqoNavy, rounded corners=0.9pt, inner xsep=4pt, inner ysep=1.4pt,
492 493 minimum width=0.5*#1]
493 − at ($(img.north west)!0.5!(img.north east)+(0,2.45mm)$)
494 + at ([yshift=2.45mm]img.north) % 2026-10-30 : sans « ! » (actif sous babel-french, cassait l'analyse calc)
494 495 {\textcolor{uqoOr}{\faIcon{lock}}\hspace{3pt}#3};
495 496 \draw[uqoGrisClair, line width=0.35pt] (img.south west) rectangle (img.north east);
496 497 }{%
@@ -499,8 +500,8 @@
499 500
500 501 % Épingle numérotée : \uqopin{x}{y}{n} — x,y = fractions (0–1) de la capture, origine en bas à gauche
501 502 \newcommand{\uqopin}[3]{%
502 − \path ($(img.south west)!#1!(img.south east)$) coordinate (uqopinx);
503 − \path ($(img.south west)!#2!(img.north west)$) coordinate (uqopiny);
503 + \path (img.south west) -- (img.south east) coordinate[pos=#1] (uqopinx);
504 + \path (img.south west) -- (img.north west) coordinate[pos=#2] (uqopiny);
504 505 \node[circle, fill=uqoOr, text=uqoNavy, font=\fontsize{6.5}{7}\selectfont\bfseries,
505 506 inner sep=0pt, minimum size=4.2mm, draw=uqoBlanc, line width=0.7pt]
506 507 at (uqopinx |- uqopiny) {#3};%
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/README.md +5 −5
@@ -1,10 +1,10 @@
1 1 # IMM1033-20 · TP2 — Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval (15 %)
2 2
3 3 - Remise : séance 9 (12 novembre 2026, 23 h 59) · Livrables étudiants : gabarit Excel complété (renommé TP2_CodePermanent.xlsx) + PDF de la note au promoteur.
4 −- **Données 100 % réelles extraites de www.uqo-eval.app le 29 octobre 2026** : cas d'étude « Cas 9 — Quadruplex 2 étages, Gatineau (RSMeans 2026 T4) » du module Quantity Survey (`https://www.uqo-eval.app/quantity-survey/projets/97fa1d2a-06e1-4ed3-a580-0728616915ce`, créé pour ce TP par `scripts/qs-seed-cases.mts "Cas 9"` sur M2U64) : plans des 3 niveaux (`enonce/assets/plan-*.png`), fiche technique, relevé des quantités (49 mesures), révision r1 de 64 lignes tarifées RSMeans 2026 T4 localisées Gatineau (C57) **condensée en 22 composantes à prix composites nus** (version allégée du 29 oct. soir, à la demande du prof : « moins intense mais quand même complexe ») → direct nu 471 085 $, total r1 611 823 $ ; 8 ventes réelles (sur 11 extraites) de quadruplex neufs (2021-2024) vendus 2024-2025 (Registre foncier ⋈ rôle) ; 2 quadruplex de 2020 en vigueur (280 Champlain, 335 Hippodrome, photos) ; moteur de coût UQO Éval (RCN 827 445 $) ; photos du 1151, rue Notre-Dame (vente Q11).
4 +- **Données 100 % réelles extraites de www.uqo-eval.app le 29 octobre 2026** : cas d'étude « Cas 9 — Quadruplex 2 étages, Gatineau (RSMeans 2026 T4) » du module Quantity Survey (`https://www.uqo-eval.app/quantity-survey/projets/97fa1d2a-06e1-4ed3-a580-0728616915ce`, créé pour ce TP par `scripts/qs-seed-cases.mts "Cas 9"` sur M2U64) : plans des 3 niveaux (`enonce/assets/plan-*.png`), fiche technique, relevé des quantités (49 mesures), révision r1 de 64 lignes tarifées RSMeans 2026 T4 localisées Gatineau (C57) **condensée en 22 composantes à UN prix unitaire nu** (allégée le 29 oct. soir — 22 composantes au lieu de 64 lignes — puis le 30 oct. : un seul prix par composante au lieu de la ventilation matériaux / MO / équipement, 5 grandeurs au lieu de 7, « pas de quantity survey complexe ») → direct nu 471 085 $, total r1 611 823 $ ; 8 ventes réelles (sur 11 extraites) de quadruplex neufs (2021-2024) vendus 2024-2025 (Registre foncier ⋈ rôle) ; 2 quadruplex de 2020 en vigueur (280 Champlain, 335 Hippodrome, photos) ; moteur de coût UQO Éval (RCN 827 445 $) ; photos du 1151, rue Notre-Dame (vente Q11).
5 5 - **Plus de personnalisation par code permanent** : même cas pour tous ; la note récompense la chaîne de calcul (conversions, assiettes, ordre des majorations) et la lecture (conventions, marché, limites).
6 −- 10 questions / 100 pts : méthode (8) · du plan au relevé, 7 grandeurs (8) · bordereau des 22 composantes, SOMME.SI par division, top 3 (12) · coûts nus → directs du cours → contingences = r1 ± 50 $ (8) · permis Gatineau MAX + GCR (8) · intercalaires 6,75 % × ½ (10) · honoraires, assurance, total indirects (8) · profit 11 %, coût total **759 152 $** (177,19 $/pi² hors sol, 189 788 $/logement) (10) · marché : bâtiment implicite médian 866 833 $ (8 ventes), profit extrait 26,7 %, moteur −8,3 %, Altus (14) · dashboard + note (14).
7 −- `enonce/` et `gabarit_excel/` : **à distribuer** · `solutionnaire_enseignant/` : **réservé** (PDF + `IMM1033-20_TP2_solutionnaire.xlsx` : formules réelles, 71 cellules vérifiées par recalcul Excel) · `donnees/` : extraits bruts (JSON du cas, ventes, moteur, photos originales).
8 −- Scripts (`05_Ressources/scripts_gabarits_excel/`) : `build_tp2_donnees.py` (extraits JSON → `tp2_donnees.py` : LIGNES 64, COMPOSANTES 22, GRANDEURS 7, VENTES 11 + VENTES_TP 8), `make_IMM1033_TP2.py` (gabarit v2 avec suivi de progression), `tp2_solutions.py` (valeurs de référence), `make_IMM1033_TP2_solution.py` + `verif_attendus_tp2.py` (solutionnaire Excel + vérification `verif_solution_xlsx.py`). Tableaux LaTeX (composantes, relevé abrégé, divisions, ventes, moteur) générés par bloc python (2026-10-29) → `enonce/tables_tp2*.tex`.
6 +- 10 questions / 100 pts (≈ 5 h, temps indicatifs dans l'énoncé) : méthode (8) · du plan au relevé, 5 grandeurs (6) · bordereau des 22 composantes : montant = quantité × prix nu, total, SOMME.SI par division, top 3 (10) · coûts nus → directs du cours → contingences = r1 ± 50 $ (10) · permis Gatineau MAX + GCR (8) · intercalaires 6,75 % × ½ (10) · honoraires, assurance, total indirects (8) · profit 11 %, coût total **759 152 $** (177,19 $/pi² hors sol, 189 788 $/logement) (10) · marché : bâtiment implicite médian 866 833 $ (8 ventes), profit extrait 26,7 %, moteur −8,3 %, Altus (14) · dashboard + note (16). L'énoncé (18 p.) contient le schéma TikZ de la chaîne du bordereau (figure 2).
7 +- `enonce/` et `gabarit_excel/` : **à distribuer** · `solutionnaire_enseignant/` : **réservé** (PDF + `IMM1033-20_TP2_solutionnaire.xlsx` : formules réelles, 69 cellules vérifiées par recalcul Excel ; 3e graphique = sensibilité du coût total à la durée du chantier) · `donnees/` : extraits bruts (JSON du cas, ventes, moteur, photos originales).
8 +- Scripts (`05_Ressources/scripts_gabarits_excel/`) : `build_tp2_donnees.py` (extraits JSON → `tp2_donnees.py` : LIGNES 64, COMPOSANTES 22, GRANDEURS 7, VENTES 11 + VENTES_TP 8), `make_IMM1033_TP2.py` (gabarit v2 avec suivi de progression ; imprime les plages des badges de l'énoncé), `tp2_solutions.py` (valeurs de référence), `make_IMM1033_TP2_solution.py` + `verif_attendus_tp2.py` (solutionnaire Excel + vérification `verif_solution_xlsx.py`), **`make_tp2_tables.py`** (tableaux LaTeX 2, 3, 4, 5, 8, 10 → `enonce/tables_tp2*.tex` ; secteurs des ventes corrigés).
9 9 - Recompiler : `cd enonce && latexmk -lualatex IMM1033-20_TP2_enonce.tex` (idem solutionnaire).
10 −- Rafraîchir : re-seed du cas sur M2U64 (`zsh -lc 'npx tsx scripts/qs-seed-cases.mts "Cas 9"'`), export `tmp/export-cases.mts` → `donnees/qs-cas9/`, requêtes ventes (`/tmp/q_quad.py` du 2026-10-29 : `units.nb_logements=4`, `annee_construction>=2021`, ventes ≥ 2023), moteur (`POST /api/cost/estimate`), puis `build_tp2_donnees.py` → gabarit → solution → vérification → PDF.
10 +- Rafraîchir : re-seed du cas sur M2U64 (`zsh -lc 'npx tsx scripts/qs-seed-cases.mts "Cas 9"'`), export `tmp/export-cases.mts` → `donnees/qs-cas9/`, requêtes ventes (`/tmp/q_quad.py` du 2026-10-29 : `units.nb_logements=4`, `annee_construction>=2021`, ventes ≥ 2023), moteur (`POST /api/cost/estimate`), puis `build_tp2_donnees.py` → `make_IMM1033_TP2.py` (noter les plages des badges) → `make_IMM1033_TP2_solution.py` → `verif_solution_xlsx.py … verif_attendus_tp2.py` → `make_tp2_tables.py` → latexmk énoncé + solutionnaire → site → Moodle.
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/IMM1033-20_TP2_enonce.pdf +0 −0

Binary file not shown.

modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/IMM1033-20_TP2_enonce.tex +93 −66
@@ -9,6 +9,7 @@
9 9 \usepackage{fontawesome5}
10 10 \usepackage{pgfplots}
11 11 \pgfplotsset{compat=1.18}
12 +\usetikzlibrary{arrows.meta,positioning,calc}
12 13
13 14 \setexamCours{IMM1033-20}
14 15 \setexamTitreCours{Méthodes du coût en évaluation immobilière}
@@ -113,32 +114,66 @@ Nous sommes le \textbf{29 octobre 2026}. Un promoteur de Gatineau détient un lo
113 114 \label{fig:photos}
114 115 \end{figure}
115 116
116 −\begin{donnees}[\faIcon{route}\quad Parcours du travail --- dix questions, cinq onglets, 100 points]
117 +\begin{donnees}[\faIcon{route}\quad Parcours du travail --- dix questions, cinq onglets, 100 points, environ cinq heures]
117 118 \begin{center}
118 119 \small
119 120 \renewcommand{\arraystretch}{1.3}
120 −\begin{tabular}{@{}cp{7.9cm}lc@{}}
121 +\begin{tabular}{@{}cp{7.3cm}lcc@{}}
121 122 \toprule
122 − & \textbf{Question} & \textbf{Onglet Excel} & \textbf{Points} \\
123 + & \textbf{Question} & \textbf{Onglet Excel} & \textbf{Points} & \textbf{Temps} \\
123 124 \midrule
124 −\textcolor{uqoBleuClair}{\faIcon{sitemap}} & 1. Méthode d'estimation et nature du coût & \onglet{Relevé} & 8 \\
125 −\textcolor{uqoBleuClair}{\faIcon{drafting-compass}} & 2. Du plan au relevé : sept grandeurs & \onglet{Relevé} & 8 \\
126 −\textcolor{uqoBleuClair}{\faIcon{calculator}} & 3. Bordereau des 22 composantes & \onglet{Relevé} & 12 \\
127 −\textcolor{uqoOr!85!black}{\faIcon{layer-group}} & 4. Des coûts nus aux coûts directs du cours & \onglet{Bordereau} & 8 \\
128 −\textcolor{uqoOr!85!black}{\faIcon{file-signature}} & 5. Permis réel de Gatineau et garantie GCR & \onglet{Bordereau} & 8 \\
129 −\textcolor{uqoOr!85!black}{\faIcon{percentage}} & 6. Intérêts intercalaires & \onglet{Bordereau} & 10 \\
130 −\textcolor{uqoOr!85!black}{\faIcon{briefcase}} & 7. Autres indirects et total & \onglet{Bordereau} & 8 \\
131 −\textcolor{uqoOr!85!black}{\faIcon{coins}} & 8. Profit entrepreneurial, coût total, unités de comparaison & \onglet{Bordereau} & 10 \\
132 −\textcolor{uqoBleuEval}{\faIcon{balance-scale}} & 9. Validation : marché, moteur de coût, Altus & \onglet{Marché} & 14 \\
133 −\textcolor{uqoVert}{\faIcon{tachometer-alt}} & 10. Tableau de bord et note au promoteur & \onglet{Dashboard} \onglet{Note} & 14 \\
125 +\textcolor{uqoBleuClair}{\faIcon{sitemap}} & 1. Méthode d'estimation et nature du coût & \onglet{Relevé} & 8 & 30 min \\
126 +\textcolor{uqoBleuClair}{\faIcon{drafting-compass}} & 2. Du plan au relevé : cinq grandeurs & \onglet{Relevé} & 6 & 15 min \\
127 +\textcolor{uqoBleuClair}{\faIcon{calculator}} & 3. Bordereau des 22 composantes & \onglet{Relevé} & 10 & 30 min \\
128 +\textcolor{uqoOr!85!black}{\faIcon{layer-group}} & 4. Des coûts nus aux coûts directs du cours & \onglet{Bordereau} & 10 & 20 min \\
129 +\textcolor{uqoOr!85!black}{\faIcon{file-signature}} & 5. Permis réel de Gatineau et garantie GCR & \onglet{Bordereau} & 8 & 10 min \\
130 +\textcolor{uqoOr!85!black}{\faIcon{percentage}} & 6. Intérêts intercalaires & \onglet{Bordereau} & 10 & 20 min \\
131 +\textcolor{uqoOr!85!black}{\faIcon{briefcase}} & 7. Autres indirects et total & \onglet{Bordereau} & 8 & 15 min \\
132 +\textcolor{uqoOr!85!black}{\faIcon{coins}} & 8. Profit entrepreneurial, coût total, unités de comparaison & \onglet{Bordereau} & 10 & 20 min \\
133 +\textcolor{uqoBleuEval}{\faIcon{balance-scale}} & 9. Validation : marché, moteur de coût, Altus & \onglet{Marché} & 14 & 60 min \\
134 +\textcolor{uqoVert}{\faIcon{tachometer-alt}} & 10. Tableau de bord et note au promoteur & \onglet{Dashboard} \onglet{Note} & 16 & 75 min \\
134 135 \bottomrule
135 136 \end{tabular}
136 137 \end{center}
138 +\smallskip
139 +\footnotesize Les temps sont indicatifs (étudiant à l'aise avec Excel, énoncé lu). Les questions 1 à 3 occupent l'onglet \onglet{Relevé} : elles ne demandent \textbf{pas} de relevé détaillé ligne par ligne --- le relevé est fourni par UQO Éval, vous en reproduisez cinq grandeurs et vous chiffrez 22 composantes avec un prix unitaire chacune. L'essentiel du travail est la \textbf{chaîne du bordereau} (figure~\ref{fig:chaine}) et sa \textbf{lecture}.
137 140 \end{donnees}
138 141
142 +\begin{figure}[htbp]
143 +\centering
144 +\resizebox{\textwidth}{!}{%
145 +\begin{tikzpicture}[
146 + etape/.style={draw, rounded corners=3pt, line width=0.6pt, align=center, font=\sffamily\footnotesize, text width=2.35cm, minimum height=1.1cm, inner sep=4pt, fill=white},
147 + qq/.style={font=\sffamily\bfseries\tiny, text=white, fill=#1, rounded corners=2pt, inner xsep=4pt, inner ysep=2pt},
148 + plus/.style={font=\sffamily\scriptsize\itshape, text=uqoGris, align=center, text width=2.2cm},
149 + fl/.style={-{Stealth[length=5pt]}, line width=0.7pt, uqoGris},
150 + node distance=0.55cm and 0.62cm]
151 + \node[etape, draw=uqoBleuClair] (a) {\textbf{Direct nu}\\22 composantes\\$\times$ prix unitaire nu};
152 + \node[etape, draw=uqoOr!85!black, right=of a] (b) {\textbf{Directs}\\\textbf{au sens du cours}};
153 + \node[etape, draw=uqoOr!85!black, right=of b] (c) {\textbf{Directs +}\\\textbf{contingences}\\= révision r1};
154 + \node[etape, draw=uqoOr!85!black, right=of c] (d) {\textbf{+ Indirects}\\permis, GCR, intercalaires, honoraires, assurance, juridique};
155 + \node[etape, draw=uqoOr!85!black, right=of d] (e) {\textbf{Coût total}\\\textbf{de remplacement neuf}\\\$/pi\up{2}, \$/logement};
156 + \node[etape, draw=uqoBleuEval, right=of e] (f) {\textbf{Test}\\marché (8 ventes), moteur UQO Éval, Altus};
157 + \foreach \x/\y in {a/b, b/c, c/d, d/e, e/f} \draw[fl] (\x) -- (\y);
158 + \node[plus, above=0.15cm of $(a.north east)!0.5!(b.north west)$] {+ CG 8 \%\\+ FG 7 \%\\+ profit entr. 8 \%};
159 + \node[plus, above=0.15cm of $(b.north east)!0.5!(c.north west)$] {+ 5 \%\\des directs nus};
160 + \node[plus, above=0.15cm of $(c.north east)!0.5!(d.north west)$] {six postes\\réels};
161 + \node[plus, above=0.15cm of $(d.north east)!0.5!(e.north west)$] {+ profit\\entrepreneurial\\11 \%};
162 + \node[plus, above=0.15cm of $(e.north east)!0.5!(f.north west)$] {écart,\\profit extrait};
163 + \node[qq=uqoBleuClair, below=0.12cm of a] {Q2 -- Q3};
164 + \node[qq=uqoOr!85!black, below=0.12cm of b] {Q4};
165 + \node[qq=uqoOr!85!black, below=0.12cm of c] {Q4};
166 + \node[qq=uqoOr!85!black, below=0.12cm of d] {Q5 -- Q7};
167 + \node[qq=uqoOr!85!black, below=0.12cm of e] {Q8};
168 + \node[qq=uqoBleuEval, below=0.12cm of f] {Q9 -- Q10};
169 +\end{tikzpicture}}
170 +\caption{La chaîne du bordereau, de gauche à droite : chaque étape lit la précédente par formule. Les assiettes (sur quoi s'applique chaque pourcentage) font l'objet du barème transversal.}
171 +\label{fig:chaine}
172 +\end{figure}
173 +
139 174 \begin{surlelabo}[Le laboratoire UQO Éval --- ce que vous y trouverez pour ce travail]
140 175 \begin{itemize}[leftmargin=14pt, itemsep=2pt]
141 − \item \textbf{Le cas d'étude} \web{/quantity-survey/projets/97fa1d2a-…} (« Cas 9 --- Quadruplex 2 étages, Gatineau ») : les plans des trois niveaux dans le Plan Studio, la fiche technique, le relevé complet des quantités (49 mesures) et la révision r1 tarifée RSMeans --- les 64 lignes dont sont tirées les 22 composantes du tableau 4, avec la source de chaque prix. Le cas est verrouillé : dupliquez-le pour expérimenter (changer la brique pour du vinyle, finir le sous-sol…).
176 + \item \textbf{Le cas d'étude} \web{/quantity-survey/projets/97fa1d2a-…} (« Cas 9 --- Quadruplex 2 étages, Gatineau ») : les plans des trois niveaux dans le Plan Studio, la fiche technique, le relevé complet des quantités (49 mesures) et la révision r1 tarifée RSMeans --- les 64 lignes dont sont tirées les 22 composantes du tableau 4, avec la source de chaque prix. Consultez-le pour comprendre; le TP ne vous demande pas de le refaire. Le cas est verrouillé : dupliquez-le pour expérimenter (changer la brique pour du vinyle, finir le sous-sol…).
142 177 \item \textbf{Quantity Survey} \web{/quantity-survey} : l'explorateur RSMeans (18 villes du Québec, 4 livres) pour comparer un prix de Gatineau à celui de Montréal ou de Québec.
143 178 \item \textbf{Coût} \web{/cout} : le moteur de coût par composantes (prix observés Canac, BMR, Patrick Morin; taux APCHQ) --- l'estimation du tableau 10 en provient.
144 179 \item \textbf{Analyser une propriété} \web{} : recherchez une adresse du tableau 8 pour lire l'unité du rôle (aire d'étages, terrain, valeurs).
@@ -193,26 +228,17 @@ Date d'évaluation & 29 octobre 2026 \\
193 228 \label{fig:etage}
194 229 \end{figure}
195 230
196 −\begin{donnees}[Tableau 2 --- Ce que les plans donnent, par niveau \hfill \xl{Données}{B31:M33}]
231 +\begin{donnees}[Tableau 2 --- Ce que les plans donnent, par niveau (lecture seulement) \hfill \xl{Données}{B31:M33}]
197 232 \begin{center}
198 −\tiny
199 −\setlength{\tabcolsep}{2pt}
233 +\footnotesize
200 234 \rowcolors{2}{uqoBgClair!70}{white}
201 −\begin{tabular}{@{}lrrrrrrrrrr@{}}
202 −\toprule
203 −\textbf{Niveau} & \textbf{Aire pièces (m\up{2})} & \textbf{Σ périm. (m)} & \textbf{Murs ext. (m)} & \textbf{Murs brut (m\up{2})} & \textbf{Murs net (m\up{2})} & \textbf{Ouvert. (m\up{2})} & \textbf{Fen.} & \textbf{Portes} & \textbf{Cloisons (m)} & \textbf{Cloisons (m\up{2})} \\
204 −\midrule
205 −Sous-sol & 192,46 & 67,8 & 57,40 & 140,06 & 138,86 & 1,20 & 3 & 0 & 6,00 & 13,80 \\
206 −Rez-de-chaussée & 176,40 & 170,8 & 57,40 & 140,06 & 108,38 & 31,68 & 12 & 4 & 59,90 & 146,16 \\
207 −Étage & 176,40 & 170,8 & 57,40 & 140,06 & 108,38 & 31,68 & 12 & 4 & 59,90 & 146,16 \\
208 −\bottomrule
209 −\end{tabular}
235 +\input{tables_tp2_plans}
210 236 \end{center}
211 237 \smallskip
212 −\footnotesize Aires de murs mesurées à l'axe (périmètre $\times$ 2,44~m); l'aire nette déduit les ouvertures. Les 12 fenêtres d'un niveau : 2 de 1,8 $\times$ 1,3~m et 2 de 1,2 $\times$ 1,3~m par logement, plus la fenêtre de salle de bain; les 4 portes : une porte d'entrée et une porte-patio par logement.
238 +\footnotesize Aires de murs mesurées à l'axe (périmètre 57,40~m $\times$ 2,44~m); l'aire nette déduit les ouvertures. Les 12 fenêtres d'un niveau : 2 de 1,8 $\times$ 1,3~m et 2 de 1,2 $\times$ 1,3~m par logement, plus la fenêtre de salle de bain; les 4 portes : une porte d'entrée et une porte-patio par logement. L'onglet \onglet{Données} donne aussi les périmètres des pièces et les cloisons. Rien de ce tableau n'est à recalculer : il sert à comprendre d'où viennent les quantités du tableau 4.
213 239 \end{donnees}
214 240
215 −\begin{donnees}[Tableau 3 --- Relevé abrégé d'UQO Éval : les sept grandeurs que vous reproduirez à la question 2 \hfill \xl{Données}{B38:G44}]
241 +\begin{donnees}[Tableau 3 --- Relevé abrégé d'UQO Éval : les cinq grandeurs que vous reproduirez à la question 2 \hfill \xl{Données}{B38:G42}]
216 242 \begin{center}
217 243 \small
218 244 \rowcolors{2}{uqoBgClair!70}{white}
@@ -222,18 +248,18 @@ Rez-de-chaussée & 176,40 & 170,8 & 57,40 & 140,06 & 108,38 & 31,68 & 12 & 4 & 5
222 248 \footnotesize Valeurs du relevé automatique d'UQO Éval (metre-qs-1.0) à partir des plans et de la fiche. Le relevé complet (49 mesures) et les 64 lignes RSMeans de la révision r1 restent consultables sur la fiche du cas.
223 249 \end{donnees}
224 250
225 −\begin{donnees}[Tableau 4 --- Le bordereau en 22 composantes : quantités du relevé (unités SI) et prix composites NUS par unité (matériaux, main-d'œuvre, équipement), dérivés des lignes RSMeans 2026 T4 localisées Gatineau \hfill \xl{Données}{B49:N70}]
251 +\begin{donnees}[Tableau 4 --- Le bordereau en 22 composantes : quantité du relevé (unités SI) et UN prix unitaire nu par composante, dérivé des lignes RSMeans 2026 T4 localisées Gatineau \hfill \xl{Données}{B47:N68}]
226 252 \begin{center}
227 −\scriptsize
228 −\setlength{\tabcolsep}{2.8pt}
253 +\footnotesize
254 +\setlength{\tabcolsep}{3.2pt}
229 255 \rowcolors{2}{uqoBgClair!70}{white}
230 256 \input{tables_tp2}
231 257 \end{center}
232 258 \smallskip
233 −\footnotesize Prix \textbf{nus} (\emph{bare costs}) : matériaux $+$ main-d'œuvre $+$ équipement, hors conditions générales, frais généraux et profit de l'entrepreneur (appliqués à la question 4). Un prix composite $=$ somme des lignes RSMeans de la composante $\div$ quantité de référence : la toiture complète en \$/m\up{2} de toit comprend fermes, support, membrane, soffites et gouttières; l'ossature de bois en \$/m\up{2} de mur comprend murs 2$\times$6, contreplaqué, cloisons, poutre et colonnes. Trois postes viennent du catalogue de prix observés d'UQO Éval (branchements, drainage, VRC).
259 +\footnotesize Prix \textbf{nu} (\emph{bare cost}) : matériaux $+$ main-d'œuvre $+$ équipement par unité, hors conditions générales, frais généraux et profit de l'entrepreneur (appliqués à la question 4). Un prix unitaire composite $=$ somme des lignes RSMeans de la composante $\div$ quantité de référence : la toiture complète en \$/m\up{2} de toit comprend fermes, support, membrane, soffites et gouttières; l'ossature de bois en \$/m\up{2} de mur (572,42~m\up{2} $=$ murs extérieurs bruts $+$ cloisons) comprend murs 2$\times$6, contreplaqué, cloisons, poutre et colonnes; l'isolation en \$/m\up{2} isolé (415,77~m\up{2} $=$ murs nets $+$ comble). Trois postes viennent du catalogue de prix observés d'UQO Éval (branchements, drainage, VRC). La ventilation matériaux / main-d'œuvre / équipement de chaque ligne reste consultable sur la fiche du cas.
234 260 \end{donnees}
235 261
236 −\begin{donnees}[Tableau 5 --- Divisions MasterFormat présentes et direct nu par division selon la révision r1, composantes regroupées (contrôle de la question 3) \hfill \xl{Données}{B75:E86}]
262 +\begin{donnees}[Tableau 5 --- Divisions MasterFormat présentes et direct nu par division selon la révision r1, composantes regroupées (contrôle de la question 3) \hfill \xl{Données}{B73:E84}]
237 263 \begin{center}
238 264 \small
239 265 \rowcolors{2}{uqoBgClair!70}{white}
@@ -241,7 +267,7 @@ Rez-de-chaussée & 176,40 & 170,8 & 57,40 & 140,06 & 108,38 & 31,68 & 12 & 4 & 5
241 267 \end{center}
242 268 \end{donnees}
243 269
244 −\begin{donnees}[Tableau 6 --- Majorations appliquées par le moteur Quantity Survey d'UQO Éval (ordre d'application de la révision r1) \hfill \xl{Données}{B91:E96}]
270 +\begin{donnees}[Tableau 6 --- Majorations appliquées par le moteur Quantity Survey d'UQO Éval (ordre d'application de la révision r1) \hfill \xl{Données}{B88:E93}]
245 271 \begin{center}
246 272 \small
247 273 \rowcolors{2}{uqoBgClair!70}{white}
@@ -262,7 +288,7 @@ Contingences de construction & 5~\% des directs nus localisés & imprévus de ch
262 288 \footnotesize \textbf{Convention du cours.} Les \textbf{coûts directs au sens du cours} sont ceux qu'un entrepreneur général facturerait : directs nus $+$ conditions générales $+$ frais généraux $+$ profit de l'entrepreneur (séance 7). Les \textbf{contingences} s'ajoutent ensuite. Le \textbf{profit entrepreneurial} du promoteur (séance 8) est une autre chose : il se calcule à la question 8 sur directs $+$ contingences $+$ indirects.
263 289 \end{donnees}
264 290
265 −\begin{donnees}[Tableau 7 --- Paramètres réels des coûts indirects, du profit, des taxes et des références (consultés le 29 octobre 2026) \hfill \xl{Données}{B100:E115}]
291 +\begin{donnees}[Tableau 7 --- Paramètres réels des coûts indirects, du profit, des taxes et des références (consultés le 29 octobre 2026) \hfill \xl{Données}{B97:E112}]
266 292 \begin{center}
267 293 \footnotesize
268 294 \rowcolors{2}{uqoBgClair!70}{white}
@@ -289,18 +315,18 @@ Indexation du rôle terrain & ratio médian prix vendu $\div$ rôle terrain \tex
289 315 \footnotesize Convention des intérêts intercalaires (séance 8) : $I = (D_c + \text{contingences}) \times i \times \dfrac{T}{12} \times \tfrac{1}{2}$, où $i$ est le taux du prêt de construction et $T$ la durée du chantier en mois.
290 316 \end{donnees}
291 317
292 −\begin{donnees}[Tableau 8 --- Huit ventes RÉELLES de quadruplex neufs de 2 étages (construits 2021--2024) à Gatineau, 2024--2025 \hfill \xl{Données}{B119:N126}]
318 +\begin{donnees}[Tableau 8 --- Huit ventes RÉELLES de quadruplex neufs de 2 étages (construits 2021--2024) à Gatineau, 2024--2025 \hfill \xl{Données}{B116:N123}]
293 319 \begin{center}
294 −\tiny
295 −\setlength{\tabcolsep}{2.4pt}
320 +\scriptsize
321 +\setlength{\tabcolsep}{3pt}
296 322 \rowcolors{2}{uqoBgClair!70}{white}
297 323 \input{tables_tp2_ventes}
298 324 \end{center}
299 325 \smallskip
300 −\footnotesize Ventes du Registre foncier jumelées au rôle 2024-2026 (conditions du marché au 1\up{er} juillet 2022). \textbf{Aire d'étages} $=$ superficie hors sol des étages; dans ces quadruplex, deux des quatre logements occupent généralement le rez-de-jardin (sous-sol aménagé) --- une différence avec le projet. Q8 : vente de livraison de mai 2024 (figure~\ref{fig:photos}). Source : UQO Éval.
326 +\footnotesize Ventes du Registre foncier jumelées au rôle 2024-2026 (conditions du marché au 1\up{er} juillet 2022); toutes de 2 étages hors sol, lien physique détaché (Q6 jumelé). \textbf{Aire d'étages} $=$ superficie hors sol des étages; dans ces quadruplex, deux des quatre logements occupent généralement le rez-de-jardin (sous-sol aménagé) --- une différence avec le projet. Q8 : vente de livraison de mai 2024 (figure~\ref{fig:photos}). L'onglet \onglet{Données} donne aussi la superficie du terrain et le rôle du bâtiment. Source : UQO Éval.
301 327 \end{donnees}
302 328
303 −\begin{donnees}[Tableau 9 --- Deux quadruplex de 2020 en vigueur à Gatineau (prix demandés réels, pour la lecture de la question 9) \hfill \xl{Données}{B131:N132}]
329 +\begin{donnees}[Tableau 9 --- Deux quadruplex de 2020 en vigueur à Gatineau (prix demandés réels, pour la lecture de la question 9) \hfill \xl{Données}{B128:N129}]
304 330 \begin{center}
305 331 \scriptsize
306 332 \setlength{\tabcolsep}{2.5pt}
@@ -322,7 +348,7 @@ A2 & 335, av. de l'Hippodrome (Aylmer) & 1\,289\,900 & 299,1 & 3 & 76\,800 & 210
322 348 \ficheimm{hippodrome-335.jpg}{A2}{335, av. de l'Hippodrome}{Aylmer (Lakeview)}{Quadruplex 2020 en rangée, 3 étages · 2 $\times$ 2 ch. $+$ 2 $\times$ 1 ch. · qualité supérieure · thermopompes}{Prix demandé \textbf{1\,289\,900 \$}}{Rôle bât. \textbf{752\,800 \$}}
323 349
324 350 \vspace{8pt}
325 −\begin{donnees}[Tableau 10 --- Estimation du moteur de coût d'UQO Éval pour le même programme (méthode par composantes, 29 octobre 2026) \hfill \xl{Données}{B136:E161}]
351 +\begin{donnees}[Tableau 10 --- Estimation du moteur de coût d'UQO Éval pour le même programme (méthode par composantes, 29 octobre 2026) \hfill \xl{Données}{B133:E158}]
326 352 \begin{minipage}[t]{0.52\textwidth}
327 353 \scriptsize
328 354 \rowcolors{2}{uqoBgClair!70}{white}
@@ -360,35 +386,35 @@ Chaque question indique l'\textbf{emplacement exact de la réponse} dans le gaba
360 386 \xl{Relevé}{C5} (6 à 9 lignes). Parmi les quatre méthodes d'estimation du coût neuf vues à la séance 6 --- comparative (\$/pi\up{2} d'un guide), par \textbf{composantes} (unités en place), par relevé détaillé des quantités (\emph{quantity survey}) et indexée --- justifiez la méthode de ce travail : un bordereau par \textbf{composantes nourri par un vrai relevé} (tableaux 3 et 4), en vous appuyant sur ce que le promoteur possède. Dites ce que les trois autres méthodes apporteraient (ou non) ici. Expliquez ensuite pourquoi le bordereau d'un projet neuf est \textbf{par définition} un coût de \textbf{remplacement} et non de reproduction (séance 5), et nommez deux \textbf{limites} du bordereau que vous allez produire (nature des plans, nature des prix).
361 387 \end{questionexam}
362 388
363 −\begin{questionexam}{\faIcon{drafting-compass}\quad Du plan au relevé : sept grandeurs}{8}
364 −Onglet \onglet{Relevé}. Le relevé d'UQO Éval (tableau 3) est généré depuis les plans et la fiche; vous allez en \textbf{reproduire sept grandeurs} par formule, à partir des dimensions du tableau 1 (liées dans \xl{Données}{D11:D24}) et des totaux des plans (tableau 2, liés en \cel{Relevé!E12:G12}) :
389 +\begin{questionexam}{\faIcon{drafting-compass}\quad Du plan au relevé : cinq grandeurs}{6}
390 +Onglet \onglet{Relevé}. Le relevé des quantités d'UQO Éval (tableau 3) est généré automatiquement depuis les plans et la fiche : vous n'avez \textbf{pas} à le refaire. Pour comprendre d'où viennent les quantités du tableau 4, vous en \textbf{reproduisez cinq grandeurs} par formule, à partir des seules dimensions du tableau 1 (liées dans \xl{Données}{D9:D19}) :
365 391 \begin{enumerate}[label=\alph*), itemsep=2pt]
366 − \item \xl{Relevé}{F16:F22} : empreinte $=(L+\text{ép.})\times(P+\text{ép.})$; périmètre à l'axe $=2(L+P)$; murs de fondation $=\text{périmètre}\times h_{\text{fond}}$; murs extérieurs bruts $=\text{périmètre}\times h_{\text{étage}}\times\text{niveaux}$; murs extérieurs nets $=$ bruts $-$ ouvertures; surface de toit $=\text{empreinte}\times\text{pente}\times\text{débords}$; planchers portés $=\Sigma$ aires des pièces hors sol;
367 − \item \xl{Relevé}{H16:H22} : l'\textbf{écart} en \% entre votre calcul et la valeur d'UQO Éval (liée en colonne G). Un écart non nul signale une erreur de lecture du plan ou de formule --- la mise en forme conditionnelle vous le dira.
392 + \item \xl{Relevé}{F16:F20} : empreinte $=(L+\text{ép.})\times(P+\text{ép.})$; périmètre à l'axe $=2(L+P)$; murs de fondation $=\text{périmètre}\times h_{\text{fond}}$; murs extérieurs bruts $=\text{périmètre}\times h_{\text{étage}}\times\text{niveaux}$; surface de toit $=\text{empreinte}\times\text{pente}\times\text{débords}$;
393 + \item \xl{Relevé}{H16:H20} : l'\textbf{écart} en \% entre votre calcul et la valeur d'UQO Éval (liée en colonne G). Un écart non nul signale une erreur de lecture du plan ou de formule --- la mise en forme conditionnelle vous le dira.
368 394 \end{enumerate}
369 395 \begin{formule}
370 396 $\text{Murs extérieurs bruts} = 57{,}40 \times 2{,}44 \times 2$ \qquad soit \fx{=F17*Données!D14*Données!D10}
371 397 \end{formule}
372 −Ces sept grandeurs sont les quantités de référence des composantes 3 et 5 à 10 du tableau 4.
398 +Ces grandeurs sont les quantités de référence des composantes 3, 4 et 7 du tableau 4 et entrent dans celle de la composante 6. Piège classique : prendre $18{,}30 \times 10{,}40$ comme empreinte --- les dimensions du tableau 1 sont à l'\emph{axe} des murs.
373 399 \end{questionexam}
374 400
375 −\begin{questionexam}{\faIcon{calculator}\quad Bordereau des 22 composantes}{12}
376 −Onglet \onglet{Relevé}, lignes 27 à 48 (les 22 composantes du tableau 4 y sont liées : quantité, unité, trois prix composites nus). Pour \textbf{chaque composante}, par formule copiée vers le bas :
401 +\begin{questionexam}{\faIcon{calculator}\quad Bordereau des 22 composantes}{10}
402 +Onglet \onglet{Relevé}, lignes 27 à 48 : les 22 composantes du tableau 4 y sont liées (quantité, unité, prix unitaire nu). C'est la \textbf{méthode par composantes} de la séance 6 : une quantité, un prix, un montant --- pas de relevé ligne par ligne.
377 403 \begin{enumerate}[label=\alph*), itemsep=2pt]
378 − \item \xl{Relevé}{K27:K48} : le \textbf{coût unitaire nu} $=$ matériaux $+$ main-d'œuvre $+$ équipement;
379 − \item \xl{Relevé}{L27:L48} : le \textbf{montant} $=$ quantité $\times$ coût unitaire;
380 − \item \xl{Relevé}{L49} : le \textbf{coût direct nu total};
381 − \item \xl{Relevé}{E51:E54} : les montants totaux des matériaux, de la main-d'œuvre et de l'équipement (\fx{SOMMEPROD} / \fx{SUMPRODUCT}) et la \textbf{part de la main-d'œuvre};
382 − \item \xl{Relevé}{E58:F69} : le \textbf{sous-total de chaque division} MasterFormat (\fx{SOMME.SI} / \fx{SUMIF} sur la colonne des codes) et sa part; la colonne H compare au tableau 5;
383 − \item \xl{Relevé}{C72:C74} et \xl{Relevé}{E72:E74} : les \textbf{trois composantes les plus lourdes} (\fx{GRANDE.VALEUR} / \fx{LARGE}, puis \fx{INDEX} + \fx{EQUIV} / \fx{MATCH}).
404 + \item \xl{Relevé}{I27:I48} : le \textbf{montant} de chaque composante $=$ quantité $\times$ prix unitaire nu (une formule, copiée vers le bas);
405 + \item \xl{Relevé}{I49} : le \textbf{coût direct nu total} --- il doit retrouver le direct nu de la révision r1 (471\,085~\$) à quelques dollars près (arrondis des prix unitaires);
406 + \item \xl{Relevé}{E53:F64} : le \textbf{sous-total de chaque division} MasterFormat (\fx{SOMME.SI} / \fx{SUMIF} sur la colonne C des codes, qui sont des textes : « 03 ») et sa part du total; la colonne H compare au tableau 5;
407 + \item \xl{Relevé}{E68:E70} : les montants des \textbf{trois composantes les plus lourdes} (\fx{GRANDE.VALEUR} / \fx{LARGE}) et, en \xl{Relevé}{C68:C70}, leur nom --- par \fx{INDEX} + \fx{EQUIV} / \fx{MATCH} si vous le souhaitez, ou simplement recopié (sans pénalité).
384 408 \end{enumerate}
385 −Votre total doit retrouver le direct nu de la révision r1 (471\,085~\$) à quelques dollars près (arrondis des prix composites).
409 +\begin{formule}
410 +$\text{Montant}_{9} = 173{,}40~\text{m}^2 \times 447{,}13~\$/\text{m}^2$ \qquad soit \fx{=F35*H35} \qquad et \fx{=SOMME.SI(\$C\$27:\$C\$48;B53;\$I\$27:\$I\$48)}
411 +\end{formule}
386 412 \end{questionexam}
387 413
388 −\begin{questionexam}{\faIcon{layer-group}\quad Des coûts nus aux coûts directs du cours}{8}
414 +\begin{questionexam}{\faIcon{layer-group}\quad Des coûts nus aux coûts directs du cours}{10}
389 415 Onglet \onglet{Bordereau}, \xl{Bordereau}{C9:C15}, en suivant l'\textbf{ordre d'application} du tableau 7 (chaque majoration lit son taux dans \onglet{Données}) :
390 416 \begin{enumerate}[label=\alph*), itemsep=2pt]
391 − \item directs nus \textbf{localisés} $=$ direct nu (lié de \cel{Relevé!L49}) $+$ ajustement régional;
417 + \item directs nus \textbf{localisés} $=$ direct nu (lié de \cel{Relevé!I49}) $+$ ajustement régional;
392 418 \item conditions générales du chantier (8~\% des directs nus localisés);
393 419 \item frais généraux de l'entrepreneur (7~\% du cumul : directs $+$ conditions générales);
394 420 \item profit de l'entrepreneur général (8~\% du cumul précédent);
@@ -396,6 +422,7 @@ Onglet \onglet{Bordereau}, \xl{Bordereau}{C9:C15}, en suivant l'\textbf{ordre d'
396 422 \item contingences de construction (5~\% des directs nus localisés);
397 423 \item \textbf{directs $+$ contingences}. La cellule \cel{D16} vérifie que vous retrouvez le total de la révision r1 (611\,823~\$, $\pm$ 50~\$).
398 424 \end{enumerate}
425 +Points : ordre des majorations respecté, chaque taux lu dans \onglet{Données} (6); directs du cours, contingences et contrôle r1 (4). Appliquer $8 + 7 + 8 = 23~\%$ sur une même base n'est pas la même chose que trois majorations en cascade : c'est précisément ce que la question vérifie.
399 426 \end{questionexam}
400 427
401 428 \begin{questionexam}{\faIcon{file-signature}\quad Permis de construction réel et garantie GCR}{8}
@@ -442,14 +469,14 @@ Onglet \onglet{Marché}. Le marché vend des immeubles \textbf{terrain compris};
442 469 Points : a (5); b (3); c (2); d (4).
443 470 \end{questionexam}
444 471
445 −\begin{questionexam}{\faIcon{tachometer-alt}\quad Tableau de bord et note au promoteur}{14}
472 +\begin{questionexam}{\faIcon{tachometer-alt}\quad Tableau de bord et note au promoteur}{16}
446 473 \begin{enumerate}[label=\alph*), itemsep=2pt]
447 474 \item \textbf{KPI} \xl{Dashboard}{B5:G6} : six indicateurs par formule avec \fx{SIERREUR} (\fx{IFERROR}) --- deux fournis en modèle, quatre à compléter (total des indirects, profit entrepreneurial, \$/pi\up{2} hors sol, écart bordereau / marché);
448 475 \item \textbf{Verdict} \xl{Dashboard}{C8} : liste déroulante (\emph{coût sous la valeur de marché --- projet viable}, \emph{coût $\approx$ valeur de marché}, \emph{coût au-dessus --- projet à revoir}) cohérent avec vos chiffres; la mise en forme conditionnelle réagit au choix;
449 − \item \textbf{Graphiques} : les deux graphiques fournis (direct nu par division; coût du bâtiment par logement selon le bordereau, le moteur et le marché) doivent refléter votre classeur; ajoutez un \textbf{troisième graphique} de votre choix (p.~ex. matériaux / main-d'œuvre / équipement, sensibilité du coût total à la durée du chantier, \$/m\up{2} implicite des huit ventes), titré et étiqueté;
450 − \item \textbf{Note au promoteur} --- onglet \onglet{Note} (et PDF remis) : coût total et unités de comparaison, postes les plus sensibles, \textbf{effet chiffré d'un retard de chantier de 6 mois} sur les intercalaires et sur le coût total, ce que disent le marché, le moteur et Altus, conventions déclarées, limites --- chaque affirmation chiffrée et référencée à une cellule.
476 + \item \textbf{Graphiques} : les deux graphiques fournis (direct nu par division; coût du bâtiment par logement selon le bordereau, le moteur et le marché) doivent refléter votre classeur; ajoutez un \textbf{troisième graphique} de votre choix (p.~ex. sensibilité du coût total à la durée du chantier --- 6, 12, 18, 24 mois ---, \$/m\up{2} implicite des huit ventes, part des trois composantes les plus lourdes), titré et étiqueté;
477 + \item \textbf{Note au promoteur} --- onglet \onglet{Note} (et PDF remis), une page, six rubriques : coût total et unités de comparaison; postes les plus sensibles; \textbf{effet chiffré d'un retard de chantier de 6 mois} sur les intercalaires et sur le coût total; ce que disent le marché, le moteur et Altus (le projet est-il viable?); conventions déclarées; limites --- chaque affirmation chiffrée et référencée à une cellule.
451 478 \end{enumerate}
452 −Points : KPI (4), verdict et 3\up{e} graphique (4), note (6 --- le chiffrage du retard en vaut 2).
479 +Points : KPI (4), verdict et 3\up{e} graphique (4), note (8 --- le chiffrage du retard en vaut 2, les cellules citées 1, conventions et limites 3, conclusion et viabilité 2).
453 480 \end{questionexam}
454 481
455 482 % ------------------------------------------------------------------------------
@@ -463,15 +490,15 @@ Points : KPI (4), verdict et 3\up{e} graphique (4), note (6 --- le chiffrage du
463 490 \textbf{Question} & \textbf{Objet évalué} & \textbf{Points} \\
464 491 \midrule
465 492 1 & Méthode par composantes motivée (3); les trois autres méthodes (2); remplacement par définition et limites (3) & 8 \\
466 −2 & Sept grandeurs par formule (6); écarts et correction des anomalies (2) & 8 \\
467 −3 & Coût unitaire et montant (4); total, matériaux / MO / équipement (3); sous-totaux par division (3); trois composantes les plus lourdes (2) & 12 \\
468 −4 & Ordre des majorations respecté (5); directs du cours, contingences et contrôle r1 (3) & 8 \\
493 +2 & Cinq grandeurs par formule liée à \onglet{Données} (4); écarts et correction des anomalies (2) & 6 \\
494 +3 & Montants par formule copiée (3); total nu et contrôle r1 (2); sous-totaux par division (3); trois composantes les plus lourdes (2) & 10 \\
495 +4 & Ordre des majorations respecté, taux lus dans \onglet{Données} (6); directs du cours, contingences et contrôle r1 (4) & 10 \\
469 496 5 & Permis : \fx{MAX} fonctionnel et assiette (5); GCR (3) & 8 \\
470 497 6 & Taux (2); formule complète avec ½ (5); explication et cas limite (3) & 10 \\
471 498 7 & Honoraires sur la bonne assiette (3); assurance (1); total et ratio (4) & 8 \\
472 499 8 & Assiette, profit et total (4); unités de comparaison (3); convention chiffrée et argumentée (3) & 10 \\
473 500 9 & Extraction sur huit ventes et médianes (5); écarts et position Altus (3); profit extrait (2); lecture (4) & 14 \\
474 −10 & KPI (4); verdict et 3\up{e} graphique (4); note au promoteur chiffrée (6) & 14 \\
501 +10 & KPI (4); verdict et 3\up{e} graphique (4); note au promoteur chiffrée (8) & 16 \\
475 502 \midrule
476 503 & \textbf{Total} & \textbf{100} \\
477 504 \bottomrule
@@ -491,7 +518,7 @@ Points : KPI (4), verdict et 3\up{e} graphique (4), note (6 --- le chiffrage du
491 518
492 519 \begin{enumerate}[leftmargin=18pt, itemsep=3pt]
493 520 \item UQO Éval --- laboratoire pédagogique d'évaluation immobilière (UQO, IMM1003 · IMM1033), module \emph{Quantity Survey} : cas d'étude « Cas 9 --- Quadruplex 2 étages, Gatineau (RSMeans 2026 T4) », plans (Plan Studio), fiche technique, relevé des quantités metre-qs-1.0, révision r1 du 29 octobre 2026 : tableaux 1 à 6, figures 2 et 3. \url{https://www.uqo-eval.app/quantity-survey/projets/97fa1d2a-06e1-4ed3-a580-0728616915ce}
494 − \item RSMeans Online (Gordian), \emph{Year 2026 Quarter 4}, livres \emph{Residential} et \emph{Commercial New Construction}, localisation Gatineau (C57), main-d'œuvre syndiquée; abonnement UQO --- données sous licence, usage pédagogique interne, reproduites ici sous forme de 22 prix composites. \url{https://www.rsmeansonline.com}
521 + \item RSMeans Online (Gordian), \emph{Year 2026 Quarter 4}, livres \emph{Residential} et \emph{Commercial New Construction}, localisation Gatineau (C57), main-d'œuvre syndiquée; abonnement UQO --- données sous licence, usage pédagogique interne, reproduites ici sous forme de 22 prix unitaires composites. \url{https://www.rsmeansonline.com}
495 522 \item UQO Éval --- ventes réelles du Registre foncier du Québec fusionnées au rôle d'évaluation 2024-2025-2026 de Gatineau (MAMH, données ouvertes), unités de 4 logements construites en 2021--2024 : tableau 8. \url{https://www.uqo-eval.app/methodologie}
496 523 \item UQO Éval --- « À vendre » : copie des inscriptions en vigueur (source Immo-Ka, 29 octobre 2026) : tableau 9; photos des inscriptions 1151, rue Notre-Dame (RE/MAX Québec, 2024), 280, rue Champlain et 335, av. de l'Hippodrome (Centris / courtiers inscripteurs), reproduites à des fins pédagogiques, droits réservés.
497 524 \item UQO Éval --- moteur de coût \web{/cout} (\texttt{POST /api/cost/estimate}, mode construction, prix du 29 octobre 2026) : tableau 10.
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2.tex +33 −24
@@ -1,28 +1,37 @@
1 −\begin{tabular}{@{}rlp{3.4cm}p{4.6cm}rp{1.9cm}rrr@{}}
1 +\begin{tabular}{@{}rlp{3.55cm}p{5.6cm}rp{1.8cm}r@{}}
2 2 \toprule
3 −\textbf{N\up{o}} & \textbf{Div.} & \textbf{Composante} & \textbf{Ce qu'elle comprend} & \textbf{Quantité} & \textbf{Unité} & \textbf{Mat. \$/u} & \textbf{MO \$/u} & \textbf{Éq. \$/u} \\
3 +\textbf{N\up{o}} & \textbf{Div.} & \textbf{Composante} & \textbf{Ce qu'elle comprend} & \textbf{Quantité} & \textbf{Unité} & \textbf{Prix nu (\$/u)} \\
4 4 \midrule
5 −1 & 31 & Excavation, remblai et drain français & excavation en masse, remblai, drain de fondation perforé & 651,77 & m\up{3} excavé & 2,09 & 3,25 & 2,18 \\
6 −2 & 33 & Branchements des services & aqueduc, égout et électricité (catalogue UQO Éval) & 1,00 & forfait & 6\,500,00 & 1\,172,78 & 460,00 \\
7 −3 & 03 & Fondations : semelles, murs coffrés et membrane & semelle filante 24 $\times$ 12 po, mur de béton 8 po, enduit d'imperméabilisation & 140,06 & m\up{2} de mur de fondation & 108,35 & 90,32 & 6,39 \\
8 −4 & 03 & Sous-sol : dalle, isolation XPS et fenêtres & dalle 4 po, XPS 2 po deux couches, 3 fenêtres utilitaires & 199,02 & m\up{2} de dalle & 75,83 & 24,47 & 0,11 \\
9 −5 & 06 & Planchers portés & solives en I 24 po c/c et sous-plancher OSB 3/4 po & 352,81 & m\up{2} de plancher & 43,27 & 11,41 & 0,00 \\
10 −6 & 06 & Ossature de bois & murs extérieurs 2 $\times$ 6 + contreplaqué 1/2 po, cloisons 2 $\times$ 4, poutre LVL, colonnes & 572,42 & m\up{2} de mur (ext. brut + cloisons) & 17,26 & 15,47 & 0,00 \\
11 −7 & 07 & Toiture complète & fermes, support CDX 1/2 po, membrane APP 2 couches, soffites, gouttières et descentes & 218,92 & m\up{2} de toit & 54,66 & 25,26 & 9,98 \\
12 −8 & 07 & Isolation des murs extérieurs R-24 et du comble R-50 & matelas R-21 ($\approx$ R-24) + cellulose soufflée & 415,77 & m\up{2} isolé (murs nets + comble) & 9,56 & 7,99 & 2,86 \\
13 −9 & 07 & Revêtement de brique (80 \%) & placage de brique standard, appareil courant & 173,40 & m\up{2} de mur net & 358,33 & 88,80 & 0,00 \\
14 −10 & 07 & Revêtement de vinyle (20 \%) & revêtement de vinyle double 5 po & 43,35 & m\up{2} de mur net & 16,90 & 21,53 & 0,00 \\
15 −11 & 08 & Fenêtres & fenêtre de vinyle à guillotine 3 $\times$ 41/2 pi avec moustiquaire & 24,00 & unité & 848,89 & 51,18 & 0,00 \\
16 −12 & 08 & Portes extérieures et portes-patio & 4 portes d'acier isolées + 4 portes-patio coulissantes 6 pi & 8,00 & unité & 1\,467,81 & 126,44 & 0,00 \\
17 −13 & 08 & Portes intérieures et de garde-robe & 16 portes prémontées à âme creuse + 11 portes pliantes & 27,00 & unité & 292,18 & 48,17 & 0,00 \\
18 −14 & 09 & Gypse et peinture & gypse 1/2 po murs, 5/8 po plafonds, peinture latex 2 couches & 1\,154,19 & m\up{2} de gypse & 13,92 & 15,55 & 0,00 \\
19 −15 & 09 & Planchers finis & bois franc préverni (60 \%), céramique (25 \%), vinyle de luxe (15 \%) & 352,81 & m\up{2} de plancher & 76,53 & 24,60 & 0,00 \\
20 −16 & 09 & Escaliers, rampes, plinthes et tablettes & 2 escaliers préfabriqués, mains courantes, plinthe ogee, tablettes de pin & 1,00 & forfait & 6\,017,62 & 2\,946,59 & 0,00 \\
21 −17 & 11 & Cuisines & armoires, comptoirs stratifiés, éviers avec robinet & 4,00 & logement & 12\,382,26 & 1\,363,96 & 0,00 \\
22 −18 & 22 & Salles de bain complètes & toilette, lavabo et robinet, baignoire d'acier, robinetterie & 4,00 & unité & 2\,450,13 & 661,37 & 0,00 \\
23 −19 & 22 & Plomberie brute, chauffe-eau et drainage & 28 appareils (alimentation, évacuation, évent), 4 chauffe-eau 60 gal, drainage & 4,00 & logement & 4\,178,92 & 3\,406,68 & 0,00 \\
24 −20 & 23 & Chauffage et ventilation & 26 plinthes électriques 1 500 W, 4 échangeurs d'air (VRC) & 4,00 & logement & 2\,126,98 & 1\,350,96 & 0,00 \\
25 −21 & 26 & Électricité complète & 4 entrées 200 A et panneaux, filage brut, 54 luminaires, 3 lanternes & 4,00 & logement & 4\,430,71 & 2\,405,75 & 0,00 \\
26 −22 & 32 & Perron préfabriqué & 5 contremarches, 5 pi & 1,00 & unité & 2\,244,00 & 267,03 & 224,72 \\
5 +1 & 31 & Excavation, remblai et drain français & excavation en masse, remblai, drain de fondation perforé & 651,77 & m\up{3} & 7,52 \\
6 +2 & 33 & Branchements des services & aqueduc, égout et électricité (catalogue UQO Éval) & 1,00 & forfait & 8\,132,78 \\
7 +3 & 03 & Fondations : semelles, murs coffrés et membrane & semelle filante 24 $\times$ 12 po, mur de béton 8 po, enduit d'imperméabilisation & 140,06 & m\up{2} de mur & 205,06 \\
8 +4 & 03 & Sous-sol : dalle, isolation XPS et fenêtres & dalle 4 po, XPS 2 po deux couches, 3 fenêtres utilitaires & 199,02 & m\up{2} de dalle & 100,41 \\
9 +5 & 06 & Planchers portés & solives en I 24 po c/c et sous-plancher OSB 3/4 po & 352,81 & m\up{2} de plancher & 54,68 \\
10 +6 & 06 & Ossature de bois & murs extérieurs 2 $\times$ 6 + contreplaqué 1/2 po, cloisons 2 $\times$ 4, poutre LVL, colonnes & 572,42 & m\up{2} de mur & 32,73 \\
11 +7 & 07 & Toiture complète & fermes, support CDX 1/2 po, membrane APP 2 couches, soffites, gouttières et descentes & 218,92 & m\up{2} de toit & 89,90 \\
12 +8 & 07 & Isolation des murs extérieurs R-24 et du comble R-50 & matelas R-21 ($\approx$ R-24) + cellulose soufflée & 415,77 & m\up{2} isolé & 20,41 \\
13 +9 & 07 & Revêtement de brique (80 \%) & placage de brique standard, appareil courant & 173,40 & m\up{2} de mur net & 447,13 \\
14 +10 & 07 & Revêtement de vinyle (20 \%) & revêtement de vinyle double 5 po & 43,35 & m\up{2} de mur net & 38,43 \\
15 +11 & 08 & Fenêtres & fenêtre de vinyle à guillotine 3 $\times$ 4,5 pi avec moustiquaire & 24,00 & unité & 900,07 \\
16 +\bottomrule
17 +\end{tabular}
18 +
19 +\par\nopagebreak[0]\vspace{2pt}\par
20 +
21 +\begin{tabular}{@{}rlp{3.55cm}p{5.6cm}rp{1.8cm}r@{}}
22 +\toprule
23 +\textbf{N\up{o}} & \textbf{Div.} & \textbf{Composante} & \textbf{Ce qu'elle comprend} & \textbf{Quantité} & \textbf{Unité} & \textbf{Prix nu (\$/u)} \\
24 +\midrule
25 +12 & 08 & Portes extérieures et portes-patio & 4 portes d'acier isolées + 4 portes-patio coulissantes 6 pi & 8,00 & unité & 1\,594,25 \\
26 +13 & 08 & Portes intérieures et de garde-robe & 16 portes prémontées à âme creuse + 11 portes pliantes & 27,00 & unité & 340,35 \\
27 +14 & 09 & Gypse et peinture & gypse 1/2 po murs, 5/8 po plafonds, peinture latex 2 couches & 1\,154,19 & m\up{2} de gypse & 29,47 \\
28 +15 & 09 & Planchers finis & bois franc préverni (60 \%), céramique (25 \%), vinyle de luxe (15 \%) & 352,81 & m\up{2} de plancher & 101,13 \\
29 +16 & 09 & Escaliers, rampes, plinthes et tablettes & 2 escaliers préfabriqués, mains courantes, plinthe ogee, tablettes de pin & 1,00 & forfait & 8\,964,21 \\
30 +17 & 11 & Cuisines & armoires, comptoirs stratifiés, éviers avec robinet & 4,00 & logement & 13\,746,22 \\
31 +18 & 22 & Salles de bain complètes & toilette, lavabo et robinet, baignoire d'acier, robinetterie & 4,00 & unité & 3\,111,50 \\
32 +19 & 22 & Plomberie brute, chauffe-eau et drainage & 28 appareils (alimentation, évacuation, évent), 4 chauffe-eau 60 gal, drainage & 4,00 & logement & 7\,585,60 \\
33 +20 & 23 & Chauffage et ventilation & 26 plinthes électriques 1 500 W, 4 échangeurs d'air (VRC) & 4,00 & logement & 3\,477,94 \\
34 +21 & 26 & Électricité complète & 4 entrées 200 A et panneaux, filage brut, 54 luminaires, 3 lanternes & 4,00 & logement & 6\,836,46 \\
35 +22 & 32 & Perron préfabriqué & 5 contremarches, 5 pi & 1,00 & unité & 2\,735,75 \\
27 36 \bottomrule
28 37 \end{tabular}
added IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2_plans.tex +9 −0
@@ -0,0 +1,9 @@
1 +\begin{tabular}{@{}lp{2.1cm}p{2.1cm}p{2.0cm}p{2.1cm}p{1.5cm}p{1.5cm}@{}}
2 +\toprule
3 +\textbf{Niveau} & \textbf{Aire des pièces (m\up{2})} & \textbf{Murs ext. bruts (m\up{2})} & \textbf{Ouvertures (m\up{2})} & \textbf{Murs ext. nets (m\up{2})} & \textbf{Fenêtres} & \textbf{Portes ext.} \\
4 +\midrule
5 +Sous-sol & \hfill 192,46 & \hfill 140,06 & \hfill 1,20 & \hfill 138,86 & \hfill 3 & \hfill 0 \\
6 +Rez-de-chaussée & \hfill 176,40 & \hfill 140,06 & \hfill 31,68 & \hfill 108,38 & \hfill 12 & \hfill 4 \\
7 +Étage & \hfill 176,40 & \hfill 140,06 & \hfill 31,68 & \hfill 108,38 & \hfill 12 & \hfill 4 \\
8 +\bottomrule
9 +\end{tabular}
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2_releve.tex +1 −3
@@ -6,8 +6,6 @@
6 6 2 & Semelles filantes & 2 $\times$ (L + P) & 57,40 & m \\
7 7 3 & Murs de fondation (h 2.44 m) & périmètre $\times$ hauteur du mur & 140,06 & m\up{2} \\
8 8 4 & Murs extérieurs ossature 2$\times$6 & périmètre $\times$ hauteur d'étage $\times$ niveaux & 280,11 & m\up{2} \\
9 −5 & Isolation des murs extérieurs R-24 & bruts -- ouvertures hors sol & 216,75 & m\up{2} \\
10 −6 & Couverture & empreinte $\times$ facteur de pente $\times$ débords & 218,92 & m\up{2} \\
11 −7 & Planchers portés (solives) & $\Sigma$ aires des pièces hors sol & 352,81 & m\up{2} \\
9 +5 & Couverture & empreinte $\times$ facteur de pente $\times$ débords & 218,92 & m\up{2} \\
12 10 \bottomrule
13 11 \end{tabular}
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2_ventes.tex +10 −10
@@ -1,14 +1,14 @@
1 −\begin{tabular}{@{}clrrcrrcrrr@{}}
1 +\begin{tabular}{@{}clp{2.15cm}crcrrr@{}}
2 2 \toprule
3 −\textbf{N\up{o}} & \textbf{Adresse} & \textbf{Date} & \textbf{Prix (\$)} & \textbf{Constr.} & \textbf{Aire d'étages (m\up{2})} & \textbf{Terrain (m\up{2})} & \textbf{Ét. / lien} & \textbf{Rôle terrain (\$)} & \textbf{Rôle bât. (\$)} & \textbf{Rôle total (\$)} \\
3 +\textbf{N\up{o}} & \textbf{Adresse} & \textbf{Secteur} & \textbf{Date de vente} & \textbf{Prix (\$)} & \textbf{Constr.} & \textbf{Aire d'étages (m\up{2})} & \textbf{Rôle terrain (\$)} & \textbf{Rôle total (\$)} \\
4 4 \midrule
5 −Q1 & 180, rue O'Brien (Saint-Renéureau de poste) & 2025-11-21 & 1\,145\,000 & 2021 & 190,2 & 658,9 & 2 / D & 229\,300 & 567\,300 & 796\,600 \\
6 −Q2 & 160, rue O'Brien (Saint-Renéureau de poste) & 2025-11-21 & 1\,168\,000 & 2021 & 190,2 & 657,6 & 2 / D & 229\,200 & 567\,300 & 796\,500 \\
7 −Q3 & 94, rue de l'Écorce (Masson) & 2025-10-21 & 1\,100\,000 & 2022 & 196,2 & 929,5 & 2 / D & 204\,000 & 594\,900 & 798\,900 \\
8 −Q4 & 390, rue Raymond (Saint-Renéureau de poste) & 2025-09-12 & 1\,165\,000 & 2024 & 190,2 & 657,6 & 2 / D & 229\,200 & 683\,400 & 912\,600 \\
9 −Q5 & 7, rue Damphousse (Gatineau) & 2025-03-14 & 1\,125\,000 & 2022 & 239,4 & 587,9 & 2 / D & 184\,500 & 839\,600 & 1\,024\,100 \\
10 −Q6 & 767, rue Notre-Dame (Gatineau) & 2025-03-07 & 1\,205\,276 & 2024 & 231,8 & 565,5 & 2 / J & 184\,100 & 799\,800 & 983\,900 \\
11 −Q7 & 380, rue Raymond (Saint-Renéureau de poste) & 2025-02-03 & 1\,140\,000 & 2022 & 190,2 & 657,6 & 2 / D & 229\,200 & 573\,000 & 802\,200 \\
12 −Q8 & 1151, Rue Notre-Dame (Gatineau) & 2024-05-07 & 849\,411 & 2024 & 194,4 & 695,5 & 2 / D & 186\,200 & 715\,000 & 901\,200 \\
5 +Q1 & 180, rue O'Brien & Gatineau, Saint-René & 2025-11-21 & 1\,145\,000 & 2021 & 190,2 & 229\,300 & 796\,600 \\
6 +Q2 & 160, rue O'Brien & Gatineau, Saint-René & 2025-11-21 & 1\,168\,000 & 2021 & 190,2 & 229\,200 & 796\,500 \\
7 +Q3 & 94, rue de l'Écorce & Masson & 2025-10-21 & 1\,100\,000 & 2022 & 196,2 & 204\,000 & 798\,900 \\
8 +Q4 & 390, rue Raymond & Gatineau, Saint-René & 2025-09-12 & 1\,165\,000 & 2024 & 190,2 & 229\,200 & 912\,600 \\
9 +Q5 & 7, rue Damphousse & Gatineau & 2025-03-14 & 1\,125\,000 & 2022 & 239,4 & 184\,500 & 1\,024\,100 \\
10 +Q6 & 767, rue Notre-Dame & Gatineau & 2025-03-07 & 1\,205\,276 & 2024 & 231,8 & 184\,100 & 983\,900 \\
11 +Q7 & 380, rue Raymond & Gatineau, Saint-René & 2025-02-03 & 1\,140\,000 & 2022 & 190,2 & 229\,200 & 802\,200 \\
12 +Q8 & 1151, Rue Notre-Dame & Gatineau & 2024-05-07 & 849\,411 & 2024 & 194,4 & 186\,200 & 901\,200 \\
13 13 \bottomrule
14 14 \end{tabular}
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/gabarit_excel/IMM1033-20_TP2_gabarit.xlsx +0 −0

Binary file not shown.

modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/solutionnaire_enseignant/IMM1033-20_TP2_solutionnaire.pdf +0 −0

Binary file not shown.

modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/solutionnaire_enseignant/IMM1033-20_TP2_solutionnaire.tex +19 −21
@@ -1,7 +1,7 @@
1 1 % ==============================================================================
2 2 % IMM1033-20 — TP2 : SOLUTIONNAIRE — Bordereau de coût de remplacement neuf d'un quadruplex (UQO Éval, RSMeans 2026 T4)
3 3 % Réservé à l'enseignant — Simon-Pierre Boucher, UQO
4 −% Valeurs de référence : 05_Ressources/scripts_gabarits_excel/tp2_solutions.py (solutionnaire Excel vérifié par recalcul : 74/74)
4 +% Valeurs de référence : 05_Ressources/scripts_gabarits_excel/tp2_solutions.py (solutionnaire Excel vérifié par recalcul : 69/69, version allégée du 2026-10-30)
5 5 % ==============================================================================
6 6 \documentclass[11pt]{article}
7 7 \usepackage[solutionnaire]{uqo-examen}
@@ -14,27 +14,27 @@
14 14 \setexamDuree{Travail individuel à la maison (gabarit Excel obligatoire + laboratoire UQO Éval)}
15 15 \setexamRemise{Séance 9 (12 novembre 2026) --- dépôt Moodle}
16 16 \setexamPonderation{15 \% de la note finale}
17 −\setexamCouverture{Bordereau de coût de remplacement neuf : quadruplex de 2 étages à Gatineau --- données réelles d'UQO Éval (Cas 9, 22 composantes RSMeans 2026 T4)}
17 +\setexamCouverture{Bordereau de coût de remplacement neuf : quadruplex de 2 étages à Gatineau --- données réelles d'UQO Éval (Cas 9, 22 composantes à prix unitaire nu, RSMeans 2026 T4)}
18 18
19 19 \begin{document}
20 20 \pagetitreexamen
21 21
22 22 \begin{notescorrection}[Philosophie de correction]
23 −Plus de paramètre B : toutes les copies travaillent sur le même cas réel (cas d'étude « Cas 9 » d'UQO Éval, révision r1 du 29 octobre 2026). La note récompense la \textbf{rigueur de la chaîne} (conversions, ordre des majorations, assiettes) et la \textbf{lecture} (conventions, marché, limites). Le gabarit est entièrement chaîné : changer un prix unitaire dans \emph{Données} doit recalculer Bordereau!C38. Valeurs reproductibles par \texttt{tp2\_solutions.py}; solutionnaire Excel \texttt{IMM1033-20\_TP2\_solutionnaire.xlsx} (formules réelles, 74 cellules vérifiées par recalcul dans Excel). Chaîne de référence : direct nu \textbf{471\,100~\$} (r1 : 471\,085) $\rightarrow$ directs du cours \textbf{588\,275~\$} $\rightarrow$ directs $+$ contingences \textbf{611\,843~\$} (r1 : 611\,823) $\rightarrow$ indirects \textbf{72\,078~\$} $\rightarrow$ coût total \textbf{759\,152~\$} (177,19~\$/pi\up{2} hors sol, 189\,788~\$/logement) $\rightarrow$ marché : bâtiment implicite médian \textbf{866\,833~\$}, profit extrait \textbf{26,7~\%}. Correction express : taper 100 dans Données!H57 (matériaux de la brique) doit faire bouger Bordereau!C38 : sinon la chaîne n'est pas liée. Version allégée du 29 octobre 2026 (soir) : 22 composantes à prix composites au lieu des 64 lignes RSMeans, 7 grandeurs au lieu de 12, 8 ventes au lieu de 11.
23 +Plus de paramètre B : toutes les copies travaillent sur le même cas réel (cas d'étude « Cas 9 » d'UQO Éval, révision r1 du 29 octobre 2026). La note récompense la \textbf{rigueur de la chaîne} (conversions, ordre des majorations, assiettes) et la \textbf{lecture} (conventions, marché, limites). Le gabarit est entièrement chaîné : changer un prix unitaire dans \emph{Données} doit recalculer Bordereau!C38. Valeurs reproductibles par \texttt{tp2\_solutions.py}; solutionnaire Excel \texttt{IMM1033-20\_TP2\_solutionnaire.xlsx} (formules réelles, 69 cellules vérifiées par recalcul dans Excel). Chaîne de référence : direct nu \textbf{471\,100~\$} (r1 : 471\,085) $\rightarrow$ directs du cours \textbf{588\,275~\$} $\rightarrow$ directs $+$ contingences \textbf{611\,843~\$} (r1 : 611\,823) $\rightarrow$ indirects \textbf{72\,078~\$} $\rightarrow$ coût total \textbf{759\,152~\$} (177,19~\$/pi\up{2} hors sol, 189\,788~\$/logement) $\rightarrow$ marché : bâtiment implicite médian \textbf{866\,833~\$}, profit extrait \textbf{26,7~\%}. Correction express : taper 100 dans Données!H55 (prix unitaire nu de la brique, composante 9) doit faire bouger Bordereau!C38 : sinon la chaîne n'est pas liée. Version allégée du 30 octobre 2026 : la partie « quantity survey » se limite à 5 grandeurs reproduites et à 22 composantes à \textbf{un seul prix unitaire nu} (plus de ventilation matériaux / main-d'œuvre / équipement, plus de SOMMEPROD); le poids est déplacé vers la chaîne des majorations (Q4 : 10 pts) et la note au promoteur (Q10 : 16 pts). Barème : 8 / 6 / 10 / 10 / 8 / 10 / 8 / 10 / 14 / 16.
24 24 \end{notescorrection}
25 25
26 26 \partieexamen{Solutions}{}
27 27
28 28 \begin{questionexam}{Méthode d'estimation et nature du coût estimé}{8}
29 29 \begin{solution}
30 −\textbf{Bordereau par composantes nourri par un relevé} : le promoteur dispose de plans cotés et d'une fiche technique; UQO Éval en a tiré un relevé des quantités que le TP condense en 22 composantes (unités en place) à prix composites --- chaque composante est une quantité mesurée sur le plan (m\up{2} de toit, m\up{2} de brique, nombre de fenêtres) multipliée par un prix nu par unité (séance 6). La méthode \textbf{comparative} (\$/pi\up{2} d'un guide : Altus 180--330~\$) ne donne qu'un ordre de grandeur sans distinguer brique et vinyle, toit plat et bardeaux; le \textbf{relevé détaillé} ligne par ligne (64 lignes RSMeans sur UQO Éval) est plus précis mais plus lourd --- c'est celui de l'entrepreneur qui soumissionne; la méthode \textbf{indexée} suppose un coût historique connu, inexistant pour un projet neuf; le moteur de coût d'UQO Éval (tableau 10) sert ici de \emph{contrôle}. \textbf{Remplacement par définition} : il n'y a pas d'original à reproduire; on chiffre un bâtiment d'utilité équivalente aux normes et matériaux d'aujourd'hui (séance 5); la reproduction ne redeviendrait pertinente que pour un bâtiment existant aux caractéristiques d'époque. \textbf{Limites} : plan générique (gabarit du module, pas les plans d'exécution), prix composites dérivés de prix publiés RSMeans localisés (pas des soumissions); précision attendue $\pm$ 5 à 10~\% sur les directs.
30 +\textbf{Bordereau par composantes nourri par un relevé} : le promoteur dispose de plans cotés et d'une fiche technique; UQO Éval en a tiré un relevé des quantités que le TP condense en 22 composantes (unités en place) à prix unitaire nu --- chaque composante est une quantité mesurée sur le plan (m\up{2} de toit, m\up{2} de brique, nombre de fenêtres) multipliée par un prix nu par unité (séance 6). La méthode \textbf{comparative} (\$/pi\up{2} d'un guide : Altus 180--330~\$) ne donne qu'un ordre de grandeur sans distinguer brique et vinyle, toit plat et bardeaux; le \textbf{relevé détaillé} ligne par ligne (64 lignes RSMeans sur UQO Éval) est plus précis mais plus lourd --- c'est celui de l'entrepreneur qui soumissionne; la méthode \textbf{indexée} suppose un coût historique connu, inexistant pour un projet neuf; le moteur de coût d'UQO Éval (tableau 10) sert ici de \emph{contrôle}. \textbf{Remplacement par définition} : il n'y a pas d'original à reproduire; on chiffre un bâtiment d'utilité équivalente aux normes et matériaux d'aujourd'hui (séance 5); la reproduction ne redeviendrait pertinente que pour un bâtiment existant aux caractéristiques d'époque. \textbf{Limites} : plan générique (gabarit du module, pas les plans d'exécution), prix composites dérivés de prix publiés RSMeans localisés (pas des soumissions); précision attendue $\pm$ 5 à 10~\% sur les directs.
31 31 \end{solution}
32 32 \begin{notescorrection}
33 33 Méthode par composantes motivée par les données : 3 pts; trois autres méthodes situées : 2 pts; remplacement par définition (1) et deux limites (2).
34 34 \end{notescorrection}
35 35 \end{questionexam}
36 36
37 −\begin{questionexam}{Du plan au relevé : sept grandeurs}{8}
37 +\begin{questionexam}{Du plan au relevé : cinq grandeurs}{6}
38 38 \begin{solution}
39 39 \begin{center}
40 40 \footnotesize
@@ -46,37 +46,35 @@ Méthode par composantes motivée par les données : 3 pts; trois autres méthod
46 46 2 & Périmètre $=2(18{,}30+10{,}40)$ & 57,40 m & 57,40 & 0,00 \% \\
47 47 3 & Murs de fondation $=57{,}40\times2{,}44$ & 140,06 m\up{2} & 140,06 & 0,00 \% \\
48 48 4 & Murs extérieurs bruts $=57{,}40\times2{,}44\times2$ & 280,11 m\up{2} & 280,11 & 0,00 \% \\
49 −5 & Murs extérieurs nets $=280{,}11-63{,}36$ & 216,75 m\up{2} & 216,75 & 0,00 \% \\
50 −6 & Toit $=199{,}02\times1{,}00\times1{,}10$ & 218,92 m\up{2} & 218,92 & 0,00 \% \\
51 −7 & Planchers portés $=176{,}40+176{,}40$ & 352,80 m\up{2} & 352,81 & 0,00 \% \\
49 +5 & Toit $=199{,}02\times1{,}00\times1{,}10$ & 218,92 m\up{2} & 218,92 & 0,00 \% \\
52 50 \bottomrule
53 51 \end{tabular}
54 52 \end{center}
55 −Formules dans \texttt{Relevé!F16:F22}, écarts \texttt{=F16/G16-1} en H. Les sept écarts sont nuls (arrondis au centième près) : la lecture du plan est cohérente avec le relevé automatique, et ces grandeurs sont les quantités des composantes 3, 5 à 10 du tableau 4.
53 +Formules dans \texttt{Relevé!F16:F20} (toutes liées à \texttt{Données!D9:D19}), écarts \texttt{=F16/G16-1} en H. Les cinq écarts sont nuls (arrondis au centième près) : la lecture du plan est cohérente avec le relevé automatique; ces grandeurs sont les quantités des composantes 3 (murs de fondation), 4 (dalle $=$ empreinte) et 7 (toit) du tableau 4, et les murs bruts entrent dans l'ossature (composante 6 : $280{,}11 + 292{,}32$ de cloisons $= 572{,}42$~m\up{2}). Pour mémoire (plus demandés) : murs nets $280{,}11 - 63{,}36 = 216{,}75$~m\up{2} (base de la brique à 80~\% $=$ 173,40 et du vinyle à 20~\% $=$ 43,35), planchers portés $2 \times 176{,}40 = 352{,}80$~m\up{2}.
56 54 \end{solution}
57 55 \begin{notescorrection}
58 −6 pts pour les sept formules (liées à Données); 2 pts pour les écarts et, le cas échéant, la correction d'une anomalie. Erreur fréquente : prendre 18,30 $\times$ 10,40 $=$ 190,32 m\up{2} comme empreinte (dimensions à l'axe) --- écart $-4{,}4$~\% signalé par la mise en forme.
56 +4 pts pour les cinq formules (liées à Données : une constante tapée, p.~ex. 57,4, vaut la moitié); 2 pts pour les écarts et, le cas échéant, la correction d'une anomalie. Erreur fréquente : prendre 18,30 $\times$ 10,40 $=$ 190,32 m\up{2} comme empreinte (dimensions à l'axe) --- écart $-4{,}4$~\% signalé par la mise en forme.
59 57 \end{notescorrection}
60 58 \end{questionexam}
61 59
62 −\begin{questionexam}{Bordereau des 22 composantes}{12}
60 +\begin{questionexam}{Bordereau des 22 composantes}{10}
63 61 \begin{solution}
64 −Formules de la ligne 27 copiées vers le bas : \texttt{K27 =H27+I27+J27}, \texttt{L27 =F27*K27}. Exemples : excavation $651{,}77$~m\up{3} $\times$ 7,52~\$ $=$ 4\,901,31~\$; toiture complète $218{,}92$~m\up{2} $\times$ 89,90~\$ $=$ 19\,680,91~\$; brique $173{,}40$~m\up{2} $\times$ 447,13~\$ $=$ \textbf{77\,532,34~\$}; cuisines $4 \times 13\,746{,}22 = 54\,984{,}88$~\$.\\
65 −\textbf{Total direct nu} \texttt{L49} $=$ \textbf{471\,100,03~\$} (révision r1 : 471\,085,04; écart de 15~\$ d'arrondi des prix composites). Matériaux 335\,692,60~\$; main-d'œuvre 129\,011,05~\$; équipement 6\,396,38~\$; \textbf{part de la main-d'œuvre 27,4~\%}.\\
66 −Sous-totaux par division (\texttt{=SOMME.SI(\$C\$27:\$C\$48;B58;\$L\$27:\$L\$48)}) : 03 béton (fondations, sous-sol) 48\,704 (10,3~\%); 06 bois 38\,027 (8,1~\%); \textbf{07 enveloppe et toiture 107\,365 (22,8~\%)}; 08 ouvertures 43\,545 (9,2~\%); 09 finitions 78\,658 (16,7~\%); 11 cuisines 54\,985 (11,7~\%); 22 plomberie 42\,788 (9,1~\%); 23 CVCA 13\,912; 26 électricité 27\,346 (5,8~\%); 31 terrassement 4\,901; 32 extérieur 2\,736; 33 services 8\,133 --- tous à moins de 25~\$ du tableau 5 (colonne H « ✓ »).\\
67 −Trois composantes les plus lourdes (\texttt{=GRANDE.VALEUR(\$L\$27:\$L\$48;1)} puis \texttt{INDEX/EQUIV}) : \textbf{revêtement de brique 77\,532~\$}, \textbf{cuisines 54\,985~\$}, \textbf{planchers finis 35\,680~\$} --- 36~\% du direct nu à elles trois.
62 +Une seule formule, \texttt{I27 =F27*H27}, copiée vers le bas. Exemples : excavation $651{,}77$~m\up{3} $\times$ 7,52~\$ $=$ 4\,901,31~\$; toiture complète $218{,}92$~m\up{2} $\times$ 89,90~\$ $=$ 19\,680,91~\$; brique $173{,}40$~m\up{2} $\times$ 447,13~\$ $=$ \textbf{77\,532,34~\$}; cuisines $4 \times 13\,746{,}22 = 54\,984{,}88$~\$.\\
63 +\textbf{Total direct nu} \texttt{I49} $=$ \textbf{471\,100,03~\$} (révision r1 : 471\,085,04; écart de 15~\$ d'arrondi des prix unitaires). Pour mémoire (information retirée du gabarit) : matériaux 335\,693~\$, main-d'œuvre 129\,011~\$ (27,4~\%), équipement 6\,396~\$.\\
64 +Sous-totaux par division (\texttt{=SOMME.SI(\$C\$27:\$C\$48;B53;\$I\$27:\$I\$48)}, lignes 53 à 64) : 03 béton (fondations, sous-sol) 48\,704 (10,3~\%); 06 bois 38\,027 (8,1~\%); \textbf{07 enveloppe et toiture 107\,365 (22,8~\%)}; 08 ouvertures 43\,545 (9,2~\%); 09 finitions 78\,658 (16,7~\%); 11 cuisines 54\,985 (11,7~\%); 22 plomberie 42\,788 (9,1~\%); 23 CVCA 13\,912; 26 électricité 27\,346 (5,8~\%); 31 terrassement 4\,901; 32 extérieur 2\,736; 33 services 8\,133 --- tous à moins de 25~\$ du tableau 5 (colonne H « ✓ »); total des divisions \texttt{E65} $=$ \texttt{I49}.\\
65 +Trois composantes les plus lourdes (\texttt{E68 =GRANDE.VALEUR(\$I\$27:\$I\$48;B68)}, nom \texttt{C68 =INDEX(\$D\$27:\$D\$48;EQUIV(E68;\$I\$27:\$I\$48;0))} ou recopié) : \textbf{revêtement de brique 77\,532~\$}, \textbf{cuisines 54\,985~\$}, \textbf{planchers finis 35\,680~\$} --- 35,7~\% du direct nu à elles trois.
68 66 \end{solution}
69 67 \begin{notescorrection}
70 −Coût unitaire et montant par formule (4; une valeur tapée $=$ 1); total et ventilation matériaux / MO / équipement par SOMMEPROD (3); sous-totaux SOMME.SI (3; codes « 03 » en texte : un EQUIV numérique échoue); trois composantes (2).
68 +Montants par formule copiée (3; valeurs tapées $=$ 1); total nu et contrôle r1 (2); sous-totaux SOMME.SI (3; codes « 03 » en texte : un critère numérique renvoie 0); trois composantes (2 --- le nom recopié à la main n'est pas pénalisé, seul le montant par GRANDE.VALEUR compte).
71 69 \end{notescorrection}
72 70 \end{questionexam}
73 71
74 −\begin{questionexam}{Des coûts nus aux coûts directs du cours}{8}
72 +\begin{questionexam}{Des coûts nus aux coûts directs du cours}{10}
75 73 \begin{solution}
76 74 a) Localisés $= 471\,100{,}03 + 255{,}83 = \mathbf{471\,355{,}86}$~\$. b) Conditions générales $8~\% = 37\,708{,}47$. c) Frais généraux $7~\% \times (471\,355{,}86 + 37\,708{,}47) = 35\,634{,}50$. d) Profit de l'entrepreneur $8~\% \times 544\,698{,}83 = 43\,575{,}91$. e) \textbf{Coûts directs au sens du cours} $= \mathbf{588\,274{,}74}$~\$. f) Contingences $5~\% \times 471\,355{,}86 = 23\,567{,}79$. g) \textbf{Directs $+$ contingences} $= \mathbf{611\,842{,}53}$~\$ --- la révision r1 donne 611\,823,07~\$ (écart $+19$~\$, \texttt{D16} « ✓ »). Les majorations de l'entrepreneur ajoutent 24,8~\% aux coûts nus.
77 75 \end{solution}
78 76 \begin{notescorrection}
79 −Ordre respecté (cumuls) : 5 pts --- appliquer 8 + 7 + 8 $=$ 23~\% sur la même base (580\,000~\$) vaut 3/5; e, f et contrôle : 3 pts. Contingences sur les directs du cours (29\,414~\$) : $-1$.
77 +Ordre respecté (cumuls) et taux lus dans Données : 6 pts --- appliquer 8 + 7 + 8 $=$ 23~\% sur la même base ($471\,356 \times 1{,}23 = 579\,768$~\$, soit 8\,507~\$ de moins) vaut 3/6; taux retapés (0,08) au lieu de liés : $-1$; e, f et contrôle r1 : 4 pts. Contingences sur les directs du cours (29\,414~\$) : $-1$.
80 78 \end{notescorrection}
81 79 \end{questionexam}
82 80
@@ -146,12 +144,12 @@ a : 5 pts (terrain indexé 1, bâtiment implicite 1, \$/m\up{2} et \$/logement 1
146 144 \end{notescorrection}
147 145 \end{questionexam}
148 146
149 −\begin{questionexam}{Tableau de bord et note au promoteur}{14}
147 +\begin{questionexam}{Tableau de bord et note au promoteur}{16}
150 148 \begin{solution}
151 −KPI : indirects 72\,078~\$ (\texttt{=SIERREUR(Bordereau!C32;"—")}), profit 75\,231~\$, 177,19~\$/pi\up{2}, écart marché $-12{,}4$~\%. Verdict : \textbf{« Coût sous la valeur de marché --- projet viable (marge $>$ 11~\%) »}. Troisième graphique de référence : matériaux / main-d'œuvre / équipement (335\,693 / 129\,011 / 6\,396~\$). Note au promoteur (éléments attendus) : coût total 759\,152~\$, 177~\$/pi\up{2} hors sol, 200~\$/pi\up{2} chauffé, 189\,788~\$/logement, indirects $+$ profit $=$ 19,4~\% du total; postes sensibles : brique (77\,532~\$, 16,5~\% du direct nu), cuisines (54\,985), planchers finis (35\,680), enveloppe et toiture 22,8~\%, main-d'œuvre 27,4~\%; \textbf{retard de 6 mois} : $I = 611\,843 \times 6{,}75~\% \times \tfrac{18}{12} \times \tfrac{1}{2} = 30\,975$~\$, soit $\mathbf{+10\,325}$~\$ ($+50$~\% du poste), et $\approx +11\,460$~\$ sur le coût total une fois le profit de 11~\% appliqué ($\approx$ 770\,612~\$, $+1{,}5$~\%); marché, moteur et Altus comme à la question 9; conventions déclarées (profit sur directs $+$ contingences $+$ indirects; contingences 5~\% des nus; taxes de 113\,683~\$ exclues); limites (plan générique, prix RSMeans, comparables au rez-de-jardin, terrain indexé, annonces; aucune provision pour stationnements, paysagement, balcons et escaliers extérieurs).
149 +KPI : indirects 72\,078~\$ (\texttt{=SIERREUR(Bordereau!C32;"—")}), profit 75\,231~\$, 177,19~\$/pi\up{2}, écart marché $-12{,}4$~\%. Verdict : \textbf{« Coût sous la valeur de marché --- projet viable (marge $>$ 11~\%) »}. Troisième graphique de référence : sensibilité du coût total à la durée du chantier --- 6 mois 747\,691~\$, 12 mois 759\,152~\$, 18 mois 770\,612~\$, 24 mois 782\,073~\$ (intercalaires recalculés, profit de 11~\% appliqué; table Dashboard!M27:O31 du solutionnaire Excel) : chaque semestre de retard coûte $\approx$ 11\,460~\$. Note au promoteur (éléments attendus) : coût total 759\,152~\$, 177~\$/pi\up{2} hors sol, 200~\$/pi\up{2} chauffé, 189\,788~\$/logement, indirects $+$ profit $=$ 19,4~\% du total; postes sensibles : brique (77\,532~\$, 16,5~\% du direct nu --- à 447~\$/m\up{2} posé, passer au vinyle sur 100~\% des murs économiserait $\approx$ 70\,000~\$ de direct nu), cuisines (54\,985), planchers finis (35\,680), enveloppe et toiture 22,8~\%; \textbf{retard de 6 mois} : $I = 611\,843 \times 6{,}75~\% \times \tfrac{18}{12} \times \tfrac{1}{2} = 30\,975$~\$, soit $\mathbf{+10\,325}$~\$ ($+50$~\% du poste), et $\approx +11\,460$~\$ sur le coût total une fois le profit de 11~\% appliqué ($\approx$ 770\,612~\$, $+1{,}5$~\%); marché, moteur et Altus comme à la question 9; conventions déclarées (profit sur directs $+$ contingences $+$ indirects; contingences 5~\% des nus; taxes de 113\,683~\$ exclues); limites (plan générique, prix RSMeans, comparables au rez-de-jardin, terrain indexé, annonces; aucune provision pour stationnements, paysagement, balcons et escaliers extérieurs).
152 150 \end{solution}
153 151 \begin{notescorrection}
154 −KPI : 4 pts; verdict cohérent : 2; 3\up{e} graphique titré : 2; note : 6 (retard chiffré 2, cellules citées 1, conventions et limites 3).
152 +KPI : 4 pts; verdict cohérent : 2; 3\up{e} graphique titré et étiqueté : 2; note : 8 (retard chiffré 2, cellules citées 1, conventions et limites 3, conclusion et viabilité 2).
155 153 \end{notescorrection}
156 154 \end{questionexam}
157 155
modified IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/solutionnaire_enseignant/IMM1033-20_TP2_solutionnaire.xlsx +0 −0

Binary file not shown.

modified IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/build_tp2_donnees.py +9 −11
@@ -79,20 +79,20 @@ spec = cas["project"]["spec"]
79 79
80 80 # --- Composantes (version allégée du 2026-10-29 soir) : 22 postes à prix composites nus en unités SI, dérivés des 64 lignes ---
81 81 COMP_DEF = [ # (division, composante, détail, quantité, unité, [numéros de lignes])
82 − ("31", "Excavation, remblai et drain français", "excavation en masse, remblai, drain de fondation perforé", 651.77, "m³ excavé", [1, 2, 3]),
82 + ("31", "Excavation, remblai et drain français", "excavation en masse, remblai, drain de fondation perforé", 651.77, "m³", [1, 2, 3]),
83 83 ("33", "Branchements des services", "aqueduc, égout et électricité (catalogue UQO Éval)", 1, "forfait", [4]),
84 − ("03", "Fondations : semelles, murs coffrés et membrane", "semelle filante 24 × 12 po, mur de béton 8 po, enduit d'imperméabilisation", 140.06, "m² de mur de fondation", [5, 6, 7]),
84 + ("03", "Fondations : semelles, murs coffrés et membrane", "semelle filante 24 × 12 po, mur de béton 8 po, enduit d'imperméabilisation", 140.06, "m² de mur", [5, 6, 7]),
85 85 ("03", "Sous-sol : dalle, isolation XPS et fenêtres", "dalle 4 po, XPS 2 po deux couches, 3 fenêtres utilitaires", 199.02, "m² de dalle", [8, 9, 23]),
86 − ("06", "Planchers portés", "solives en I 24 po c/c et sous-plancher OSB ¾ po", 352.81, "m² de plancher", [10, 11]),
87 − ("06", "Ossature de bois", "murs extérieurs 2 × 6 + contreplaqué ½ po, cloisons 2 × 4, poutre LVL, colonnes", 572.42, "m² de mur (ext. brut + cloisons)", [12, 13, 14, 15, 16]),
88 − ("07", "Toiture complète", "fermes, support CDX ½ po, membrane APP 2 couches, soffites, gouttières et descentes", 218.92, "m² de toit", [17, 18, 26, 27, 28, 29]),
89 − ("07", "Isolation des murs extérieurs R-24 et du comble R-50", "matelas R-21 (≈ R-24) + cellulose soufflée", 415.77, "m² isolé (murs nets + comble)", [21, 22]),
86 + ("06", "Planchers portés", "solives en I 24 po c/c et sous-plancher OSB 3/4 po", 352.81, "m² de plancher", [10, 11]),
87 + ("06", "Ossature de bois", "murs extérieurs 2 × 6 + contreplaqué 1/2 po, cloisons 2 × 4, poutre LVL, colonnes", 572.42, "m² de mur", [12, 13, 14, 15, 16]),
88 + ("07", "Toiture complète", "fermes, support CDX 1/2 po, membrane APP 2 couches, soffites, gouttières et descentes", 218.92, "m² de toit", [17, 18, 26, 27, 28, 29]),
89 + ("07", "Isolation des murs extérieurs R-24 et du comble R-50", "matelas R-21 (≈ R-24) + cellulose soufflée", 415.77, "m² isolé", [21, 22]),
90 90 ("07", "Revêtement de brique (80 %)", "placage de brique standard, appareil courant", 173.40, "m² de mur net", [24]),
91 91 ("07", "Revêtement de vinyle (20 %)", "revêtement de vinyle double 5 po", 43.35, "m² de mur net", [25]),
92 − ("08", "Fenêtres", "fenêtre de vinyle à guillotine 3 × 4½ pi avec moustiquaire", 24, "unité", [30]),
92 + ("08", "Fenêtres", "fenêtre de vinyle à guillotine 3 × 4,5 pi avec moustiquaire", 24, "unité", [30]),
93 93 ("08", "Portes extérieures et portes-patio", "4 portes d'acier isolées + 4 portes-patio coulissantes 6 pi", 8, "unité", [31, 32]),
94 94 ("08", "Portes intérieures et de garde-robe", "16 portes prémontées à âme creuse + 11 portes pliantes", 27, "unité", [33, 34]),
95 − ("09", "Gypse et peinture", "gypse ½ po murs, ⅝ po plafonds, peinture latex 2 couches", 1154.19, "m² de gypse", [35, 36, 37]),
95 + ("09", "Gypse et peinture", "gypse 1/2 po murs, 5/8 po plafonds, peinture latex 2 couches", 1154.19, "m² de gypse", [35, 36, 37]),
96 96 ("09", "Planchers finis", "bois franc préverni (60 %), céramique (25 %), vinyle de luxe (15 %)", 352.81, "m² de plancher", [38, 39, 40]),
97 97 ("09", "Escaliers, rampes, plinthes et tablettes", "2 escaliers préfabriqués, mains courantes, plinthe ogee, tablettes de pin", 1, "forfait", [19, 20, 41, 42]),
98 98 ("11", "Cuisines", "armoires, comptoirs stratifiés, éviers avec robinet", 4, "logement", [43, 44, 45]),
@@ -118,16 +118,14 @@ assert abs(sum(c["direct_r1"] for c in composantes) - t["direct"]) < 0.5
118 118 by_wbs_comp = {}
119 119 for c in composantes:
120 120 by_wbs_comp[c["wbs"]] = round(by_wbs_comp.get(c["wbs"], 0) + c["direct_r1"], 2)
121 −# --- Relevé abrégé : 7 grandeurs du relevé reproduites par les étudiants (question 2) ---
121 +# --- Relevé abrégé : 5 grandeurs du relevé reproduites par les étudiants (question 2) — version allégée du 2026-10-30 ---
122 122 REL_N = {m["nom"]: m for m in mes}
123 123 GRANDEURS = [
124 124 ("Empreinte du bâtiment (m²) = (L + ép.) × (P + ép.)", "(18,30 + 0,30) × (10,40 + 0,30)", "Dalle de sous-sol 100 mm", "=(Données!D11+Données!D13)*(Données!D12+Données!D13)"),
125 125 ("Périmètre des murs à l'axe (m) = 2 × (L + P)", "2 × (18,30 + 10,40)", "Semelles filantes", "=2*(Données!D11+Données!D12)"),
126 126 ("Murs de fondation (m²) = périmètre × hauteur du mur", "57,4 × 2,44", "Murs de fondation (h 2.44 m)", "=F17*Données!D15"),
127 127 ("Murs extérieurs bruts (m²) = périmètre × hauteur d'étage × niveaux", "57,4 × 2,44 × 2", "Murs extérieurs ossature 2×6", "=F17*Données!D14*Données!D10"),
128 − ("Murs extérieurs nets (m²) = bruts − ouvertures hors sol", "280,11 − 63,36", "Isolation des murs extérieurs R-24", "=F19-E12"),
129 128 ("Surface de toit (m²) = empreinte × facteur de pente × débords", "199,02 × 1,00 × 1,10", "Couverture", "=F16*Données!D18*Données!D19"),
130 − ("Planchers portés (m²) = Σ aires des pièces hors sol", "176,40 + 176,40", "Planchers portés (solives)", "=G12"),
131 129 ]
132 130 grandeurs = [{"libelle": a, "indice": b, "releve_nom": c, "releve_valeur": REL_N[c]["valeur"], "releve_unite": REL_N[c]["unite"], "formule": d} for a, b, c, d in GRANDEURS]
133 131
modified IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/make_IMM1033_TP2.py +56 −60
@@ -3,10 +3,10 @@
3 3
4 4 Toutes les données proviennent de www.uqo-eval.app (extraction du 29 octobre 2026) : cas d'étude « Cas 9 — Quadruplex 2 étages,
5 5 Gatineau » du module Quantity Survey (plans, relevé des quantités, révision r1 tarifée RSMeans 2026 T4 localisée Gatineau, condensée
6 −en 22 composantes à prix composites nus), huit ventes réelles de quadruplex neufs, deux annonces, estimation du moteur de coût. Voir tp2_donnees.py.
6 +en 22 composantes à UN prix unitaire nu — version allégée du 2026-10-30), huit ventes réelles de quadruplex neufs, deux annonces, estimation du moteur de coût. Voir tp2_donnees.py.
7 7
8 8 Zones de réponse (identiques à l'énoncé LaTeX) :
9 − Relevé Q1 : C5 | Q2 : F16:F22 · H16:H22 | Q3 : K27:L48 · L49 · E51:E54 · E58:F69 · C72:C74 · E72:E74
9 + Relevé Q1 : C5 | Q2 : F16:F20 · H16:H20 | Q3 : I27:I48 · I49 · E53:F64 · C68:C70 · E68:E70
10 10 Bordereau Q4 : C9:C15 | Q5 : C19:C20 | Q6 : C23:C24 · C25 | Q7 : C29:C30 · C32:C33 | Q8 : C36:C43 · C44
11 11 Marché Q9 : J6:N13 · K14:N14 · K18 · K20:K22 · C25
12 12 Dashboard Q10 : KPI D6:G6 (4 jaunes) · C8 · graphique 3 · onglet Note
@@ -183,26 +183,26 @@ rep(ws, "D6"); rep(ws, "D7"); rep(ws, "D8", hint="ex. : Éva (UQO Éval) pour co
183 183 titre_section(ws, 10, 2, "Parcours du travail — progression mise à jour automatiquement", 7)
184 184 entetes(ws, 11, 2, ["", "Question", "Onglet (cliquer)", "Points", "Zone principale", "Statut", "Repère de correction"])
185 185 NC = len(COMPOSANTES)
186 +NG = len(GRANDEURS) # 5 grandeurs (16..20)
186 187 R_C0, R_C1 = 27, 27 + NC - 1 # 27..48
187 188 R_CT = R_C1 + 1 # 49 total
188 −R_MAT = R_CT + 2 # 51..54
189 −R_DH = R_MAT + 6 # 57 entête divisions
190 −R_D0, R_D1 = R_DH + 1, R_DH + 12 # 58..69 (12 divisions : 05 fusionnée dans 06)
191 −R_TOP = R_D1 + 3 # 73..75
189 +R_DH = R_CT + 3 # 52 entête divisions
190 +R_D0, R_D1 = R_DH + 1, R_DH + 12 # 53..64 (12 divisions : 05 fusionnée dans 06)
191 +R_TOP = R_D1 + 4 # 68..70 (entête 67)
192 192 parcours = [
193 193 ("1", "Méthode d'estimation et nature du coût", "Relevé", 8, "C5", None, "Relevé abrégé / composantes ; remplacement par définition"),
194 − ("2", "Du plan au relevé : sept grandeurs", "Relevé", 8, "F16:F22 · H16:H22", "COUNTBLANK(Relevé!F16:F22)+COUNTBLANK(Relevé!H16:H22)", 14, "Écarts ≈ 0 % avec le relevé UQO Éval"),
195 − ("3", "Bordereau des 22 composantes (prix composites nus)", "Relevé", 12, f"K{R_C0}:L{R_C1} · L{R_CT} · E{R_MAT}:E{R_MAT + 3} · E{R_D0}:F{R_D1} · C{R_TOP}:E{R_TOP + 2}",
196 − f"COUNTBLANK(Relevé!K{R_C0}:L{R_C1})+COUNTBLANK(Relevé!L{R_CT})+COUNTBLANK(Relevé!E{R_MAT}:E{R_MAT + 3})+COUNTBLANK(Relevé!E{R_D0}:F{R_D1})+COUNTBLANK(Relevé!C{R_TOP}:C{R_TOP + 2})+COUNTBLANK(Relevé!E{R_TOP}:E{R_TOP + 2})",
197 − 2 * NC + 1 + 4 + 2 * 12 + 6, "Direct nu ≈ 471 085 $ ; brique = poste le plus lourd"),
198 − ("4", "Des coûts nus aux coûts directs du cours", "Bordereau", 8, "C9:C15", "COUNTBLANK(Bordereau!C9:C15)", 7, "Retrouver le total de la révision r1 (611 823 $)"),
194 + ("2", "Du plan au relevé : cinq grandeurs", "Relevé", 6, f"F16:F{15 + NG} · H16:H{15 + NG}", f"COUNTBLANK(Relevé!F16:F{15 + NG})+COUNTBLANK(Relevé!H16:H{15 + NG})", 2 * NG, "Écarts ≈ 0 % avec le relevé UQO Éval"),
195 + ("3", "Bordereau des 22 composantes (prix unitaires nus)", "Relevé", 10, f"I{R_C0}:I{R_C1} · I{R_CT} · E{R_D0}:F{R_D1} · C{R_TOP}:E{R_TOP + 2}",
196 + f"COUNTBLANK(Relevé!I{R_C0}:I{R_C1})+COUNTBLANK(Relevé!I{R_CT})+COUNTBLANK(Relevé!E{R_D0}:F{R_D1})+COUNTBLANK(Relevé!C{R_TOP}:C{R_TOP + 2})+COUNTBLANK(Relevé!E{R_TOP}:E{R_TOP + 2})",
197 + NC + 1 + 2 * 12 + 6, "Direct nu ≈ 471 085 $ ; brique = poste le plus lourd"),
198 + ("4", "Des coûts nus aux coûts directs du cours", "Bordereau", 10, "C9:C15", "COUNTBLANK(Bordereau!C9:C15)", 7, "Retrouver le total de la révision r1 (611 823 $)"),
199 199 ("5", "Permis réel de Gatineau et garantie GCR", "Bordereau", 8, "C19:C20", "COUNTBLANK(Bordereau!C19:C20)", 2, "MAX fonctionnel ; 4 unités"),
200 200 ("6", "Intérêts intercalaires", "Bordereau", 10, "C23:C24 · C25", "COUNTBLANK(Bordereau!C23:C24)", 2, "Taux composé ; facteur ½"),
201 201 ("7", "Autres indirects et total", "Bordereau", 8, "C29:C30 · C32:C33", "COUNTBLANK(Bordereau!C29:C30)+COUNTBLANK(Bordereau!C32:C33)", 4, "Honoraires sur les directs du cours"),
202 202 ("8", "Profit entrepreneurial, coût total, unités de comparaison", "Bordereau", 10, "C36:C43 · C44", "COUNTBLANK(Bordereau!C36:C43)", 8, "Assiette = directs + cont. + indirects"),
203 203 ("9", "Validation par le marché (8 ventes réelles), le moteur UQO Éval et Altus", "Marché", 14, f"J6:N{5 + NV} · K{6 + NV}:N{6 + NV} · K{NV + 10} · K{NV + 12}:K{NV + 14} · C{NV + 17}",
204 204 f"COUNTBLANK(Marché!J6:N{5 + NV})+COUNTBLANK(Marché!K{6 + NV}:N{6 + NV})+COUNTBLANK(Marché!K{NV + 10})+COUNTBLANK(Marché!K{NV + 12}:K{NV + 14})", 5 * NV + 4 + 4, "Terrain indexé ; profit extrait ; limites"),
205 − ("10", "Tableau de bord et note au promoteur", "Dashboard", 14, "KPI D6:G6 · C8 · graphique 3 · onglet Note", "COUNTBLANK(Dashboard!D6:G6)+COUNTBLANK(Dashboard!C8)", 5, "KPI par formule ; retard de 6 mois chiffré"),
205 + ("10", "Tableau de bord et note au promoteur", "Dashboard", 16, "KPI D6:G6 · C8 · graphique 3 · onglet Note", "COUNTBLANK(Dashboard!D6:G6)+COUNTBLANK(Dashboard!C8)", 5, "KPI par formule ; retard de 6 mois chiffré"),
206 206 ]
207 207 for i, row in enumerate(parcours):
208 208 no, q, feuille, pts, zone_txt, cb, *rest = row
@@ -237,9 +237,9 @@ note(ws, 23, 3, "Le statut passe à « ◐ En cours » dès qu'une cellule de la
237 237 titre_section(ws, 25, 2, "Mode d'emploi du classeur", 7)
238 238 instructions = [
239 239 "1. Lisez l'énoncé PDF au complet. Toutes les données du classeur sont RÉELLES et proviennent de www.uqo-eval.app (extraction du 29 octobre 2026) : cas d'étude « Cas 9 — Quadruplex 2 étages, Gatineau » du module Quantity Survey, prix RSMeans 2026 T4, ventes du Registre foncier, moteur de coût.",
240 − "2. Onglet Données : le projet (dimensions du plan), les plans par niveau, le relevé abrégé d'UQO Éval, les 22 composantes du bordereau (quantité, unité, prix composites nus matériaux / main-d'œuvre / équipement), les paramètres du moteur, les paramètres réels des indirects, 8 ventes de quadruplex neufs, le moteur de coût. NE RIEN MODIFIER.",
240 + "2. Onglet Données : le projet (dimensions du plan), les plans par niveau, le relevé abrégé d'UQO Éval, les 22 composantes du bordereau (quantité, unité, prix unitaire nu), les majorations du moteur, les paramètres réels des indirects, 8 ventes de quadruplex neufs, le moteur de coût. NE RIEN MODIFIER.",
241 241 "3. Répondez PAR FORMULE dans les cellules jaunes (bordure dorée). Les cellules grises se calculent seules. Le triangle rouge des cellules clés cache un commentaire d'aide avec la formule attendue sur la première ligne.",
242 − "4. Onglet Relevé : questions 1 à 3 — du plan aux quantités (7 grandeurs à reproduire), puis le bordereau des 22 composantes (coût unitaire, montant, sous-totaux par division, postes les plus lourds).",
242 + "4. Onglet Relevé : questions 1 à 3 — du plan aux quantités (5 grandeurs à reproduire), puis le bordereau des 22 composantes (montant = quantité × prix unitaire nu, total, sous-totaux par division, trois postes les plus lourds).",
243 243 "5. Onglet Bordereau : questions 4 à 8 — coûts directs au sens du cours, contingences, permis réel, GCR, intercalaires, honoraires, assurance, profit entrepreneurial, coût total, $/pi², $/logement.",
244 244 "6. Onglet Marché : question 9 — valeur implicite du bâtiment sur 8 ventes réelles de quadruplex neufs, comparaison au moteur de coût d'UQO Éval et à Altus, profit extrait du marché.",
245 245 "7. Onglet Dashboard + onglet Note : KPI par formule, verdict, graphiques, note au promoteur (à exporter aussi en PDF). Remise Moodle : ce fichier renommé TP2_VotreCodePermanent.xlsx + le PDF de la note.",
@@ -302,7 +302,7 @@ bandes(ws, 31, 3, 2, 12)
302 302 note(ws, 34, 2, "Sous-sol : ligne 31 · Rez-de-chaussée : ligne 32 · Étage : ligne 33. Les aires de murs extérieurs sont mesurées à l'axe (périmètre × 2,44 m) ; l'aire nette déduit les ouvertures. Plans dans l'énoncé (figures 2 et 3) et sur la fiche du cas.", 12)
303 303 R_T2 = {"ss": 31, "rdc": 32, "et": 33}
304 304
305 −titre_section(ws, 36, 2, "Tableau 3 — Relevé abrégé d'UQO Éval : les sept grandeurs que vous reproduirez à la question 2 (valeurs de la plateforme, metre-qs-1.0)", 14)
305 +titre_section(ws, 36, 2, "Tableau 3 — Relevé abrégé d'UQO Éval : les cinq grandeurs que vous reproduirez à la question 2 (valeurs de la plateforme, metre-qs-1.0)", 14)
306 306 entetes(ws, 37, 2, ["No", "Grandeur (relevé UQO Éval)", "", "Formule du relevé", "Valeur UQO Éval", "Unité"])
307 307 ws.merge_cells("C37:D37")
308 308 R_T3 = 38
@@ -317,18 +317,19 @@ r_fin_t3 = R_T3 + len(GRANDEURS)
317 317 note(ws, r_fin_t3, 2, "Le relevé complet (49 mesures) et les 64 lignes RSMeans de la révision r1 restent consultables sur la fiche du cas (UQO Éval) ; le TP travaille avec les 22 composantes du tableau 4.", 12)
318 318
319 319 r0 = r_fin_t3 + 2
320 −titre_section(ws, r0, 2, "Tableau 4 — Le bordereau en 22 composantes : quantités du relevé (unités SI) et PRIX COMPOSITES NUS par unité (matériaux, main-d'œuvre, équipement) dérivés des lignes RSMeans 2026 T4 localisées Gatineau (C57)", 15)
321 −entetes(ws, r0 + 1, 2, ["No", "Div.", "Composante", "Ce qu'elle comprend", "Quantité (relevé)", "Unité", "Matériaux ($/u)", "Main-d'œuvre ($/u)", "Équipement ($/u)", "Lignes RSMeans sources"])
320 +titre_section(ws, r0, 2, "Tableau 4 — Le bordereau en 22 composantes : quantité du relevé (unités SI) et PRIX UNITAIRE NU (matériaux + main-d'œuvre + équipement) dérivé des lignes RSMeans 2026 T4 localisées Gatineau (C57)", 15)
321 +entetes(ws, r0 + 1, 2, ["No", "Div.", "Composante", "Ce qu'elle comprend", "Quantité (relevé)", "Unité", "Prix unitaire nu ($/u)", "Lignes RSMeans sources"])
322 +ws.merge_cells(start_row=r0 + 1, start_column=9, end_row=r0 + 1, end_column=14)
322 323 R_T4 = r0 + 2
323 324 for i, L in enumerate(COMPOSANTES):
324 325 rr = R_T4 + i
325 326 donnee(ws, rr, 2, L["no"]); donnee(ws, rr, 3, L["wbs"]); donnee(ws, rr, 4, L["nom"], left=True); donnee(ws, rr, 5, L["detail"], left=True)
326 − donnee(ws, rr, 6, L["qte"], "#,##0.00"); donnee(ws, rr, 7, L["unite"], left=True); donnee(ws, rr, 8, L["mat"], FMT_N2); donnee(ws, rr, 9, L["mo"], FMT_N2); donnee(ws, rr, 10, L["eq"], FMT_N2)
327 − ws.merge_cells(start_row=rr, start_column=11, end_row=rr, end_column=14); donnee(ws, rr, 11, L["lignes"], left=True)
327 + donnee(ws, rr, 6, L["qte"], "#,##0.00"); donnee(ws, rr, 7, L["unite"], left=True); donnee(ws, rr, 8, L["direct_u"], FMT_N2)
328 + ws.merge_cells(start_row=rr, start_column=9, end_row=rr, end_column=14); donnee(ws, rr, 9, L["lignes"], left=True)
328 329 ws.row_dimensions[rr].height = 30
329 330 bandes(ws, R_T4, NC, 2, 13)
330 331 r_fin_t4 = R_T4 + NC
331 −note(ws, r_fin_t4, 2, "Prix NUS (bare costs) : matériaux + main-d'œuvre + équipement, hors conditions générales, frais généraux et profit de l'entrepreneur (appliqués à l'onglet Bordereau). Un prix composite = somme des lignes RSMeans de la composante ÷ quantité de référence (p. ex. la toiture complète en $/m² de toit comprend fermes, support, membrane, soffites et gouttières). Trois postes viennent du catalogue de prix observés d'UQO Éval (branchements, drainage, VRC).", 14)
332 +note(ws, r_fin_t4, 2, "Prix NU (bare cost) : matériaux + main-d'œuvre + équipement par unité, hors conditions générales, frais généraux et profit de l'entrepreneur (appliqués à l'onglet Bordereau). Un prix unitaire composite = somme des lignes RSMeans de la composante ÷ quantité de référence (p. ex. la toiture complète en $/m² de toit comprend fermes, support, membrane, soffites et gouttières). Trois postes viennent du catalogue de prix observés d'UQO Éval (branchements, drainage, VRC).", 14)
332 333
333 334 r0 = r_fin_t4 + 2
334 335 titre_section(ws, r0, 2, "Tableau 5 — Divisions MasterFormat présentes et coût direct nu par division selon la révision r1, composantes regroupées ($)", 5)
@@ -440,20 +441,20 @@ DN = {"T1": R_T1, "T2": R_T2, "T3": R_T3, "T4": R_T4, "T5": R_T5, "T6": R_T6, "P
440 441 # 3. RELEVÉ (Q1, Q2, Q3)
441 442 # ==============================================================================
442 443 ws = wb.create_sheet("Relevé")
443 −preparer_feuille(ws, {"B": 6, "C": 8, "D": 34, "E": 40, "F": 13, "G": 18, "H": 12, "I": 12, "J": 12, "K": 14, "L": 15})
444 +preparer_feuille(ws, {"B": 6, "C": 8, "D": 36, "E": 44, "F": 14, "G": 18, "H": 16, "I": 17})
444 445 bandeau(ws, "Relevé des quantités et bordereau des composantes — Questions 1, 2 et 3",
445 − "Du plan aux quantités, des quantités aux coûts directs nus · PAR FORMULE dans les cellules jaunes", ncols=11)
446 + "Du plan aux quantités, des quantités aux coûts directs nus · PAR FORMULE dans les cellules jaunes", ncols=8)
446 447 ws.freeze_panes = "A5"
447 −titre_section(ws, 4, 2, "Question 1 — Méthode d'estimation du coût et nature du coût estimé (C5)", 11)
448 −zone(ws, "C5", 4, 8, "Pourquoi un bordereau par composantes issu d'un relevé ici ? Que valent les trois autres méthodes (comparative $/pi², relevé détaillé, indexée) pour ce mandat ? Pourquoi un projet neuf est-il par définition un coût de REMPLACEMENT ? Quelles limites (plan générique, prix publiés) ? (6-9 lignes)…")
449 −
450 −titre_section(ws, 10, 2, "Question 2 — Du plan au relevé des quantités : reproduisez par formule 7 grandeurs du relevé d'UQO Éval (F16:F22), puis l'écart avec la valeur de la plateforme (H16:H22)", 11)
451 −etiquette(ws, 11, 4, "Entrées liées (ne pas modifier)", bold=True)
452 −entetes(ws, 11, 5, ["Ouvertures extérieures hors sol (m²)", "Cloisons hors sol (m²)", "Aire des pièces hors sol (m²)"], height=30)
453 −lien(ws, "E12", f"=Données!I{R_T2['rdc']}+Données!I{R_T2['et']}", "0.00")
454 −lien(ws, "F12", f"=Données!M{R_T2['rdc']}+Données!M{R_T2['et']}", "0.00")
455 −lien(ws, "G12", f"=Données!D{R_T2['rdc']}+Données!D{R_T2['et']}", "0.00")
456 −note(ws, 13, 4, "Les dimensions du projet sont dans Données!D11:D24 (longueur et profondeur à l'axe, épaisseur, hauteurs, facteurs de toit). Les formules du relevé d'UQO Éval sont lisibles dans Données, tableau 3.", 8)
448 +titre_section(ws, 4, 2, "Question 1 — Méthode d'estimation du coût et nature du coût estimé (C5)", 8)
449 +zone(ws, "C5", 4, 7, "Pourquoi un bordereau par composantes issu d'un relevé ici ? Que valent les trois autres méthodes (comparative $/pi², relevé détaillé, indexée) pour ce mandat ? Pourquoi un projet neuf est-il par définition un coût de REMPLACEMENT ? Quelles limites (plan générique, prix publiés) ? (6-9 lignes)…")
450 +
451 +titre_section(ws, 10, 2, f"Question 2 — Du plan au relevé des quantités : reproduisez par formule {NG} grandeurs du relevé d'UQO Éval (F16:F{15 + NG}), puis l'écart avec la valeur de la plateforme (H16:H{15 + NG})", 8)
452 +etiquette(ws, 11, 4, "Dimensions du projet (tableau 1) — liens", bold=True)
453 +entetes(ws, 11, 5, ["L à l'axe (m) · P à l'axe (m) · épaisseur (m)", "Hauteurs : étage · fondation (m)", "Niveaux · pente · débords"], height=30)
454 +lien(ws, "E12", f'=TEXT(Données!D{R_T1["L"]},"0.00")&" × "&TEXT(Données!D{R_T1["P"]},"0.00")&" · ép. "&TEXT(Données!D{R_T1["ep"]},"0.00")', left=True)
455 +lien(ws, "F12", f'=TEXT(Données!D{R_T1["h"]},"0.00")&" · "&TEXT(Données!D{R_T1["hf"]},"0.00")', left=True)
456 +lien(ws, "G12", f'=Données!D{R_T1["niv"]}&" · "&TEXT(Données!D{R_T1["pente"]},"0.00")&" · "&TEXT(Données!D{R_T1["deb"]},"0.00")', left=True)
457 +note(ws, 13, 4, f"Vos formules lisent directement Données!D{R_T1['log']}:D{R_T1['deb']} (logements, niveaux, longueur et profondeur à l'axe, épaisseur, hauteurs, facteurs de toit) : les cellules ci-dessus ne sont qu'un rappel. Les formules du relevé d'UQO Éval sont lisibles dans Données, tableau 3.", 5)
457 458 entetes(ws, 15, 2, ["No", "", "Grandeur", "Formule attendue (lecture du relevé UQO Éval)", "Votre calcul", "Valeur UQO Éval — lien", "Écart (%)"])
458 459 ws.merge_cells("B15:C15")
459 460 for i, g in enumerate(GRANDEURS):
@@ -466,12 +467,12 @@ for i, g in enumerate(GRANDEURS):
466 467 lien(ws, f"G{rr}", f"=Données!F{R_T3 + i}", "#,##0.00")
467 468 rep(ws, f"H{rr}", num_fmt="0.00%", comment="=F16/G16-1" if i == 0 else None)
468 469 ws.row_dimensions[rr].height = 26
469 −R_G1 = 16 + len(GRANDEURS) - 1 # 22
470 +R_G1 = 16 + len(GRANDEURS) - 1 # 20
470 471 ws.conditional_formatting.add(f"H16:H{R_G1}", FormulaRule(formula=['ABS(H16)>0.005'], fill=PatternFill("solid", fgColor="FFC7CE")))
471 472 ws.conditional_formatting.add(f"H16:H{R_G1}", FormulaRule(formula=['AND(H16<>"",ABS(H16)<=0.005)'], fill=PatternFill("solid", fgColor="C6EFCE")))
472 473
473 −titre_section(ws, R_C0 - 2, 2, f"Question 3 — Bordereau des 22 composantes : coût unitaire nu (K), montant (L), puis totaux, sous-totaux par division et postes les plus lourds", 11)
474 −entetes(ws, R_C0 - 1, 2, ["No", "Div.", "Composante — lien", "Ce qu'elle comprend — lien", "Quantité (relevé)", "Unité", "Matériaux ($/u)", "MO ($/u)", "Équip. ($/u)", "a) Coût unitaire nu ($/u)", "b) Montant ($)"], height=40)
474 +titre_section(ws, R_C0 - 2, 2, f"Question 3 — Bordereau des 22 composantes : montant = quantité × prix unitaire nu (I), total, sous-totaux par division et trois postes les plus lourds", 8)
475 +entetes(ws, R_C0 - 1, 2, ["No", "Div.", "Composante — lien", "Ce qu'elle comprend — lien", "Quantité (relevé)", "Unité", "Prix unitaire nu ($/u) — lien", "a) Montant ($) = quantité × prix"], height=40)
475 476 for i, L in enumerate(COMPOSANTES):
476 477 rr = R_C0 + i
477 478 dr = R_T4 + i
@@ -479,44 +480,37 @@ for i, L in enumerate(COMPOSANTES):
479 480 lien(ws, f"D{rr}", f"=Données!D{dr}", left=True, font=Font(name="Calibri", size=9, color="333333"))
480 481 lien(ws, f"E{rr}", f"=Données!E{dr}", left=True, font=Font(name="Calibri", size=8, color=GRIS))
481 482 lien(ws, f"F{rr}", f"=Données!F{dr}", "#,##0.00"); lien(ws, f"G{rr}", f"=Données!G{dr}", left=True, font=Font(name="Calibri", size=8, color=GRIS))
482 − lien(ws, f"H{rr}", f"=Données!H{dr}", FMT_N2); lien(ws, f"I{rr}", f"=Données!I{dr}", FMT_N2); lien(ws, f"J{rr}", f"=Données!J{dr}", FMT_N2)
483 − rep(ws, f"K{rr}", num_fmt=FMT_N2, comment=f"=H{R_C0}+I{R_C0}+J{R_C0}" if i == 0 else None)
484 − rep(ws, f"L{rr}", num_fmt=FMT_D2, comment=f"=F{R_C0}*K{R_C0}" if i == 0 else None)
483 + lien(ws, f"H{rr}", f"=Données!H{dr}", FMT_D2)
484 + rep(ws, f"I{rr}", num_fmt=FMT_D2, comment=f"=F{R_C0}*H{R_C0} (puis copier vers le bas)" if i == 0 else None)
485 485 ws.row_dimensions[rr].height = 30
486 −etiquette(ws, R_CT, 4, "c) COÛT DIRECT NU TOTAL ($) — somme des 22 montants", bold=True); ws.merge_cells(f"D{R_CT}:K{R_CT}")
487 −rep(ws, f"L{R_CT}", num_fmt=FMT_D2, comment=f"=SUM(L{R_C0}:L{R_C1})")
488 −for k, (lbl, cm, fmt) in enumerate([("d) Montant total des matériaux ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},H{R_C0}:H{R_C1}) (SOMMEPROD)", FMT_D2),
489 − ("d) Montant total de la main-d'œuvre ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},I{R_C0}:I{R_C1})", FMT_D2),
490 − ("d) Montant total de l'équipement ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},J{R_C0}:J{R_C1})", FMT_D2),
491 − ("d) Part de la main-d'œuvre dans le direct nu (%)", f"=E{R_MAT + 1}/L{R_CT}", FMT_P1)]):
492 − rr = R_MAT + k
493 − etiquette(ws, rr, 2, lbl, bold=True); ws.merge_cells(f"B{rr}:D{rr}"); rep(ws, f"E{rr}", num_fmt=fmt, comment=cm)
494 −note(ws, R_MAT + 4, 2, f"Contrôle : E{R_MAT} + E{R_MAT + 1} + E{R_MAT + 2} doit redonner L{R_CT} à quelques dollars près (arrondis des prix composites).", 10)
495 −
496 −titre_section(ws, R_DH - 1, 2, "e) Sous-totaux par division MasterFormat (SOMME.SI / SUMIF sur la colonne C) et part de chaque division ; f) les trois composantes les plus lourdes", 11)
497 −entetes(ws, R_DH, 2, ["Code — lien", "Division — lien", "", "e) Direct nu de la division ($)", "e) Part (%)", "Révision r1 — lien ($)", "Écart"])
486 +etiquette(ws, R_CT, 4, "b) COÛT DIRECT NU TOTAL ($) — somme des 22 montants", bold=True); ws.merge_cells(f"D{R_CT}:H{R_CT}")
487 +rep(ws, f"I{R_CT}", num_fmt=FMT_D2, comment=f"=SUM(I{R_C0}:I{R_C1})")
488 +note(ws, R_CT + 1, 4, "Contrôle : la révision r1 d'UQO Éval donne 471 085 $ de direct nu ; votre total doit s'en approcher à quelques dollars près (arrondis des prix unitaires).", 5)
489 +
490 +titre_section(ws, R_DH - 1, 2, "c) Sous-totaux par division MasterFormat (SOMME.SI / SUMIF sur la colonne C) et part de chaque division ; d) les trois composantes les plus lourdes", 8)
491 +entetes(ws, R_DH, 2, ["Code — lien", "Division — lien", "", "c) Direct nu de la division ($)", "c) Part (%)", "Révision r1 — lien ($)", "Écart"])
498 492 ws.merge_cells(f"C{R_DH}:D{R_DH}")
499 493 for i, k in enumerate(DIVS):
500 494 rr = R_D0 + i
501 495 lien(ws, f"B{rr}", f"=Données!B{R_T5 + i}")
502 496 ws.merge_cells(start_row=rr, start_column=3, end_row=rr, end_column=4); lien(ws, f"C{rr}", f"=Données!C{R_T5 + i}", left=True)
503 − rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f'=SUMIF($C${R_C0}:$C${R_C1},B{R_D0},$L${R_C0}:$L${R_C1}) (SOMME.SI ; le code est un texte « 03 »)' if i == 0 else None)
504 − rep(ws, f"F{rr}", num_fmt=FMT_P1, comment=f"=E{R_D0}/$L${R_CT}" if i == 0 else None)
497 + rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f'=SUMIF($C${R_C0}:$C${R_C1},B{R_D0},$I${R_C0}:$I${R_C1}) (SOMME.SI ; le code est un texte « 03 »)' if i == 0 else None)
498 + rep(ws, f"F{rr}", num_fmt=FMT_P1, comment=f"=E{R_D0}/$I${R_CT}" if i == 0 else None)
505 499 lien(ws, f"G{rr}", f"=Données!D{R_T5 + i}", FMT_D2)
506 500 lien(ws, f"H{rr}", f'=IF(E{rr}="","—",IF(ABS(E{rr}-G{rr})<=25,"✓","≠"))')
507 501 ws.conditional_formatting.add(f"F{R_D0}:F{R_D1}", DataBarRule(start_type="num", start_value=0, end_type="num", end_value=0.3, color=BLEU_CLAIR, showValue=True))
508 502 ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="≠"'], fill=PatternFill("solid", fgColor="FFC7CE")))
509 503 ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="✓"'], fill=PatternFill("solid", fgColor="C6EFCE")))
510 −etiquette(ws, R_D1 + 1, 2, f"Total des divisions (contrôle = L{R_CT})", bold=True); ws.merge_cells(start_row=R_D1 + 1, start_column=2, end_row=R_D1 + 1, end_column=4)
504 +etiquette(ws, R_D1 + 1, 2, f"Total des divisions (contrôle = I{R_CT})", bold=True); ws.merge_cells(start_row=R_D1 + 1, start_column=2, end_row=R_D1 + 1, end_column=4)
511 505 lien(ws, f"E{R_D1 + 1}", f"=SUM(E{R_D0}:E{R_D1})", FMT_D2)
512 −entetes(ws, R_TOP - 1, 2, ["Rang", "f) Composante (INDEX/EQUIV)", "", "f) Montant ($) (GRANDE.VALEUR)"])
506 +entetes(ws, R_TOP - 1, 2, ["Rang", "d) Composante (nom : INDEX/EQUIV, ou recopié)", "", "d) Montant ($) (GRANDE.VALEUR)"])
513 507 ws.merge_cells(start_row=R_TOP - 1, start_column=3, end_row=R_TOP - 1, end_column=4)
514 508 for i in range(3):
515 509 rr = R_TOP + i
516 510 c = ws.cell(row=rr, column=2, value=i + 1); c.font = FONT_H2; c.alignment = CENTER; c.border = BORDER_LIGHT; c.fill = FILL_CLAIR
517 511 ws.merge_cells(start_row=rr, start_column=3, end_row=rr, end_column=4)
518 − rep(ws, f"C{rr}", comment=f"=INDEX($D${R_C0}:$D${R_C1},MATCH(E{rr},$L${R_C0}:$L${R_C1},0)) (INDEX / EQUIV)" if i == 0 else None)
519 − rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f"=LARGE($L${R_C0}:$L${R_C1},B{rr}) (GRANDE.VALEUR)" if i == 0 else None)
512 + rep(ws, f"C{rr}", comment=f"=INDEX($D${R_C0}:$D${R_C1},MATCH(E{rr},$I${R_C0}:$I${R_C1},0)) (INDEX / EQUIV — ou recopiez le nom, sans pénalité)" if i == 0 else None)
513 + rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f"=LARGE($I${R_C0}:$I${R_C1},B{rr}) (GRANDE.VALEUR)" if i == 0 else None)
520 514 finir_feuille(ws, OR, zoom=100, titre="Relevé et composantes — questions 1 à 3")
521 515
522 516 # ==============================================================================
@@ -545,7 +539,7 @@ def ligne(r, label, kind, fmt=FMT_D2, bold=False, hint="", formula=None, comment
545 539
546 540
547 541 sous_titre(ws, 6, "Question 4 — Des coûts nus du bordereau aux coûts directs au sens du cours, puis contingences (lignes 7 à 16)", 2, 4)
548 −ligne(7, f"Coûts directs nus des 22 composantes — lien (Relevé!L{R_CT})", "calc", formula=f"=Relevé!L{R_CT}")
542 +ligne(7, f"Coûts directs nus des 22 composantes — lien (Relevé!I{R_CT})", "calc", formula=f"=Relevé!I{R_CT}")
549 543 ligne(8, "Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval — lien", "calc", formula=f"={mq(0)}")
550 544 ligne(9, "a) Coûts directs nus localisés", "rep", comment="=C7+C8")
551 545 ligne(10, "b) Conditions générales du chantier (8 % des directs nus localisés)", "rep", comment=f"=C9*{mq(1)}")
@@ -717,7 +711,7 @@ ch2.series[0].graphicalProperties.solidFill = OR
717 711 ch2.gapWidth = 60
718 712 style_chart(ch2); ch2.legend = None
719 713 ws.add_chart(ch2, "I10")
720 −titre_section(ws, 26, 2, f"Graphique 3 (question 10c) : ajoutez ci-dessous votre graphique — p. ex. matériaux / main-d'œuvre / équipement (Relevé!E{R_MAT}:E{R_MAT + 2}), sensibilité du coût total à la durée du chantier, ou $/m² implicite des {NV} ventes (Marché!L{R_V0}:L{R_V1})", 12)
714 +titre_section(ws, 26, 2, f"Graphique 3 (question 10c) : ajoutez ci-dessous votre graphique — p. ex. sensibilité du coût total à la durée du chantier (6, 12, 18, 24 mois), $/m² implicite des {NV} ventes (Marché!L{R_V0}:L{R_V1}), ou part des trois composantes les plus lourdes (Relevé!E{R_TOP}:E{R_TOP + 2})", 12)
721 715 ph = ws.cell(row=27, column=2, value="◻ Votre 3e graphique ici (titre + axes étiquetés)"); ph.font = Font(name="Calibri", size=11, italic=True, color="9A8A2E")
722 716 finir_feuille(ws, TURQUOISE, titre="Dashboard — question 10")
723 717
@@ -730,7 +724,7 @@ bandeau(ws, "Note au promoteur — avant la demande de financement",
730 724 "Question 10 — une page, ton professionnel, chaque affirmation ancrée dans un chiffre du classeur (citez la cellule).", ncols=2)
731 725 sections = [
732 726 ("Conclusion : coût total de remplacement neuf, $/pi² (hors sol et chauffé), $/logement, part des indirects et du profit", 2),
733 − ("Postes les plus sensibles du bordereau (trois composantes les plus lourdes, division la plus lourde, part de la main-d'œuvre)", 2),
727 + ("Postes les plus sensibles du bordereau (trois composantes les plus lourdes, division la plus lourde, part du direct nu qu'elles représentent)", 2),
734 728 ("Effet chiffré d'un retard de chantier de 6 mois sur les intérêts intercalaires et sur le coût total", 2),
735 729 (f"Ce que disent le marché ({NV} ventes), le moteur de coût d'UQO Éval et Altus : le projet est-il viable ? marge attendue", 2),
736 730 ("Conventions à déclarer (profit sur directs + indirects, contingences, exclusion des taxes) et ce qui changerait avec l'autre convention", 2),
@@ -752,4 +746,6 @@ if not os.environ.get("TP2_SKIP_SAVE"): # make_IMM1033_TP2_solution.py réutil
752 746 wb.save(OUT)
753 747 print("OK :", OUT)
754 748 print("Données :", {k: v for k, v in DN.items() if k != "PR"}, "PR", PR)
755 − print("Relevé : composantes", R_C0, R_C1, "total", R_CT, "mat", R_MAT, "divisions", R_D0, R_D1, "top", R_TOP, "| Marché : ventes", R_V0, R_V1, "méd", R_MED, "K", R_K, "lecture", R_LECT)
749 + print("Relevé : grandeurs 16", R_G1, "composantes", R_C0, R_C1, "total", R_CT, "divisions", R_D0, R_D1, "top", R_TOP, "| Marché : ventes", R_V0, R_V1, "méd", R_MED, "K", R_K, "lecture", R_LECT)
750 + print("Badges énoncé : T1 B6:E27 | T2 B30:M33 | T3 B%d:G%d | T4 B%d:N%d | T5 B%d:E%d | T6 B%d:E%d | T7 B%d:E%d | T8 B%d:N%d | T9 B%d:N%d | T10 B%d:E%d" % (
751 + R_T3, R_T3 + NG - 1, R_T4, R_T4 + NC - 1, R_T5, R_T5 + len(DIVS) - 1, R_T6, R_T6 + len(moteur_rows) - 1, R_T7, R_T7 + len(PARAMS) - 1, R_T8, R_T8 + NV - 1, R_T9, R_T9 + 1, R_T10, R_T10b + len(MC["categories"]) - 1))
modified IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/make_IMM1033_TP2_solution.py +23 −23
@@ -3,7 +3,7 @@
3 3
4 4 Recharge le gabarit en mémoire (make_IMM1033_TP2.py exécuté avec TP2_SKIP_SAVE=1 : le gabarit distribué n'est pas réécrit),
5 5 puis remplit chaque cellule jaune avec la FORMULE attendue (chaînée à Données), les zones de texte avec les réponses modèles,
6 −les KPI, le verdict et le 3e graphique (matériaux / main-d'œuvre / équipement). Cellules en vert pâle.
6 +les KPI, le verdict et le 3e graphique (sensibilité du coût total à la durée du chantier). Cellules en vert pâle.
7 7 Sortie : 03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/solutionnaire_enseignant/IMM1033-20_TP2_solutionnaire.xlsx
8 8 Vérification (Excel recalcule) : verif_solution_xlsx.py <xlsx> verif_attendus_tp2.py
9 9 """
@@ -17,10 +17,10 @@ os.environ["TP2_SKIP_SAVE"] = "1"
17 17 ns = runpy.run_path(os.path.join(HERE, "make_IMM1033_TP2.py"))
18 18 wb = ns["wb"]
19 19 PR, R_T1, R_T5, R_T6, R_T10 = ns["PR"], ns["R_T1"], ns["R_T5"], ns["R_T6"], ns["R_T10"]
20 −R_C0, R_C1, R_CT, R_MAT, R_D0, R_D1, R_TOP = ns["R_C0"], ns["R_C1"], ns["R_CT"], ns["R_MAT"], ns["R_D0"], ns["R_D1"], ns["R_TOP"]
20 +R_C0, R_C1, R_CT, R_D0, R_D1, R_TOP = ns["R_C0"], ns["R_C1"], ns["R_CT"], ns["R_D0"], ns["R_D1"], ns["R_TOP"]
21 21 R_V0, R_V1, R_MED, R_K, R_LECT, GRANDEURS = ns["R_V0"], ns["R_V1"], ns["R_MED"], ns["R_K"], ns["R_LECT"], ns["GRANDEURS"]
22 22
23 −from openpyxl.chart import PieChart, Reference # noqa: E402
23 +from openpyxl.chart import BarChart, Reference # noqa: E402
24 24 from openpyxl.styles import Alignment, Font, PatternFill # noqa: E402
25 25 from openpyxl.utils import get_column_letter # noqa: E402
26 26 from openpyxl.utils.cell import range_boundaries # noqa: E402
@@ -86,7 +86,7 @@ sol(ws, "D8", "Aucun outil d'IA ; valeurs reproduites par tp2_solutions.py ; cas
86 86 ws = wb["Relevé"]
87 87 txt(ws, "C5",
88 88 "BORDEREAU PAR COMPOSANTES ISSU D'UN RELEVÉ : le promoteur dispose de plans cotés et d'une fiche technique ; UQO Éval en a tiré un relevé des quantités (quantity survey) que le TP condense en "
89 − "22 composantes (unités en place) à prix composites — c'est la méthode par composantes de la séance 6, nourrie par un vrai relevé : chaque composante est une quantité mesurée sur le plan "
89 + "22 composantes (unités en place) à prix unitaire nu — c'est la méthode par composantes de la séance 6, nourrie par un vrai relevé : chaque composante est une quantité mesurée sur le plan "
90 90 "(m² de toit, m² de brique, nombre de fenêtres) multipliée par un prix nu par unité. La méthode COMPARATIVE ($/pi² d'un guide, Altus 180-330 $) ne donnerait qu'un ordre de grandeur sans "
91 91 "distinguer brique et vinyle, toit plat et bardeaux ; le RELEVÉ DÉTAILLÉ ligne par ligne (64 lignes RSMeans sur UQO Éval) est plus précis mais plus lourd — c'est celui de l'entrepreneur ; "
92 92 "la méthode INDEXÉE suppose un coût historique connu, inexistant pour un projet neuf. COÛT DE REMPLACEMENT par définition : il n'y a pas d'original à reproduire — on chiffre un bâtiment "
@@ -96,20 +96,15 @@ for i, g in enumerate(GRANDEURS):
96 96 rr = 16 + i
97 97 sol(ws, f"F{rr}", g["formule"], "#,##0.00"); sol(ws, f"H{rr}", f"=F{rr}/G{rr}-1", "0.00%")
98 98 for rr in range(R_C0, R_C1 + 1):
99 − sol(ws, f"K{rr}", f"=H{rr}+I{rr}+J{rr}", "#,##0.00")
100 − sol(ws, f"L{rr}", f"=F{rr}*K{rr}", D2)
101 −sol(ws, f"L{R_CT}", f"=SUM(L{R_C0}:L{R_C1})", D2)
102 −sol(ws, f"E{R_MAT}", f"=SUMPRODUCT(F{R_C0}:F{R_C1},H{R_C0}:H{R_C1})", D2)
103 −sol(ws, f"E{R_MAT + 1}", f"=SUMPRODUCT(F{R_C0}:F{R_C1},I{R_C0}:I{R_C1})", D2)
104 −sol(ws, f"E{R_MAT + 2}", f"=SUMPRODUCT(F{R_C0}:F{R_C1},J{R_C0}:J{R_C1})", D2)
105 −sol(ws, f"E{R_MAT + 3}", f"=E{R_MAT + 1}/L{R_CT}", "0.0%")
99 + sol(ws, f"I{rr}", f"=F{rr}*H{rr}", D2)
100 +sol(ws, f"I{R_CT}", f"=SUM(I{R_C0}:I{R_C1})", D2)
106 101 for rr in range(R_D0, R_D1 + 1):
107 − sol(ws, f"E{rr}", f"=SUMIF($C${R_C0}:$C${R_C1},B{rr},$L${R_C0}:$L${R_C1})", D2)
108 − sol(ws, f"F{rr}", f"=E{rr}/$L${R_CT}", "0.0%")
102 + sol(ws, f"E{rr}", f"=SUMIF($C${R_C0}:$C${R_C1},B{rr},$I${R_C0}:$I${R_C1})", D2)
103 + sol(ws, f"F{rr}", f"=E{rr}/$I${R_CT}", "0.0%")
109 104 for i in range(3):
110 105 rr = R_TOP + i
111 − sol(ws, f"E{rr}", f"=LARGE($L${R_C0}:$L${R_C1},B{rr})", D2)
112 − sol(ws, f"C{rr}", f"=INDEX($D${R_C0}:$D${R_C1},MATCH(E{rr},$L${R_C0}:$L${R_C1},0))")
106 + sol(ws, f"E{rr}", f"=LARGE($I${R_C0}:$I${R_C1},B{rr})", D2)
107 + sol(ws, f"C{rr}", f"=INDEX($D${R_C0}:$D${R_C1},MATCH(E{rr},$I${R_C0}:$I${R_C1},0))")
113 108
114 109 # ---------------- BORDEREAU ----------------
115 110 ws = wb["Bordereau"]
@@ -162,14 +157,19 @@ for col in "DEFG":
162 157 ws[f"{col}6"].font = Font(name="Calibri", size=20, bold=True, color="1E4620"); ws[f"{col}7"].fill = FILL_SOL
163 158 sol(ws, "C8", "Coût sous la valeur de marché — projet viable (marge > 11 %)")
164 159 ws["C8"].font = Font(name="Calibri", size=14, bold=True, color="1E4620"); ws["C8"].alignment = Alignment(horizontal="center", vertical="center")
165 −ws["B27"].value = f"Graphique 3 (solution) : matériaux / main-d'œuvre / équipement du direct nu (Relevé!E{R_MAT}:E{R_MAT + 2})"
160 +ws["B27"].value = "Graphique 3 (solution) : sensibilité du coût total à la durée du chantier — intercalaires recalculés pour 6, 12, 18 et 24 mois, profit de 11 % appliqué (table M27:O31)"
166 161 ws["B27"].font = Font(name="Calibri", size=11, bold=True, color="1E4620")
167 −for i, (lbl, f) in enumerate([("Matériaux", f"=Relevé!E{R_MAT}"), ("Main-d'œuvre", f"=Relevé!E{R_MAT + 1}"), ("Équipement", f"=Relevé!E{R_MAT + 2}")]):
168 − a = ws.cell(row=28 + i, column=13, value=lbl); a.fill = FILL_SOL
169 − b = ws.cell(row=28 + i, column=14, value=f); b.fill = FILL_SOL; b.number_format = "#,##0"
170 −pie = PieChart(); pie.title = "Direct nu : matériaux, main-d'œuvre, équipement"; pie.height = 7; pie.width = 10
171 −pie.add_data(Reference(ws, min_col=14, min_row=28, max_row=30), titles_from_data=False); pie.set_categories(Reference(ws, min_col=13, min_row=28, max_row=30))
172 −ws.add_chart(pie, "B28")
162 +for j, h in enumerate(["Durée (mois)", "Intercalaires ($)", "Coût total ($)"]):
163 + c = ws.cell(row=27, column=13 + j, value=h); c.fill = FILL_SOL; c.font = Font(name="Calibri", size=9, bold=True, color="1E4620")
164 +for i, m in enumerate((6, 12, 18, 24)):
165 + rr = 28 + i
166 + a = ws.cell(row=rr, column=13, value=m); a.fill = FILL_SOL
167 + b = ws.cell(row=rr, column=14, value=f"=Bordereau!$C$15*Bordereau!$C$23*(M{rr}/12)*0.5"); b.fill = FILL_SOL; b.number_format = "#,##0"
168 + c = ws.cell(row=rr, column=15, value=f"=(Bordereau!$C$15+Bordereau!$C$32-Bordereau!$C$24+N{rr})*(1+{pr('profit')})"); c.fill = FILL_SOL; c.number_format = "#,##0"
169 +bar3 = BarChart(); bar3.type = "col"; bar3.title = "Coût total neuf selon la durée du chantier (mois)"; bar3.height = 7; bar3.width = 11
170 +bar3.add_data(Reference(ws, min_col=15, min_row=27, max_row=31), titles_from_data=True); bar3.set_categories(Reference(ws, min_col=13, min_row=28, max_row=31))
171 +bar3.y_axis.title = "$"; bar3.y_axis.scaling.min = 700000; bar3.legend = None; bar3.x_axis.delete = False; bar3.y_axis.delete = False
172 +ws.add_chart(bar3, "B28")
173 173
174 174 ws = wb["Note"]
175 175 NOTE = [
@@ -178,7 +178,7 @@ NOTE = [
178 178 "(4 284 pi², C39), 199,90 $/pi² d'aire chauffée (3 798 pi², C40) et 189 788 $ par logement (C41). Indirects + profit = 19,4 % du coût total.",
179 179 f"Trois composantes pèsent 36 % du direct nu : le placage de brique (77 532 $, 16,5 %), les quatre cuisines (54 985 $) et les planchers finis (35 680 $) (Relevé!C{R_TOP}:E{R_TOP + 2}). "
180 180 f"Par division, l'enveloppe et la toiture (07) dominent avec 107 365 $ (22,8 %), devant les finitions (09, 16,7 %), les cuisines (11, 11,7 %) et le béton (03, 10,3 %) (Relevé!E{R_D0}:F{R_D1}). "
181 − f"La main-d'œuvre ne représente que 27,4 % du direct nu (E{R_MAT + 3}) : le bordereau est surtout sensible aux prix des matériaux (brique, armoires, fenêtres).",
181 + "Le bordereau est donc surtout sensible au prix de la brique (447 $/m² posé : passer au vinyle sur 100 % des murs économiserait ≈ 70 000 $ de direct nu) et au niveau de finition des cuisines.",
182 182 "Les intérêts intercalaires valent 20 650 $ pour 12 mois à 6,75 % (préférentiel 4,70 % + 2,05 %, Bordereau!C24). Un retard de 6 mois porte T à 18 mois : I = 611 843 × 6,75 % × 1,5 × ½ = 30 975 $, "
183 183 "soit +10 325 $ (+50 % du poste). Répercuté dans l'assiette du profit (+11 %), le coût total passerait à ≈ 770 612 $ (+11 460 $, +1,5 %) : à provisionner et à couvrir par une clause de pénalité "
184 184 "de retard dans le contrat de l'entrepreneur.",
added IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/make_tp2_tables.py +95 −0
@@ -0,0 +1,95 @@
1 +#!/usr/bin/env python3
2 +"""Génère les tableaux LaTeX de l'énoncé du TP2 IMM1033-20 (enonce/tables_tp2*.tex) depuis tp2_donnees.py.
3 +Remplace le bloc python inline du 2026-10-29 (perdu). Relancer après build_tp2_donnees.py : python3 make_tp2_tables.py
4 + tables_tp2.tex Tableau 4 — 22 composantes, un prix unitaire nu (version allégée du 2026-10-30)
5 + tables_tp2_releve.tex Tableau 3 — 5 grandeurs du relevé
6 + tables_tp2_plans.tex Tableau 2 — ce que les plans donnent, par niveau (colonnes essentielles)
7 + tables_tp2_div.tex Tableau 5 — direct nu par division (révision r1, composantes regroupées)
8 + tables_tp2_ventes.tex Tableau 8 — 8 ventes réelles (secteur corrigé)
9 + tables_tp2_moteur.tex Tableau 10 — catégories du moteur de coût
10 +"""
11 +import os
12 +from tp2_donnees import COMPOSANTES, DIVISIONS, GRANDEURS, MOTEUR_COUT, MOTEUR_QS, PAGES, VENTES, VENTES_TP
13 +
14 +HERE = os.path.dirname(os.path.abspath(__file__))
15 +OUT = os.path.normpath(os.path.join(HERE, "..", "..", "03_Travaux_pratiques", "TP2_Bordereau_de_cout_neuf", "enonce"))
16 +
17 +
18 +def n(x, d=2):
19 + """Nombre à la française : espace fine insécable pour les milliers, virgule décimale."""
20 + s = f"{x:,.{d}f}".replace(",", " ").replace(".", ",")
21 + return s.replace(" ", "\\,")
22 +
23 +
24 +def tex(s):
25 + return (s.replace("&", "\\&").replace("%", "\\%").replace("×", "$\\times$").replace("≈", "$\\approx$")
26 + .replace("m²", "m\\up{2}").replace("m³", "m\\up{3}").replace("Σ", "$\\Sigma$").replace("−", "--").replace("—", "---"))
27 +
28 +
29 +def secteur(v):
30 + s = v["secteur"]
31 + if s.startswith("Paroisse Saint-René"):
32 + return "Gatineau, Saint-René"
33 + if s == "Gatineau":
34 + return "Gatineau"
35 + return s
36 +
37 +
38 +def ecrire(nom, lignes):
39 + p = os.path.join(OUT, nom)
40 + open(p, "w", encoding="utf-8").write("\n".join(lignes) + "\n")
41 + print("OK", p)
42 +
43 +
44 +# --- Tableau 4 : composantes ---
45 +ENTETE4 = [r"\begin{tabular}{@{}rlp{3.55cm}p{5.6cm}rp{1.8cm}r@{}}", r"\toprule",
46 + r"\textbf{N\up{o}} & \textbf{Div.} & \textbf{Composante} & \textbf{Ce qu'elle comprend} & \textbf{Quantité} & \textbf{Unité} & \textbf{Prix nu (\$/u)} \\", r"\midrule"]
47 +L = list(ENTETE4)
48 +for c in COMPOSANTES:
49 + L.append(f"{c['no']} & {c['wbs']} & {tex(c['nom'])} & {tex(c['detail'])} & {n(c['qte'])} & {tex(c['unite'])} & {n(c['direct_u'])} \\\\")
50 + if c["no"] == 11: # coupure possible entre les deux moitiés (boîte tcolorbox breakable)
51 + L += [r"\bottomrule", r"\end{tabular}", "", r"\par\nopagebreak[0]\vspace{2pt}\par", ""] + list(ENTETE4)
52 +L += [r"\bottomrule", r"\end{tabular}"]
53 +ecrire("tables_tp2.tex", L)
54 +
55 +# --- Tableau 3 : grandeurs ---
56 +L = [r"\begin{tabular}{@{}clp{6.2cm}rl@{}}", r"\toprule",
57 + r"\textbf{N\up{o}} & \textbf{Grandeur (relevé UQO Éval)} & \textbf{Formule du relevé} & \textbf{Valeur} & \textbf{Unité} \\", r"\midrule"]
58 +for i, g in enumerate(GRANDEURS, 1):
59 + formule = g["libelle"].split(" = ", 1)[1]
60 + L.append(f"{i} & {tex(g['releve_nom'])} & {tex(formule)} & {n(g['releve_valeur'])} & {tex(g['releve_unite'])} \\\\")
61 +L += [r"\bottomrule", r"\end{tabular}"]
62 +ecrire("tables_tp2_releve.tex", L)
63 +
64 +# --- Tableau 2 : plans par niveau (colonnes essentielles) ---
65 +L = [r"\begin{tabular}{@{}lp{2.1cm}p{2.1cm}p{2.0cm}p{2.1cm}p{1.5cm}p{1.5cm}@{}}", r"\toprule",
66 + r"\textbf{Niveau} & \textbf{Aire des pièces (m\up{2})} & \textbf{Murs ext. bruts (m\up{2})} & \textbf{Ouvertures (m\up{2})} & \textbf{Murs ext. nets (m\up{2})} & \textbf{Fenêtres} & \textbf{Portes ext.} \\", r"\midrule"]
67 +for p in PAGES:
68 + L.append(f"{p['niveau']} & \\hfill {n(p['aire_pieces'])} & \\hfill {n(p['murs_ext_brut'])} & \\hfill {n(p['ouvertures_aire'])} & \\hfill {n(p['murs_ext_net'])} & \\hfill {p['fenetres']} & \\hfill {p['portes']} \\\\")
69 +L += [r"\bottomrule", r"\end{tabular}"]
70 +ecrire("tables_tp2_plans.tex", L)
71 +
72 +# --- Tableau 5 : divisions ---
73 +L = [r"\begin{tabular}{@{}clrr@{}}", r"\toprule", r"\textbf{Code} & \textbf{Division MasterFormat} & \textbf{Direct nu r1 (\$)} & \textbf{Part} \\", r"\midrule"]
74 +tot = MOTEUR_QS["direct_nu"]
75 +for k in sorted(MOTEUR_QS["by_wbs_comp"]):
76 + v = MOTEUR_QS["by_wbs_comp"][k]
77 + L.append(f"{k} & {tex(DIVISIONS[k])} & {n(v)} & {n(100 * v / tot, 1)}~\\% \\\\")
78 +L += [r"\bottomrule", r"\end{tabular}"]
79 +ecrire("tables_tp2_div.tex", L)
80 +
81 +# --- Tableau 8 : ventes ---
82 +L = [r"\begin{tabular}{@{}clp{2.15cm}crcrrr@{}}", r"\toprule",
83 + r"\textbf{N\up{o}} & \textbf{Adresse} & \textbf{Secteur} & \textbf{Date de vente} & \textbf{Prix (\$)} & \textbf{Constr.} & \textbf{Aire d'étages (m\up{2})} & \textbf{Rôle terrain (\$)} & \textbf{Rôle total (\$)} \\", r"\midrule"]
84 +VT = [v for v in VENTES if v["adresse"] in VENTES_TP]
85 +for i, v in enumerate(VT, 1):
86 + L.append(f"Q{i} & {tex(v['adresse'])} & {secteur(v)} & {v['date']} & {n(v['prix'], 0)} & {v['annee']} & {n(v['aire_etages'], 1)} & {n(v['vt'], 0)} & {n(v['role'], 0)} \\\\")
87 +L += [r"\bottomrule", r"\end{tabular}"]
88 +ecrire("tables_tp2_ventes.tex", L)
89 +
90 +# --- Tableau 10 : moteur ---
91 +L = [r"\begin{tabular}{@{}lrr@{}}", r"\toprule", r"\textbf{Catégorie du moteur} & \textbf{Montant (\$)} & \textbf{Part} \\", r"\midrule"]
92 +for lbl, amt, pct in MOTEUR_COUT["categories"]:
93 + L.append(f"{tex(lbl)} & {n(amt, 0)} & {n(pct, 2)}~\\% \\\\")
94 +L += [r"\bottomrule", r"\end{tabular}"]
95 +ecrire("tables_tp2_moteur.tex", L)
modified IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/tp2_donnees.py +10 −22
@@ -1451,7 +1451,7 @@ COMPOSANTES = [{'no': 1,
1451 1451 'nom': 'Excavation, remblai et drain français',
1452 1452 'detail': 'excavation en masse, remblai, drain de fondation perforé',
1453 1453 'qte': 651.77,
1454 − 'unite': 'm³ excavé',
1454 + 'unite': 'm³',
1455 1455 'mat': 2.09,
1456 1456 'mo': 3.25,
1457 1457 'eq': 2.18,
@@ -1479,7 +1479,7 @@ COMPOSANTES = [{'no': 1,
1479 1479 'nom': 'Fondations : semelles, murs coffrés et membrane',
1480 1480 'detail': "semelle filante 24 × 12 po, mur de béton 8 po, enduit d'imperméabilisation",
1481 1481 'qte': 140.06,
1482 − 'unite': 'm² de mur de fondation',
1482 + 'unite': 'm² de mur',
1483 1483 'mat': 108.35,
1484 1484 'mo': 90.32,
1485 1485 'eq': 6.39,
@@ -1505,7 +1505,7 @@ COMPOSANTES = [{'no': 1,
1505 1505 'wbs': '06',
1506 1506 'division': 'Bois et composites',
1507 1507 'nom': 'Planchers portés',
1508 − 'detail': 'solives en I 24 po c/c et sous-plancher OSB ¾ po',
1508 + 'detail': 'solives en I 24 po c/c et sous-plancher OSB 3/4 po',
1509 1509 'qte': 352.81,
1510 1510 'unite': 'm² de plancher',
1511 1511 'mat': 43.27,
@@ -1519,9 +1519,9 @@ COMPOSANTES = [{'no': 1,
1519 1519 'wbs': '06',
1520 1520 'division': 'Bois et composites',
1521 1521 'nom': 'Ossature de bois',
1522 − 'detail': 'murs extérieurs 2 × 6 + contreplaqué ½ po, cloisons 2 × 4, poutre LVL, colonnes',
1522 + 'detail': 'murs extérieurs 2 × 6 + contreplaqué 1/2 po, cloisons 2 × 4, poutre LVL, colonnes',
1523 1523 'qte': 572.42,
1524 − 'unite': 'm² de mur (ext. brut + cloisons)',
1524 + 'unite': 'm² de mur',
1525 1525 'mat': 17.26,
1526 1526 'mo': 15.47,
1527 1527 'eq': 0.0,
@@ -1533,7 +1533,7 @@ COMPOSANTES = [{'no': 1,
1533 1533 'wbs': '07',
1534 1534 'division': 'Enveloppe, isolation et toiture',
1535 1535 'nom': 'Toiture complète',
1536 − 'detail': 'fermes, support CDX ½ po, membrane APP 2 couches, soffites, gouttières et descentes',
1536 + 'detail': 'fermes, support CDX 1/2 po, membrane APP 2 couches, soffites, gouttières et descentes',
1537 1537 'qte': 218.92,
1538 1538 'unite': 'm² de toit',
1539 1539 'mat': 54.66,
@@ -1549,7 +1549,7 @@ COMPOSANTES = [{'no': 1,
1549 1549 'nom': 'Isolation des murs extérieurs R-24 et du comble R-50',
1550 1550 'detail': 'matelas R-21 (≈ R-24) + cellulose soufflée',
1551 1551 'qte': 415.77,
1552 − 'unite': 'm² isolé (murs nets + comble)',
1552 + 'unite': 'm² isolé',
1553 1553 'mat': 9.56,
1554 1554 'mo': 7.99,
1555 1555 'eq': 2.86,
@@ -1589,7 +1589,7 @@ COMPOSANTES = [{'no': 1,
1589 1589 'wbs': '08',
1590 1590 'division': 'Portes et fenêtres',
1591 1591 'nom': 'Fenêtres',
1592 − 'detail': 'fenêtre de vinyle à guillotine 3 × 4½ pi avec moustiquaire',
1592 + 'detail': 'fenêtre de vinyle à guillotine 3 × 4,5 pi avec moustiquaire',
1593 1593 'qte': 24,
1594 1594 'unite': 'unité',
1595 1595 'mat': 848.89,
@@ -1631,7 +1631,7 @@ COMPOSANTES = [{'no': 1,
1631 1631 'wbs': '09',
1632 1632 'division': 'Finitions intérieures',
1633 1633 'nom': 'Gypse et peinture',
1634 − 'detail': 'gypse ½ po murs, ⅝ po plafonds, peinture latex 2 couches',
1634 + 'detail': 'gypse 1/2 po murs, 5/8 po plafonds, peinture latex 2 couches',
1635 1635 'qte': 1154.19,
1636 1636 'unite': 'm² de gypse',
1637 1637 'mat': 13.92,
@@ -1778,24 +1778,12 @@ GRANDEURS = [{'libelle': 'Empreinte du bâtiment (m²) = (L + ép.) × (P + ép.
1778 1778 'releve_valeur': 280.11,
1779 1779 'releve_unite': 'm²',
1780 1780 'formule': '=F17*Données!D14*Données!D10'},
1781 − {'libelle': 'Murs extérieurs nets (m²) = bruts − ouvertures hors sol',
1782 − 'indice': '280,11 − 63,36',
1783 − 'releve_nom': 'Isolation des murs extérieurs R-24',
1784 − 'releve_valeur': 216.75,
1785 − 'releve_unite': 'm²',
1786 − 'formule': '=F19-E12'},
1787 1781 {'libelle': 'Surface de toit (m²) = empreinte × facteur de pente × débords',
1788 1782 'indice': '199,02 × 1,00 × 1,10',
1789 1783 'releve_nom': 'Couverture',
1790 1784 'releve_valeur': 218.92,
1791 1785 'releve_unite': 'm²',
1792 − 'formule': '=F16*Données!D18*Données!D19'},
1793 − {'libelle': 'Planchers portés (m²) = Σ aires des pièces hors sol',
1794 − 'indice': '176,40 + 176,40',
1795 − 'releve_nom': 'Planchers portés (solives)',
1796 − 'releve_valeur': 352.81,
1797 − 'releve_unite': 'm²',
1798 − 'formule': '=G12'}]
1786 + 'formule': '=F16*Données!D18*Données!D19'}]
1799 1787
1800 1788 DIVISIONS = {'03': 'Béton',
1801 1789 '05': 'Métaux',
modified IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/tp2_solutions.py +15 −7
@@ -10,7 +10,7 @@ PERMIS_TAUX, PERMIS_MIN, GCR = 4.70, 335, 2656.68
10 10 HONO, ASSUR, JURID, PREF, PRIME, DUREE, PROFIT = 0.04, 0.008, 9500, 0.0470, 0.0205, 12, 0.11
11 11 TPS, TVQ, ALTUS_LO, ALTUS_HI, RATIO_TERRAIN, PI2 = 0.05, 0.09975, 180, 330, 1.257, 10.7639
12 12
13 −# --- Q2 : du plan au relevé (7 grandeurs) ---
13 +# --- Q2 : du plan au relevé (5 grandeurs — version allégée du 2026-10-30) ---
14 14 rdc, etage = PAGES[1], PAGES[2]
15 15 ouv_ext = rdc["ouvertures_aire"] + etage["ouvertures_aire"]
16 16 pieces = rdc["aire_pieces"] + etage["aire_pieces"]
@@ -19,24 +19,26 @@ Q2["empreinte"] = (P["L_axe"] + P["ep_mur"]) * (P["P_axe"] + P["ep_mur"])
19 19 Q2["perimetre"] = 2 * (P["L_axe"] + P["P_axe"])
20 20 Q2["murs_fondation"] = Q2["perimetre"] * P["h_fondation"]
21 21 Q2["murs_ext_bruts"] = Q2["perimetre"] * P["h_etage"] * P["niveaux"]
22 −Q2["murs_ext_nets"] = Q2["murs_ext_bruts"] - ouv_ext
23 22 Q2["toiture"] = Q2["empreinte"] * P["facteur_pente"] * P["debords"]
24 −Q2["planchers"] = pieces
23 +MURS_NETS, PLANCHERS = Q2["murs_ext_bruts"] - ouv_ext, pieces # plus demandés aux étudiants ; conservés pour la lecture
24 +assert len(Q2) == len(GRANDEURS)
25 25 Q2_REF = {k: g["releve_valeur"] for k, g in zip(Q2, GRANDEURS)}
26 26
27 −# --- Q3 : bordereau des 22 composantes ---
27 +# --- Q3 : bordereau des 22 composantes (un prix unitaire nu par composante) ---
28 28 LIGNES = COMPOSANTES # alias : le TP travaille sur les composantes
29 29 for L in LIGNES:
30 − L["cu"] = L["mat"] + L["mo"] + L["eq"]
30 + L["cu"] = L["direct_u"] # = mat + mo + eq arrondis au cent (tp2_donnees)
31 31 L["montant"] = L["qte"] * L["cu"]
32 32 L["m_mat"], L["m_mo"], L["m_eq"] = L["qte"] * L["mat"], L["qte"] * L["mo"], L["qte"] * L["eq"]
33 33 L["poste"] = L["nom"]
34 34 DIRECT_NU = sum(L["montant"] for L in LIGNES)
35 −MAT, MO, EQ = (sum(L[k] for L in LIGNES) for k in ("m_mat", "m_mo", "m_eq"))
35 +MAT, MO, EQ = (sum(L[k] for L in LIGNES) for k in ("m_mat", "m_mo", "m_eq")) # informatif (plus demandé)
36 +TOP3_PART = None
36 37 PAR_DIV = {}
37 38 for L in LIGNES:
38 39 PAR_DIV[L["wbs"]] = PAR_DIV.get(L["wbs"], 0) + L["montant"]
39 40 TOP3 = sorted(LIGNES, key=lambda L: -L["montant"])[:3]
41 +TOP3_PART = sum(L["montant"] for L in TOP3) / DIRECT_NU
40 42
41 43 # --- Q4 : des coûts nus aux coûts directs du cours ---
42 44 AJUST = MOTEUR_QS["ajust_regional"]
@@ -70,6 +72,11 @@ TPS_M, TVQ_M = TOTAL * TPS, TOTAL * TVQ
70 72 TTC = TOTAL + TPS_M + TVQ_M
71 73 INTERC_18 = DC * I_TAUX * (18 / 12) * 0.5
72 74 PART_INDIRECTS = INDIRECTS / TOTAL
75 +# sensibilité du coût total à la durée du chantier (3e graphique du solutionnaire)
76 +def total_pour_duree(mois):
77 + i_m = DC * I_TAUX * (mois / 12) * 0.5
78 + return (DC + INDIRECTS - INTERC + i_m) * (1 + PROFIT)
79 +SENSIBILITE = {m: total_pour_duree(m) for m in (6, 12, 18, 24)}
73 80
74 81 # --- Q9 : marché (8 ventes retenues) ---
75 82 VENTES = [v for v in VENTES if v["adresse"] in VENTES_TP]
@@ -96,7 +103,7 @@ if __name__ == "__main__":
96 103 print("Q2 grandeurs (calcul vs relevé UQO Éval)")
97 104 for k, v in Q2.items():
98 105 print(f" {k:16s} {f(v)} vs {f(Q2_REF[k])} écart {100*(v/Q2_REF[k]-1):+.2f} %")
99 − print(f"Q3 direct nu {f(DIRECT_NU)} (moteur {MOTEUR_QS['direct_nu']}) ; mat {f(MAT)} mo {f(MO)} eq {f(EQ)} ; part MO {MO/DIRECT_NU:.1%}")
106 + print(f"Q3 direct nu {f(DIRECT_NU)} (moteur {MOTEUR_QS['direct_nu']}) ; [info] mat {f(MAT)} mo {f(MO)} eq {f(EQ)} ; part MO {MO/DIRECT_NU:.1%} ; top3 = {TOP3_PART:.1%} du direct nu")
100 107 for k in sorted(PAR_DIV): print(f" div {k} {f(PAR_DIV[k])} ({PAR_DIV[k]/DIRECT_NU:.1%}) moteur {MOTEUR_QS['by_wbs'][k]}")
101 108 print(" top3", [(L['poste'], round(L['montant'])) for L in TOP3])
102 109 print(f"Q4 localisé {f(DIRECT_LOC)} CG {f(CG)} FG {f(FG)} profit entr. {f(PROFIT_ENTR)} DIRECTS {f(DIRECTS)} cont {f(CONT)} D+C {f(DC)} (moteur {MOTEUR_QS['total']})")
@@ -105,6 +112,7 @@ if __name__ == "__main__":
105 112 print(f"Q7 honoraires {f(HONOS)} assurance {f(ASSURANCE)} juridique {JURID} TOTAL INDIRECTS {f(INDIRECTS)} ({INDIRECTS/DIRECTS:.1%} des directs)")
106 113 print(f"Q8 assiette {f(ASSIETTE)} profit {f(PROFIT_P)} TOTAL {f(TOTAL)} ; {PSF_HS:.2f} $/pi² hors sol ({AIRE_HS_PI2:.0f} pi²) ; {PSF_CH:.2f} $/pi² chauffé ({AIRE_CH_PI2:.0f}) ; {f(PAR_LOG)} $/logement")
107 114 print(f" profit sur directs seuls {f(PROFIT_ALT)} écart {f(ECART_CONV)} ; TPS {f(TPS_M)} TVQ {f(TVQ_M)} TTC {f(TTC)} ; part indirects {PART_INDIRECTS:.1%}")
115 + print(" sensibilité durée →", {m: round(v) for m, v in SENSIBILITE.items()}, f"; murs nets {f(MURS_NETS)} planchers {f(PLANCHERS)}")
108 116 print("Q9 ventes")
109 117 for v in VENTES: print(f" {v['date']} {v['adresse']:26s} prix {f(v['prix'],0)} terrain idx {f(v['terrain_idx'],0)} bât {f(v['bat_impl'],0)} {f(v['bat_m2'],0)} $/m² {f(v['bat_log'],0)} $/log ratio {v['ratio_role']:.3f}")
110 118 print(f" médianes : prix {f(MED_PRIX,0)} bât {f(MED_BAT,0)} $/log {f(MED_BAT_LOG,0)} $/m² {f(MED_BAT_M2,0)} ratio {MED_RATIO:.3f}")
modified IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/verif_attendus_tp2.py +8 −7
@@ -1,13 +1,13 @@
1 −"""Cellules attendues du solutionnaire Excel IMM1033 TP2 (quadruplex Gatineau, version 22 composantes) — utilisé par verif_solution_xlsx.py.
1 +"""Cellules attendues du solutionnaire Excel IMM1033 TP2 (quadruplex Gatineau, version 22 composantes à prix unitaire nu, 5 grandeurs — 2026-10-30) — utilisé par verif_solution_xlsx.py.
2 2 Référence : tp2_solutions.py (direct nu 471 100 $ → directs + contingences 611 843 $ → coût total 759 152 $ ; marché 866 833 $)."""
3 3 ATTENDUS = [
4 4 ("Accueil", "F22", 1.0, 0),
5 − ("Relevé", "F16", 199.02, 0.01), ("Relevé", "F17", 57.40, 0.01), ("Relevé", "F20", 216.75, 0.02), ("Relevé", "F21", 218.92, 0.02), ("Relevé", "F22", 352.80, 0.02),
6 − ("Relevé", "H16", 0, 0.0001), ("Relevé", "H22", 0, 0.0002),
7 − ("Relevé", "K27", 7.52, 0.001), ("Relevé", "L27", 4901.31, 0.1), ("Relevé", "L35", 77532.83, 1), ("Relevé", "L43", 54984.88, 1),
8 − ("Relevé", "L49", 471100.03, 1), ("Relevé", "E51", 335692.60, 1), ("Relevé", "E52", 129011.05, 1), ("Relevé", "E53", 6396.38, 1), ("Relevé", "E54", 0.274, 0.001),
9 − ("Relevé", "E58", 48704.30, 1), ("Relevé", "E60", 107365.06, 1), ("Relevé", "F60", 0.228, 0.001), ("Relevé", "H60", "✓", None), ("Relevé", "E70", 471100.03, 1),
10 − ("Relevé", "E72", 77532.83, 1), ("Relevé", "C72", "Revêtement de brique (80 %)", None), ("Relevé", "E73", 54984.88, 1), ("Relevé", "E74", 35680.61, 1),
5 + ("Relevé", "F16", 199.02, 0.01), ("Relevé", "F17", 57.40, 0.01), ("Relevé", "F18", 140.06, 0.01), ("Relevé", "F19", 280.11, 0.02), ("Relevé", "F20", 218.92, 0.02),
6 + ("Relevé", "H16", 0, 0.0001), ("Relevé", "H20", 0, 0.0002),
7 + ("Relevé", "I27", 4901.31, 0.1), ("Relevé", "I35", 77532.83, 1), ("Relevé", "I43", 54984.88, 1),
8 + ("Relevé", "I49", 471100.03, 1),
9 + ("Relevé", "E53", 48704.30, 1), ("Relevé", "E55", 107365.06, 1), ("Relevé", "F55", 0.228, 0.001), ("Relevé", "H55", "✓", None), ("Relevé", "E65", 471100.03, 1),
10 + ("Relevé", "E68", 77532.83, 1), ("Relevé", "C68", "Revêtement de brique (80 %)", None), ("Relevé", "E69", 54984.88, 1), ("Relevé", "E70", 35680.61, 1),
11 11 ("Bordereau", "C9", 471355.86, 1), ("Bordereau", "C10", 37708.47, 1), ("Bordereau", "C11", 35634.50, 1), ("Bordereau", "C12", 43575.91, 1),
12 12 ("Bordereau", "C13", 588274.74, 1), ("Bordereau", "C14", 23567.79, 1), ("Bordereau", "C15", 611842.53, 1), ("Bordereau", "D16", "✓ vous retrouvez la révision r1 (± 50 $ d'arrondi)", None),
13 13 ("Bordereau", "C19", 2875.66, 0.05), ("Bordereau", "C20", 10626.72, 0.01), ("Bordereau", "C23", 0.0675, 0.00001), ("Bordereau", "C24", 20649.69, 0.1),
@@ -19,4 +19,5 @@ ATTENDUS = [
19 19 ("Marché", "K14", 866833, 1), ("Marché", "L14", 4389, 1), ("Marché", "M14", 216708, 1), ("Marché", "N14", 1.327, 0.001),
20 20 ("Marché", "K18", -0.124, 0.001), ("Marché", "K20", -0.083, 0.001), ("Marché", "K21", "sous la fourchette", None), ("Marché", "K22", 0.267, 0.001),
21 21 ("Dashboard", "B6", 588275, 1), ("Dashboard", "C6", 759152, 1), ("Dashboard", "D6", 72078, 1), ("Dashboard", "E6", 75231, 1), ("Dashboard", "F6", 177.19, 0.01), ("Dashboard", "G6", -0.124, 0.001),
22 + ("Dashboard", "N29", 20650, 1), ("Dashboard", "O29", 759152, 1), ("Dashboard", "O30", 770612, 1),
22 23 ]
modified _Site_web/build/courses.py +1 −1
@@ -110,7 +110,7 @@ COURSES = {
110 110 "tps": [
111 111 {"n": 1, "name": "TP1 — Évaluation d’un terrain avec UQO Éval", "pond": "10 %", "remise": "Séance 5", "dir": "03_Travaux_pratiques/TP1_Evaluation_d_un_terrain", "enonce": "enonce/IMM1033-20_TP1_enonce.pdf", "gabarit": "gabarit_excel/IMM1033-20_TP1_gabarit.xlsx", "desc": "Terrain réel à vendre au 46, rue Michaud (Saint-Rosaire) : neuf ventes réelles de terrains vacants, tendance du marché foncier par le ratio prix/rôle, grille $/m² (temps, superficie, Harper, équité du rôle), contrôle par affectation et rôle indexé, zones inondables 2026 ; gabarit Excel avec suivi de progression.",
112 112 "extras": [{"file": "slides_theorie/main.pdf", "dst": "IMM1033-20_TP1_module_theorique.pdf", "label": "module théorique préparatoire (diapositives PDF)", "desc": "65 diapositives : le terrain dans la méthode du coût, cinq méthodes d’évaluation du terrain, rôle et ratio prix/rôle, données de marché, tendance et facteur temps, sélection des comparables, grille d’ajustement (sens, superficie, Harper, localisation), seuils net/brut et réconciliation, méthodes de contrôle, zones inondables, note à l’acheteur."}]},
113 − {"n": 2, "name": "TP2 — Bordereau de coût neuf d’un quadruplex avec UQO Éval", "pond": "15 %", "remise": "Séance 9", "dir": "03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf", "enonce": "enonce/IMM1033-20_TP2_enonce.pdf", "gabarit": "gabarit_excel/IMM1033-20_TP2_gabarit.xlsx", "desc": "Quadruplex de 2 étages à construire à Gatineau, cas d’étude réel du module Quantity Survey d’UQO Éval : du plan au relevé des quantités (12 grandeurs), tarification des 64 lignes RSMeans 2026 T4 localisées Gatineau, coûts directs au sens du cours, permis réel de Gatineau, GCR, intérêts intercalaires (préférentiel 4,70 %), honoraires, profit entrepreneurial, puis validation par 11 ventes réelles de quadruplex neufs (extraction du bâtiment et du profit), le moteur de coût d’UQO Éval et Altus 2026 ; gabarit Excel avec suivi de progression et note au promoteur."},
113 + {"n": 2, "name": "TP2 — Bordereau de coût neuf d’un quadruplex avec UQO Éval", "pond": "15 %", "remise": "Séance 9", "dir": "03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf", "enonce": "enonce/IMM1033-20_TP2_enonce.pdf", "gabarit": "gabarit_excel/IMM1033-20_TP2_gabarit.xlsx", "desc": "Quadruplex de 2 étages à construire à Gatineau, cas d’étude réel du module Quantity Survey d’UQO Éval : cinq grandeurs du relevé reproduites depuis le plan, bordereau de 22 composantes à prix unitaire nu RSMeans 2026 T4 (Gatineau), coûts directs au sens du cours, permis réel de Gatineau, GCR, intérêts intercalaires (préférentiel 4,70 %), honoraires, profit entrepreneurial, puis validation par 8 ventes réelles de quadruplex neufs (extraction du bâtiment et du profit), le moteur de coût d’UQO Éval et Altus 2026 ; gabarit Excel avec suivi de progression et note au promoteur."},
114 114 {"n": 3, "name": "TP3 — Ventilation de la dépréciation", "pond": "20 %", "remise": "Séance 13", "dir": "03_Travaux_pratiques/TP3_Ventilation_de_la_depreciation", "enonce": "enonce/IMM1033-20_TP3_enonce.pdf", "gabarit": "gabarit_excel/IMM1033-20_TP3_gabarit.xlsx", "desc": "Atelier-entrepôt de Hull : physique (curable, CT, LT), fonctionnelle, externe ; garde-fous anti-double-comptage."},
115 115 ],
116 116 "part_colors": ["#2976bb", "#0f8b8d", "#cca424", "#6b4fbb", "#107c4e"],
117 117
Menu

Theme