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 if not d: return "---" 30 if not d: return "---"
31 return ", ".join(f"{fr(k)} {round(v*100)}\\,\\%" for k, v in sorted(d.items(), key=lambda kv: -kv[1]) if v > 0) 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 def short_name(p): return re.sub(r" \(RSMeans.*\)$", "", p["name"]) 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 def load(n): 45 def load(n):
36 d = json.load(open(os.path.join(IMG, f"cas{n}", "data.json"))) 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 \toprule 379 \toprule
380 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\ 380 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\
381 \midrule 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~\$} \\ 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\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~\$} \\ 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 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~\$} \\ 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 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~\$} \\ 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 \bottomrule 387 \bottomrule
388 \end{tabular}\end{center} 388 \end{tabular}\end{center}
@@ -398,10 +398,10 @@ Entrée électrique 200 A & \texttt{260590101150} entrée et panneau résidentie
398 Fermes de toit + support OSB & \texttt{061753100210} & 1~106 & pi\textsuperscript{2} & 6,23~\$ & 0,67~\$ & 0,90~\$ & 8~629~\$ \\ 398 Fermes de toit + support OSB & \texttt{061753100210} & 1~106 & pi\textsuperscript{2} & 6,23~\$ & 0,67~\$ & 0,90~\$ & 8~629~\$ \\
399 Murs de fondation (h 1.2 m) & \texttt{033053404200} & 8,5 & vg\textsuperscript{3} & 281,49~\$ & 284,59~\$ & 23,89~\$ & 5~037~\$ \\ 399 Murs de fondation (h 1.2 m) & \texttt{033053404200} & 8,5 & vg\textsuperscript{3} & 281,49~\$ & 284,59~\$ & 23,89~\$ & 5~037~\$ \\
400 Fermes de toit + support OSB & \texttt{061636100100} & 1~190 & pi\textsuperscript{2} & 2,61~\$ & 0,56~\$ & --- & 3~771~\$ \\ 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 Poutre centrale LVL & \texttt{061813206150} & 80,3 & pi & 36,33~\$ & 1,74~\$ & --- & 3~058~\$ \\ 402 Poutre centrale LVL & \texttt{061813206150} & 80,3 & pi & 36,33~\$ & 1,74~\$ & --- & 3~058~\$ \\
403 Couverture & \texttt{073113100300} & 1~190 & pi\textsuperscript{2} & 1,65~\$ & 0,91~\$ & --- & 3~052~\$ \\ 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 Semelles filantes & \texttt{033053403935} & 9,5 & vg\textsuperscript{3} & 203,40~\$ & 106,48~\$ & 0,70~\$ & 2~959~\$ \\ 405 Semelles filantes & \texttt{033053403935} & 9,5 & vg\textsuperscript{3} & 203,40~\$ & 106,48~\$ & 0,70~\$ & 2~959~\$ \\
406 Perron préfabriqué & \texttt{034123500350} & 1,0 & unité & 2~400,75~\$ & 264,60~\$ & 225,53~\$ & 2~891~\$ \\ 406 Perron préfabriqué & \texttt{034123500350} & 1,0 & unité & 2~400,75~\$ & 264,60~\$ & 225,53~\$ & 2~891~\$ \\
407 Dalle sur sol isolée & \texttt{033053405010} & 512 & pi\textsuperscript{2} & 3,77~\$ & 1,24~\$ & 0,01~\$ & 2~573~\$ \\ 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 \toprule 720 \toprule
721 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\ 721 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\
722 \midrule 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 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~\$} \\ 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 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 8,00 unité & 848,89~\$ + 51,18~\$ = 900,07~\$ & \textbf{7~201~\$} \\ 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 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~\$} \\ 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 \bottomrule 728 \bottomrule
729 \end{tabular}\end{center} 729 \end{tabular}\end{center}
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} 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 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\ 1088 \textbf{Famille} & \textbf{Ligne RSMeans} & \textbf{Quantité (relevé $\rightarrow$ RSMeans)} & \textbf{Bare : mat. + MO (+ éq.) / unité} & \textbf{Montant} \\
1089 \midrule 1089 \midrule
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~\$} \\ 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 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~\$} \\ 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 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 14,00 unité & 843,46~\$ + 59,97~\$ = 903,43~\$ & \textbf{12~648~\$} \\ 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 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~\$} \\ 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 \midrule 1439 \midrule
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~\$} \\ 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 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~\$} \\ 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 Fenêtres & \texttt{085313100100} fenêtre de vinyle à guillotine 3 $\times$ 4… & 21,00 unité & 844,37~\$ + 65,16~\$ = 909,53~\$ & \textbf{19~100~\$} \\ 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 Plomberie brute (appareil… & \texttt{224116133580} plomberie brute par appareil (alimentation,… & 21,00 unité & 341,10~\$ + 429,52~\$ = 770,62~\$ & \textbf{16~183~\$} \\ 1444 Plomberie brute (appareil… & \texttt{224116133580} plomberie brute par appareil (alimentation,… & 21,00 unité & 341,10~\$ + 429,52~\$ = 770,62~\$ & \textbf{16~183~\$} \\
1445 \bottomrule 1445 \bottomrule
@@ -1749,7 +1749,7 @@ Fenêtres & comptées sur les plans & comptees 6,00 & \textbf{6,00} unité \\
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~\$} \\ 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 Plomberie brute (appareil… & \texttt{224116133580} plomberie brute par appareil (alimentation,… & 7,00 unité & 347,10~\$ + 427,96~\$ = 775,06~\$ & \textbf{5~425~\$} \\ 1750 Plomberie brute (appareil… & \texttt{224116133580} plomberie brute par appareil (alimentation,… & 7,00 unité & 347,10~\$ + 427,96~\$ = 775,06~\$ & \textbf{5~425~\$} \\
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~\$} \\ 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 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~\$} \\ 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 \bottomrule 1754 \bottomrule
1755 \end{tabular}\end{center} 1755 \end{tabular}\end{center}
@@ -1771,7 +1771,7 @@ Planchers portés (solives) & \texttt{061733101200} & 616 & pi\textsuperscript{2
1771 Revêtement wood (100 \%) & \texttt{074623103600} & 668 & pi\textsuperscript{2} & 3,11~\$ & 1,45~\$ & --- & 3~045~\$ \\ 1771 Revêtement wood (100 \%) & \texttt{074623103600} & 668 & pi\textsuperscript{2} & 3,11~\$ & 1,45~\$ & --- & 3~045~\$ \\
1772 Couverture & \texttt{074113100300} & 952 & pi\textsuperscript{2} & 1,26~\$ & 1,78~\$ & --- & 2~893~\$ \\ 1772 Couverture & \texttt{074113100300} & 952 & pi\textsuperscript{2} & 1,26~\$ & 1,78~\$ & --- & 2~893~\$ \\
1773 Gypse 1/2 po murs (face int… & \texttt{092910300350} & 1~459 & pi\textsuperscript{2} & 0,75~\$ & 1,01~\$ & --- & 2~568~\$ \\ 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 Peinture 2 couches (murs +… & \texttt{099123720840} & 2~075 & pi\textsuperscript{2} & 0,58~\$ & 0,59~\$ & --- & 2~428~\$ \\ 1775 Peinture 2 couches (murs +… & \texttt{099123720840} & 2~075 & pi\textsuperscript{2} & 0,58~\$ & 0,59~\$ & --- & 2~428~\$ \\
1776 \bottomrule 1776 \bottomrule
1777 \end{tabular}\end{center} 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 \begin{frame}{TP2 --- Bordereau de coût de remplacement neuf avec UQO Éval (15\,\%)} 1456 \begin{frame}{TP2 --- Bordereau de coût de remplacement neuf avec UQO Éval (15\,\%)}
1457 \footnotesize 1457 \footnotesize
1458 \begin{importbox}[Mandat] 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 \end{importbox} 1460 \end{importbox}
1461−\vspace{0.5mm}
1462 \uqotitle{Objectifs pédagogiques :} 1461 \uqotitle{Objectifs pédagogiques :}
1463−\begin{itemize} 1462+\begin{itemize}\scriptsize\setlength{\itemsep}{0pt}
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 1463+ \item 5 grandeurs du relevé reproduites ; 22 composantes chiffrées (quantité $\times$ prix nu, 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 1464+ \item Coûts nus $\rightarrow$ directs du cours (conditions générales, frais généraux, profit de l'entrepreneur) $\rightarrow$ contingences
1466− \item Calculer les indirects réels : permis de Gatineau (\texttt{MAX}), GCR, intercalaires avec facteur ½, honoraires --- séance 8 1465+ \item Indirects réels : permis de Gatineau (\texttt{MAX}), GCR, intercalaires (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 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 \end{itemize} 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 \end{frame} 1469 \end{frame}
1473 1470
1474 \begin{frame}{TP2 --- Livrables, modalités et gabarit} 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 \uqotitle{Les onglets du gabarit :} 1489 \uqotitle{Les onglets du gabarit :}
1493 \begin{itemize} 1490 \begin{itemize}
1494 \item \textbf{Données} : 10 tableaux réels (ne pas modifier) 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 \item \textbf{Bordereau} : Q4-Q8 --- directs du cours, contingences, permis, GCR, intercalaires, honoraires, profit, \$/pi\up{2} 1493 \item \textbf{Bordereau} : Q4-Q8 --- directs du cours, contingences, permis, GCR, intercalaires, honoraires, profit, \$/pi\up{2}
1497 \item \textbf{Marché} : Q9 --- extraction sur 8 ventes, moteur, Altus, profit extrait 1494 \item \textbf{Marché} : Q9 --- extraction sur 8 ventes, moteur, Altus, profit extrait
1498 \item \textbf{Dashboard} + \textbf{Note} : Q10 --- KPI, verdict, graphiques, note 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 % --- Packages requis --- 11 % --- Packages requis ---
12 \RequirePackage[utf8]{inputenc} 12 \RequirePackage[utf8]{inputenc}
13+\DeclareUnicodeCharacter{221A}{\ensuremath{\surd}} % « √ » (seance07_qs_cas) — 2026-10-30
13 \RequirePackage[T1]{fontenc} 14 \RequirePackage[T1]{fontenc}
14 \RequirePackage[french]{babel} 15 \RequirePackage[french]{babel}
15 \RequirePackage{lmodern} 16 \RequirePackage{lmodern}
@@ -490,7 +491,7 @@
490 \node[anchor=center, text=uqoBlanc, font=\fontsize{4.6}{5.5}\selectfont\ttfamily, 491 \node[anchor=center, text=uqoBlanc, font=\fontsize{4.6}{5.5}\selectfont\ttfamily,
491 fill=uqoBleu!55!uqoNavy, rounded corners=0.9pt, inner xsep=4pt, inner ysep=1.4pt, 492 fill=uqoBleu!55!uqoNavy, rounded corners=0.9pt, inner xsep=4pt, inner ysep=1.4pt,
492 minimum width=0.5*#1] 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 {\textcolor{uqoOr}{\faIcon{lock}}\hspace{3pt}#3}; 495 {\textcolor{uqoOr}{\faIcon{lock}}\hspace{3pt}#3};
495 \draw[uqoGrisClair, line width=0.35pt] (img.south west) rectangle (img.north east); 496 \draw[uqoGrisClair, line width=0.35pt] (img.south west) rectangle (img.north east);
496 }{% 497 }{%
@@ -499,8 +500,8 @@
499 500
500 % Épingle numérotée : \uqopin{x}{y}{n} — x,y = fractions (0–1) de la capture, origine en bas à gauche 501 % Épingle numérotée : \uqopin{x}{y}{n} — x,y = fractions (0–1) de la capture, origine en bas à gauche
501 \newcommand{\uqopin}[3]{% 502 \newcommand{\uqopin}[3]{%
502− \path ($(img.south west)!#1!(img.south east)$) coordinate (uqopinx); 503+ \path (img.south west) -- (img.south east) coordinate[pos=#1] (uqopinx);
503− \path ($(img.south west)!#2!(img.north west)$) coordinate (uqopiny); 504+ \path (img.south west) -- (img.north west) coordinate[pos=#2] (uqopiny);
504 \node[circle, fill=uqoOr, text=uqoNavy, font=\fontsize{6.5}{7}\selectfont\bfseries, 505 \node[circle, fill=uqoOr, text=uqoNavy, font=\fontsize{6.5}{7}\selectfont\bfseries,
505 inner sep=0pt, minimum size=4.2mm, draw=uqoBlanc, line width=0.7pt] 506 inner sep=0pt, minimum size=4.2mm, draw=uqoBlanc, line width=0.7pt]
506 at (uqopinx |- uqopiny) {#3};% 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 # IMM1033-20 · TP2 — Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval (15 %) 1 # IMM1033-20 · TP2 — Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval (15 %)
2 2
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. 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 - **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). 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). 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, 71 cellules vérifiées par recalcul Excel) · `donnees/` : extraits bruts (JSON du cas, ventes, moteur, photos originales). 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), `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`. 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 - Recompiler : `cd enonce && latexmk -lualatex IMM1033-20_TP2_enonce.tex` (idem solutionnaire). 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 \usepackage{fontawesome5} 9 \usepackage{fontawesome5}
10 \usepackage{pgfplots} 10 \usepackage{pgfplots}
11 \pgfplotsset{compat=1.18} 11 \pgfplotsset{compat=1.18}
12+\usetikzlibrary{arrows.meta,positioning,calc}
12 13
13 \setexamCours{IMM1033-20} 14 \setexamCours{IMM1033-20}
14 \setexamTitreCours{Méthodes du coût en évaluation immobilière} 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 \label{fig:photos} 114 \label{fig:photos}
114 \end{figure} 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 \begin{center} 118 \begin{center}
118 \small 119 \small
119 \renewcommand{\arraystretch}{1.3} 120 \renewcommand{\arraystretch}{1.3}
120−\begin{tabular}{@{}cp{7.9cm}lc@{}} 121+\begin{tabular}{@{}cp{7.3cm}lcc@{}}
121 \toprule 122 \toprule
122− & \textbf{Question} & \textbf{Onglet Excel} & \textbf{Points} \\ 123+ & \textbf{Question} & \textbf{Onglet Excel} & \textbf{Points} & \textbf{Temps} \\
123 \midrule 124 \midrule
124−\textcolor{uqoBleuClair}{\faIcon{sitemap}} & 1. Méthode d'estimation et nature du coût & \onglet{Relevé} & 8 \\ 125+\textcolor{uqoBleuClair}{\faIcon{sitemap}} & 1. Méthode d'estimation et nature du coût & \onglet{Relevé} & 8 & 30 min \\
125−\textcolor{uqoBleuClair}{\faIcon{drafting-compass}} & 2. Du plan au relevé : sept grandeurs & \onglet{Relevé} & 8 \\ 126+\textcolor{uqoBleuClair}{\faIcon{drafting-compass}} & 2. Du plan au relevé : cinq grandeurs & \onglet{Relevé} & 6 & 15 min \\
126−\textcolor{uqoBleuClair}{\faIcon{calculator}} & 3. Bordereau des 22 composantes & \onglet{Relevé} & 12 \\ 127+\textcolor{uqoBleuClair}{\faIcon{calculator}} & 3. Bordereau des 22 composantes & \onglet{Relevé} & 10 & 30 min \\
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{layer-group}} & 4. Des coûts nus aux coûts directs du cours & \onglet{Bordereau} & 10 & 20 min \\
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{file-signature}} & 5. Permis réel de Gatineau et garantie GCR & \onglet{Bordereau} & 8 & 10 min \\
129−\textcolor{uqoOr!85!black}{\faIcon{percentage}} & 6. Intérêts intercalaires & \onglet{Bordereau} & 10 \\ 130+\textcolor{uqoOr!85!black}{\faIcon{percentage}} & 6. Intérêts intercalaires & \onglet{Bordereau} & 10 & 20 min \\
130−\textcolor{uqoOr!85!black}{\faIcon{briefcase}} & 7. Autres indirects et total & \onglet{Bordereau} & 8 \\ 131+\textcolor{uqoOr!85!black}{\faIcon{briefcase}} & 7. Autres indirects et total & \onglet{Bordereau} & 8 & 15 min \\
131−\textcolor{uqoOr!85!black}{\faIcon{coins}} & 8. Profit entrepreneurial, coût total, unités de comparaison & \onglet{Bordereau} & 10 \\ 132+\textcolor{uqoOr!85!black}{\faIcon{coins}} & 8. Profit entrepreneurial, coût total, unités de comparaison & \onglet{Bordereau} & 10 & 20 min \\
132−\textcolor{uqoBleuEval}{\faIcon{balance-scale}} & 9. Validation : marché, moteur de coût, Altus & \onglet{Marché} & 14 \\ 133+\textcolor{uqoBleuEval}{\faIcon{balance-scale}} & 9. Validation : marché, moteur de coût, Altus & \onglet{Marché} & 14 & 60 min \\
133−\textcolor{uqoVert}{\faIcon{tachometer-alt}} & 10. Tableau de bord et note au promoteur & \onglet{Dashboard} \onglet{Note} & 14 \\ 134+\textcolor{uqoVert}{\faIcon{tachometer-alt}} & 10. Tableau de bord et note au promoteur & \onglet{Dashboard} \onglet{Note} & 16 & 75 min \\
134 \bottomrule 135 \bottomrule
135 \end{tabular} 136 \end{tabular}
136 \end{center} 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 \end{donnees} 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 \begin{surlelabo}[Le laboratoire UQO Éval --- ce que vous y trouverez pour ce travail] 174 \begin{surlelabo}[Le laboratoire UQO Éval --- ce que vous y trouverez pour ce travail]
140 \begin{itemize}[leftmargin=14pt, itemsep=2pt] 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 \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. 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 \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. 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 \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). 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 \label{fig:etage} 228 \label{fig:etage}
194 \end{figure} 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 \begin{center} 232 \begin{center}
198−\tiny 233+\footnotesize
199−\setlength{\tabcolsep}{2pt}
200 \rowcolors{2}{uqoBgClair!70}{white} 234 \rowcolors{2}{uqoBgClair!70}{white}
201−\begin{tabular}{@{}lrrrrrrrrrr@{}} 235+\input{tables_tp2_plans}
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}
210 \end{center} 236 \end{center}
211 \smallskip 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 \end{donnees} 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 \begin{center} 242 \begin{center}
217 \small 243 \small
218 \rowcolors{2}{uqoBgClair!70}{white} 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 \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. 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 \end{donnees} 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 \begin{center} 252 \begin{center}
227−\scriptsize 253+\footnotesize
228−\setlength{\tabcolsep}{2.8pt} 254+\setlength{\tabcolsep}{3.2pt}
229 \rowcolors{2}{uqoBgClair!70}{white} 255 \rowcolors{2}{uqoBgClair!70}{white}
230 \input{tables_tp2} 256 \input{tables_tp2}
231 \end{center} 257 \end{center}
232 \smallskip 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 \end{donnees} 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 \begin{center} 263 \begin{center}
238 \small 264 \small
239 \rowcolors{2}{uqoBgClair!70}{white} 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 \end{center} 267 \end{center}
242 \end{donnees} 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 \begin{center} 271 \begin{center}
246 \small 272 \small
247 \rowcolors{2}{uqoBgClair!70}{white} 273 \rowcolors{2}{uqoBgClair!70}{white}
@@ -262,7 +288,7 @@ Contingences de construction & 5~\% des directs nus localisés & imprévus de ch
262 \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. 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 \end{donnees} 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 \begin{center} 292 \begin{center}
267 \footnotesize 293 \footnotesize
268 \rowcolors{2}{uqoBgClair!70}{white} 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 \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. 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 \end{donnees} 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 \begin{center} 319 \begin{center}
294−\tiny 320+\scriptsize
295−\setlength{\tabcolsep}{2.4pt} 321+\setlength{\tabcolsep}{3pt}
296 \rowcolors{2}{uqoBgClair!70}{white} 322 \rowcolors{2}{uqoBgClair!70}{white}
297 \input{tables_tp2_ventes} 323 \input{tables_tp2_ventes}
298 \end{center} 324 \end{center}
299 \smallskip 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 \end{donnees} 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 \begin{center} 330 \begin{center}
305 \scriptsize 331 \scriptsize
306 \setlength{\tabcolsep}{2.5pt} 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 \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 \$}} 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 \vspace{8pt} 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 \begin{minipage}[t]{0.52\textwidth} 352 \begin{minipage}[t]{0.52\textwidth}
327 \scriptsize 353 \scriptsize
328 \rowcolors{2}{uqoBgClair!70}{white} 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 \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). 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 \end{questionexam} 387 \end{questionexam}
362 388
363−\begin{questionexam}{\faIcon{drafting-compass}\quad Du plan au relevé : sept grandeurs}{8} 389+\begin{questionexam}{\faIcon{drafting-compass}\quad Du plan au relevé : cinq grandeurs}{6}
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}) : 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 \begin{enumerate}[label=\alph*), itemsep=2pt] 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; 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}$;
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. 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 \end{enumerate} 394 \end{enumerate}
369 \begin{formule} 395 \begin{formule}
370 $\text{Murs extérieurs bruts} = 57{,}40 \times 2{,}44 \times 2$ \qquad soit \fx{=F17*Données!D14*Données!D10} 396 $\text{Murs extérieurs bruts} = 57{,}40 \times 2{,}44 \times 2$ \qquad soit \fx{=F17*Données!D14*Données!D10}
371 \end{formule} 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 \end{questionexam} 399 \end{questionexam}
374 400
375−\begin{questionexam}{\faIcon{calculator}\quad Bordereau des 22 composantes}{12} 401+\begin{questionexam}{\faIcon{calculator}\quad Bordereau des 22 composantes}{10}
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 : 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 \begin{enumerate}[label=\alph*), itemsep=2pt] 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; 404+ \item \xl{Relevé}{I27:I48} : le \textbf{montant} de chaque composante $=$ quantité $\times$ prix unitaire nu (une formule, copiée vers le bas);
379− \item \xl{Relevé}{L27:L48} : le \textbf{montant} $=$ quantité $\times$ coût unitaire; 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);
380− \item \xl{Relevé}{L49} : le \textbf{coût direct nu total}; 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;
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}; 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é).
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}).
384 \end{enumerate} 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 \end{questionexam} 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 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}) : 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 \begin{enumerate}[label=\alph*), itemsep=2pt] 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 \item conditions générales du chantier (8~\% des directs nus localisés); 418 \item conditions générales du chantier (8~\% des directs nus localisés);
393 \item frais généraux de l'entrepreneur (7~\% du cumul : directs $+$ conditions générales); 419 \item frais généraux de l'entrepreneur (7~\% du cumul : directs $+$ conditions générales);
394 \item profit de l'entrepreneur général (8~\% du cumul précédent); 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 \item contingences de construction (5~\% des directs nus localisés); 422 \item contingences de construction (5~\% des directs nus localisés);
397 \item \textbf{directs $+$ contingences}. La cellule \cel{D16} vérifie que vous retrouvez le total de la révision r1 (611\,823~\$, $\pm$ 50~\$). 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 \end{enumerate} 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 \end{questionexam} 426 \end{questionexam}
400 427
401 \begin{questionexam}{\faIcon{file-signature}\quad Permis de construction réel et garantie GCR}{8} 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 Points : a (5); b (3); c (2); d (4). 469 Points : a (5); b (3); c (2); d (4).
443 \end{questionexam} 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 \begin{enumerate}[label=\alph*), itemsep=2pt] 473 \begin{enumerate}[label=\alph*), itemsep=2pt]
447 \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é); 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 \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; 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é; 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é;
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. 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 \end{enumerate} 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 \end{questionexam} 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 \textbf{Question} & \textbf{Objet évalué} & \textbf{Points} \\ 490 \textbf{Question} & \textbf{Objet évalué} & \textbf{Points} \\
464 \midrule 491 \midrule
465 1 & Méthode par composantes motivée (3); les trois autres méthodes (2); remplacement par définition et limites (3) & 8 \\ 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 \\ 493+2 & Cinq grandeurs par formule liée à \onglet{Données} (4); écarts et correction des anomalies (2) & 6 \\
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 \\ 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 \\
468−4 & Ordre des majorations respecté (5); directs du cours, contingences et contrôle r1 (3) & 8 \\ 495+4 & Ordre des majorations respecté, taux lus dans \onglet{Données} (6); directs du cours, contingences et contrôle r1 (4) & 10 \\
469 5 & Permis : \fx{MAX} fonctionnel et assiette (5); GCR (3) & 8 \\ 496 5 & Permis : \fx{MAX} fonctionnel et assiette (5); GCR (3) & 8 \\
470 6 & Taux (2); formule complète avec ½ (5); explication et cas limite (3) & 10 \\ 497 6 & Taux (2); formule complète avec ½ (5); explication et cas limite (3) & 10 \\
471 7 & Honoraires sur la bonne assiette (3); assurance (1); total et ratio (4) & 8 \\ 498 7 & Honoraires sur la bonne assiette (3); assurance (1); total et ratio (4) & 8 \\
472 8 & Assiette, profit et total (4); unités de comparaison (3); convention chiffrée et argumentée (3) & 10 \\ 499 8 & Assiette, profit et total (4); unités de comparaison (3); convention chiffrée et argumentée (3) & 10 \\
473 9 & Extraction sur huit ventes et médianes (5); écarts et position Altus (3); profit extrait (2); lecture (4) & 14 \\ 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 \midrule 502 \midrule
476 & \textbf{Total} & \textbf{100} \\ 503 & \textbf{Total} & \textbf{100} \\
477 \bottomrule 504 \bottomrule
@@ -491,7 +518,7 @@ Points : KPI (4), verdict et 3\up{e} graphique (4), note (6 --- le chiffrage du
491 518
492 \begin{enumerate}[leftmargin=18pt, itemsep=3pt] 519 \begin{enumerate}[leftmargin=18pt, itemsep=3pt]
493 \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} 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 \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} 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 \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. 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 \item UQO Éval --- moteur de coût \web{/cout} (\texttt{POST /api/cost/estimate}, mode construction, prix du 29 octobre 2026) : tableau 10. 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 \toprule 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 \midrule 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 \\ 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 & 6\,500,00 & 1\,172,78 & 460,00 \\ 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 de fondation & 108,35 & 90,32 & 6,39 \\ 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 & 75,83 & 24,47 & 0,11 \\ 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 & 43,27 & 11,41 & 0,00 \\ 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 (ext. brut + cloisons) & 17,26 & 15,47 & 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 & 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 & 54,66 & 25,26 & 9,98 \\ 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é (murs nets + comble) & 9,56 & 7,99 & 2,86 \\ 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 & 358,33 & 88,80 & 0,00 \\ 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 & 16,90 & 21,53 & 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 & 38,43 \\
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 \\ 15+11 & 08 & Fenêtres & fenêtre de vinyle à guillotine 3 $\times$ 4,5 pi avec moustiquaire & 24,00 & unité & 900,07 \\
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 \\ 16+\bottomrule
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 \\ 17+\end{tabular}
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 \\ 18+
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 \\ 19+\par\nopagebreak[0]\vspace{2pt}\par
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 \\ 20+
21−17 & 11 & Cuisines & armoires, comptoirs stratifiés, éviers avec robinet & 4,00 & logement & 12\,382,26 & 1\,363,96 & 0,00 \\ 21+\begin{tabular}{@{}rlp{3.55cm}p{5.6cm}rp{1.8cm}r@{}}
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 \\ 22+\toprule
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 \\ 23+\textbf{N\up{o}} & \textbf{Div.} & \textbf{Composante} & \textbf{Ce qu'elle comprend} & \textbf{Quantité} & \textbf{Unité} & \textbf{Prix nu (\$/u)} \\
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 \\ 24+\midrule
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 \\ 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−22 & 32 & Perron préfabriqué & 5 contremarches, 5 pi & 1,00 & unité & 2\,244,00 & 267,03 & 224,72 \\ 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 \bottomrule 36 \bottomrule
28 \end{tabular} 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 2 & Semelles filantes & 2 $\times$ (L + P) & 57,40 & m \\ 6 2 & Semelles filantes & 2 $\times$ (L + P) & 57,40 & m \\
7 3 & Murs de fondation (h 2.44 m) & périmètre $\times$ hauteur du mur & 140,06 & m\up{2} \\ 7 3 & Murs de fondation (h 2.44 m) & périmètre $\times$ hauteur du mur & 140,06 & m\up{2} \\
8 4 & Murs extérieurs ossature 2$\times$6 & périmètre $\times$ hauteur d'étage $\times$ niveaux & 280,11 & m\up{2} \\ 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} \\ 9+5 & Couverture & empreinte $\times$ facteur de pente $\times$ débords & 218,92 & 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} \\
12 \bottomrule 10 \bottomrule
13 \end{tabular} 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 \toprule 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 \midrule 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 \\ 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 (Saint-Renéureau de poste) & 2025-11-21 & 1\,168\,000 & 2021 & 190,2 & 657,6 & 2 / D & 229\,200 & 567\,300 & 796\,500 \\ 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 & 929,5 & 2 / D & 204\,000 & 594\,900 & 798\,900 \\ 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 (Saint-Renéureau de poste) & 2025-09-12 & 1\,165\,000 & 2024 & 190,2 & 657,6 & 2 / D & 229\,200 & 683\,400 & 912\,600 \\ 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 & 587,9 & 2 / D & 184\,500 & 839\,600 & 1\,024\,100 \\ 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 & 565,5 & 2 / J & 184\,100 & 799\,800 & 983\,900 \\ 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 (Saint-Renéureau de poste) & 2025-02-03 & 1\,140\,000 & 2022 & 190,2 & 657,6 & 2 / D & 229\,200 & 573\,000 & 802\,200 \\ 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 & 695,5 & 2 / D & 186\,200 & 715\,000 & 901\,200 \\ 12+Q8 & 1151, Rue Notre-Dame & Gatineau & 2024-05-07 & 849\,411 & 2024 & 194,4 & 186\,200 & 901\,200 \\
13 \bottomrule 13 \bottomrule
14 \end{tabular} 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 % IMM1033-20 — TP2 : SOLUTIONNAIRE — Bordereau de coût de remplacement neuf d'un quadruplex (UQO Éval, RSMeans 2026 T4) 2 % IMM1033-20 — TP2 : SOLUTIONNAIRE — Bordereau de coût de remplacement neuf d'un quadruplex (UQO Éval, RSMeans 2026 T4)
3 % Réservé à l'enseignant — Simon-Pierre Boucher, UQO 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 \documentclass[11pt]{article} 6 \documentclass[11pt]{article}
7 \usepackage[solutionnaire]{uqo-examen} 7 \usepackage[solutionnaire]{uqo-examen}
@@ -14,27 +14,27 @@
14 \setexamDuree{Travail individuel à la maison (gabarit Excel obligatoire + laboratoire UQO Éval)} 14 \setexamDuree{Travail individuel à la maison (gabarit Excel obligatoire + laboratoire UQO Éval)}
15 \setexamRemise{Séance 9 (12 novembre 2026) --- dépôt Moodle} 15 \setexamRemise{Séance 9 (12 novembre 2026) --- dépôt Moodle}
16 \setexamPonderation{15 \% de la note finale} 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 \begin{document} 19 \begin{document}
20 \pagetitreexamen 20 \pagetitreexamen
21 21
22 \begin{notescorrection}[Philosophie de correction] 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 \end{notescorrection} 24 \end{notescorrection}
25 25
26 \partieexamen{Solutions}{} 26 \partieexamen{Solutions}{}
27 27
28 \begin{questionexam}{Méthode d'estimation et nature du coût estimé}{8} 28 \begin{questionexam}{Méthode d'estimation et nature du coût estimé}{8}
29 \begin{solution} 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 \end{solution} 31 \end{solution}
32 \begin{notescorrection} 32 \begin{notescorrection}
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). 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 \end{notescorrection} 34 \end{notescorrection}
35 \end{questionexam} 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 \begin{solution} 38 \begin{solution}
39 \begin{center} 39 \begin{center}
40 \footnotesize 40 \footnotesize
@@ -46,37 +46,35 @@ Méthode par composantes motivée par les données : 3 pts; trois autres méthod
46 2 & Périmètre $=2(18{,}30+10{,}40)$ & 57,40 m & 57,40 & 0,00 \% \\ 46 2 & Périmètre $=2(18{,}30+10{,}40)$ & 57,40 m & 57,40 & 0,00 \% \\
47 3 & Murs de fondation $=57{,}40\times2{,}44$ & 140,06 m\up{2} & 140,06 & 0,00 \% \\ 47 3 & Murs de fondation $=57{,}40\times2{,}44$ & 140,06 m\up{2} & 140,06 & 0,00 \% \\
48 4 & Murs extérieurs bruts $=57{,}40\times2{,}44\times2$ & 280,11 m\up{2} & 280,11 & 0,00 \% \\ 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 \% \\ 49+5 & Toit $=199{,}02\times1{,}00\times1{,}10$ & 218,92 m\up{2} & 218,92 & 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 \% \\
52 \bottomrule 50 \bottomrule
53 \end{tabular} 51 \end{tabular}
54 \end{center} 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 \end{solution} 54 \end{solution}
57 \begin{notescorrection} 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 \end{notescorrection} 57 \end{notescorrection}
60 \end{questionexam} 58 \end{questionexam}
61 59
62−\begin{questionexam}{Bordereau des 22 composantes}{12} 60+\begin{questionexam}{Bordereau des 22 composantes}{10}
63 \begin{solution} 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$~\$.\\ 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$~\$.\\
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~\%}.\\ 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~\$.\\
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 « ✓ »).\\ 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}.\\
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. 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 \end{solution} 66 \end{solution}
69 \begin{notescorrection} 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 \end{notescorrection} 69 \end{notescorrection}
72 \end{questionexam} 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 \begin{solution} 73 \begin{solution}
76 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. 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 \end{solution} 75 \end{solution}
78 \begin{notescorrection} 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 \end{notescorrection} 78 \end{notescorrection}
81 \end{questionexam} 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 \end{notescorrection} 144 \end{notescorrection}
147 \end{questionexam} 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 \begin{solution} 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 \end{solution} 150 \end{solution}
153 \begin{notescorrection} 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 \end{notescorrection} 153 \end{notescorrection}
156 \end{questionexam} 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 # --- 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 --- 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 COMP_DEF = [ # (division, composante, détail, quantité, unité, [numéros de lignes]) 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 ("33", "Branchements des services", "aqueduc, égout et électricité (catalogue UQO Éval)", 1, "forfait", [4]), 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 ("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]), 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]), 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é ½ po, cloisons 2 × 4, poutre LVL, colonnes", 572.42, "m² de mur (ext. brut + cloisons)", [12, 13, 14, 15, 16]), 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 ½ po, membrane APP 2 couches, soffites, gouttières et descentes", 218.92, "m² de toit", [17, 18, 26, 27, 28, 29]), 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é (murs nets + comble)", [21, 22]), 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 ("07", "Revêtement de brique (80 %)", "placage de brique standard, appareil courant", 173.40, "m² de mur net", [24]), 90 ("07", "Revêtement de brique (80 %)", "placage de brique standard, appareil courant", 173.40, "m² de mur net", [24]),
91 ("07", "Revêtement de vinyle (20 %)", "revêtement de vinyle double 5 po", 43.35, "m² de mur net", [25]), 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 ("08", "Portes extérieures et portes-patio", "4 portes d'acier isolées + 4 portes-patio coulissantes 6 pi", 8, "unité", [31, 32]), 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 ("08", "Portes intérieures et de garde-robe", "16 portes prémontées à âme creuse + 11 portes pliantes", 27, "unité", [33, 34]), 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 ("09", "Planchers finis", "bois franc préverni (60 %), céramique (25 %), vinyle de luxe (15 %)", 352.81, "m² de plancher", [38, 39, 40]), 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 ("09", "Escaliers, rampes, plinthes et tablettes", "2 escaliers préfabriqués, mains courantes, plinthe ogee, tablettes de pin", 1, "forfait", [19, 20, 41, 42]), 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 ("11", "Cuisines", "armoires, comptoirs stratifiés, éviers avec robinet", 4, "logement", [43, 44, 45]), 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 by_wbs_comp = {} 118 by_wbs_comp = {}
119 for c in composantes: 119 for c in composantes:
120 by_wbs_comp[c["wbs"]] = round(by_wbs_comp.get(c["wbs"], 0) + c["direct_r1"], 2) 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 REL_N = {m["nom"]: m for m in mes} 122 REL_N = {m["nom"]: m for m in mes}
123 GRANDEURS = [ 123 GRANDEURS = [
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)"), 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 ("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)"), 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 ("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"), 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 ("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"), 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 ("Surface de toit (m²) = empreinte × facteur de pente × débords", "199,02 × 1,00 × 1,10", "Couverture", "=F16*Données!D18*Données!D19"), 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 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] 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 Toutes les données proviennent de www.uqo-eval.app (extraction du 29 octobre 2026) : cas d'étude « Cas 9 — Quadruplex 2 étages, 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 Gatineau » du module Quantity Survey (plans, relevé des quantités, révision r1 tarifée RSMeans 2026 T4 localisée Gatineau, condensée 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 Zones de réponse (identiques à l'énoncé LaTeX) : 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 Bordereau Q4 : C9:C15 | Q5 : C19:C20 | Q6 : C23:C24 · C25 | Q7 : C29:C30 · C32:C33 | Q8 : C36:C43 · C44 10 Bordereau Q4 : C9:C15 | Q5 : C19:C20 | Q6 : C23:C24 · C25 | Q7 : C29:C30 · C32:C33 | Q8 : C36:C43 · C44
11 Marché Q9 : J6:N13 · K14:N14 · K18 · K20:K22 · C25 11 Marché Q9 : J6:N13 · K14:N14 · K18 · K20:K22 · C25
12 Dashboard Q10 : KPI D6:G6 (4 jaunes) · C8 · graphique 3 · onglet Note 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 titre_section(ws, 10, 2, "Parcours du travail — progression mise à jour automatiquement", 7) 183 titre_section(ws, 10, 2, "Parcours du travail — progression mise à jour automatiquement", 7)
184 entetes(ws, 11, 2, ["", "Question", "Onglet (cliquer)", "Points", "Zone principale", "Statut", "Repère de correction"]) 184 entetes(ws, 11, 2, ["", "Question", "Onglet (cliquer)", "Points", "Zone principale", "Statut", "Repère de correction"])
185 NC = len(COMPOSANTES) 185 NC = len(COMPOSANTES)
186+NG = len(GRANDEURS) # 5 grandeurs (16..20)
186 R_C0, R_C1 = 27, 27 + NC - 1 # 27..48 187 R_C0, R_C1 = 27, 27 + NC - 1 # 27..48
187 R_CT = R_C1 + 1 # 49 total 188 R_CT = R_C1 + 1 # 49 total
188−R_MAT = R_CT + 2 # 51..54 189+R_DH = R_CT + 3 # 52 entête divisions
189−R_DH = R_MAT + 6 # 57 entête divisions 190+R_D0, R_D1 = R_DH + 1, R_DH + 12 # 53..64 (12 divisions : 05 fusionnée dans 06)
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 + 4 # 68..70 (entête 67)
191−R_TOP = R_D1 + 3 # 73..75
192 parcours = [ 192 parcours = [
193 ("1", "Méthode d'estimation et nature du coût", "Relevé", 8, "C5", None, "Relevé abrégé / composantes ; remplacement par définition"), 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"), 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 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}", 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é!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})", 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− 2 * NC + 1 + 4 + 2 * 12 + 6, "Direct nu ≈ 471 085 $ ; brique = poste le plus lourd"), 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", 8, "C9:C15", "COUNTBLANK(Bordereau!C9:C15)", 7, "Retrouver le total de la révision r1 (611 823 $)"), 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 ("5", "Permis réel de Gatineau et garantie GCR", "Bordereau", 8, "C19:C20", "COUNTBLANK(Bordereau!C19:C20)", 2, "MAX fonctionnel ; 4 unités"), 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 ("6", "Intérêts intercalaires", "Bordereau", 10, "C23:C24 · C25", "COUNTBLANK(Bordereau!C23:C24)", 2, "Taux composé ; facteur ½"), 200 ("6", "Intérêts intercalaires", "Bordereau", 10, "C23:C24 · C25", "COUNTBLANK(Bordereau!C23:C24)", 2, "Taux composé ; facteur ½"),
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"), 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 ("8", "Profit entrepreneurial, coût total, unités de comparaison", "Bordereau", 10, "C36:C43 · C44", "COUNTBLANK(Bordereau!C36:C43)", 8, "Assiette = directs + cont. + indirects"), 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 ("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}", 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 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"), 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 for i, row in enumerate(parcours): 207 for i, row in enumerate(parcours):
208 no, q, feuille, pts, zone_txt, cb, *rest = row 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 titre_section(ws, 25, 2, "Mode d'emploi du classeur", 7) 237 titre_section(ws, 25, 2, "Mode d'emploi du classeur", 7)
238 instructions = [ 238 instructions = [
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.", 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 "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.", 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 "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.", 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 "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é.", 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 "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.", 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 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) 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 R_T2 = {"ss": 31, "rdc": 32, "et": 33} 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 entetes(ws, 37, 2, ["No", "Grandeur (relevé UQO Éval)", "", "Formule du relevé", "Valeur UQO Éval", "Unité"]) 306 entetes(ws, 37, 2, ["No", "Grandeur (relevé UQO Éval)", "", "Formule du relevé", "Valeur UQO Éval", "Unité"])
307 ws.merge_cells("C37:D37") 307 ws.merge_cells("C37:D37")
308 R_T3 = 38 308 R_T3 = 38
@@ -317,18 +317,19 @@ r_fin_t3 = R_T3 + len(GRANDEURS)
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) 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 r0 = r_fin_t3 + 2 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) 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é", "Matériaux ($/u)", "Main-d'œuvre ($/u)", "Équipement ($/u)", "Lignes RSMeans sources"]) 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 R_T4 = r0 + 2 323 R_T4 = r0 + 2
323 for i, L in enumerate(COMPOSANTES): 324 for i, L in enumerate(COMPOSANTES):
324 rr = R_T4 + i 325 rr = R_T4 + i
325 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, 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+ 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)
327− ws.merge_cells(start_row=rr, start_column=11, end_row=rr, end_column=14); donnee(ws, rr, 11, L["lignes"], left=True) 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 ws.row_dimensions[rr].height = 30 329 ws.row_dimensions[rr].height = 30
329 bandes(ws, R_T4, NC, 2, 13) 330 bandes(ws, R_T4, NC, 2, 13)
330 r_fin_t4 = R_T4 + NC 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 r0 = r_fin_t4 + 2 334 r0 = r_fin_t4 + 2
334 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) 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 # 3. RELEVÉ (Q1, Q2, Q3) 441 # 3. RELEVÉ (Q1, Q2, Q3)
441 # ============================================================================== 442 # ==============================================================================
442 ws = wb.create_sheet("Relevé") 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 bandeau(ws, "Relevé des quantités et bordereau des composantes — Questions 1, 2 et 3", 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 ws.freeze_panes = "A5" 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+titre_section(ws, 4, 2, "Question 1 — Méthode d'estimation du coût et nature du coût estimé (C5)", 8)
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+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)…")
449− 450+
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+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)
451−etiquette(ws, 11, 4, "Entrées liées (ne pas modifier)", bold=True) 452+etiquette(ws, 11, 4, "Dimensions du projet (tableau 1) — liens", 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+entetes(ws, 11, 5, ["L à l'axe (m) · P à l'axe (m) · épaisseur (m)", "Hauteurs : étage · fondation (m)", "Niveaux · pente · débords"], height=30)
453−lien(ws, "E12", f"=Données!I{R_T2['rdc']}+Données!I{R_T2['et']}", "0.00") 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)
454−lien(ws, "F12", f"=Données!M{R_T2['rdc']}+Données!M{R_T2['et']}", "0.00") 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)
455−lien(ws, "G12", f"=Données!D{R_T2['rdc']}+Données!D{R_T2['et']}", "0.00") 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)
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) 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 entetes(ws, 15, 2, ["No", "", "Grandeur", "Formule attendue (lecture du relevé UQO Éval)", "Votre calcul", "Valeur UQO Éval — lien", "Écart (%)"]) 458 entetes(ws, 15, 2, ["No", "", "Grandeur", "Formule attendue (lecture du relevé UQO Éval)", "Votre calcul", "Valeur UQO Éval — lien", "Écart (%)"])
458 ws.merge_cells("B15:C15") 459 ws.merge_cells("B15:C15")
459 for i, g in enumerate(GRANDEURS): 460 for i, g in enumerate(GRANDEURS):
@@ -466,12 +467,12 @@ for i, g in enumerate(GRANDEURS):
466 lien(ws, f"G{rr}", f"=Données!F{R_T3 + i}", "#,##0.00") 467 lien(ws, f"G{rr}", f"=Données!F{R_T3 + i}", "#,##0.00")
467 rep(ws, f"H{rr}", num_fmt="0.00%", comment="=F16/G16-1" if i == 0 else None) 468 rep(ws, f"H{rr}", num_fmt="0.00%", comment="=F16/G16-1" if i == 0 else None)
468 ws.row_dimensions[rr].height = 26 469 ws.row_dimensions[rr].height = 26
469−R_G1 = 16 + len(GRANDEURS) - 1 # 22 470+R_G1 = 16 + len(GRANDEURS) - 1 # 20
470 ws.conditional_formatting.add(f"H16:H{R_G1}", FormulaRule(formula=['ABS(H16)>0.005'], fill=PatternFill("solid", fgColor="FFC7CE"))) 471 ws.conditional_formatting.add(f"H16:H{R_G1}", FormulaRule(formula=['ABS(H16)>0.005'], fill=PatternFill("solid", fgColor="FFC7CE")))
471 ws.conditional_formatting.add(f"H16:H{R_G1}", FormulaRule(formula=['AND(H16<>"",ABS(H16)<=0.005)'], fill=PatternFill("solid", fgColor="C6EFCE"))) 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+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)
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) 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 for i, L in enumerate(COMPOSANTES): 476 for i, L in enumerate(COMPOSANTES):
476 rr = R_C0 + i 477 rr = R_C0 + i
477 dr = R_T4 + i 478 dr = R_T4 + i
@@ -479,44 +480,37 @@ for i, L in enumerate(COMPOSANTES):
479 lien(ws, f"D{rr}", f"=Données!D{dr}", left=True, font=Font(name="Calibri", size=9, color="333333")) 480 lien(ws, f"D{rr}", f"=Données!D{dr}", left=True, font=Font(name="Calibri", size=9, color="333333"))
480 lien(ws, f"E{rr}", f"=Données!E{dr}", left=True, font=Font(name="Calibri", size=8, color=GRIS)) 481 lien(ws, f"E{rr}", f"=Données!E{dr}", left=True, font=Font(name="Calibri", size=8, color=GRIS))
481 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"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+ lien(ws, f"H{rr}", f"=Données!H{dr}", FMT_D2)
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"I{rr}", num_fmt=FMT_D2, comment=f"=F{R_C0}*H{R_C0} (puis copier vers le bas)" 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)
485 ws.row_dimensions[rr].height = 30 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}") 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"L{R_CT}", num_fmt=FMT_D2, comment=f"=SUM(L{R_C0}:L{R_C1})") 487+rep(ws, f"I{R_CT}", num_fmt=FMT_D2, comment=f"=SUM(I{R_C0}:I{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), 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− ("d) Montant total de la main-d'œuvre ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},I{R_C0}:I{R_C1})", FMT_D2), 489+
490− ("d) Montant total de l'équipement ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},J{R_C0}:J{R_C1})", FMT_D2), 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− ("d) Part de la main-d'œuvre dans le direct nu (%)", f"=E{R_MAT + 1}/L{R_CT}", FMT_P1)]): 491+entetes(ws, R_DH, 2, ["Code — lien", "Division — lien", "", "c) Direct nu de la division ($)", "c) Part (%)", "Révision r1 — lien ($)", "Écart"])
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"])
498 ws.merge_cells(f"C{R_DH}:D{R_DH}") 492 ws.merge_cells(f"C{R_DH}:D{R_DH}")
499 for i, k in enumerate(DIVS): 493 for i, k in enumerate(DIVS):
500 rr = R_D0 + i 494 rr = R_D0 + i
501 lien(ws, f"B{rr}", f"=Données!B{R_T5 + i}") 495 lien(ws, f"B{rr}", f"=Données!B{R_T5 + i}")
502 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) 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) 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)
504− rep(ws, f"F{rr}", num_fmt=FMT_P1, comment=f"=E{R_D0}/$L${R_CT}" 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 lien(ws, f"G{rr}", f"=Données!D{R_T5 + i}", FMT_D2) 499 lien(ws, f"G{rr}", f"=Données!D{R_T5 + i}", FMT_D2)
506 lien(ws, f"H{rr}", f'=IF(E{rr}="","—",IF(ABS(E{rr}-G{rr})<=25,"✓","≠"))') 500 lien(ws, f"H{rr}", f'=IF(E{rr}="","—",IF(ABS(E{rr}-G{rr})<=25,"✓","≠"))')
507 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)) 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 ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="≠"'], fill=PatternFill("solid", fgColor="FFC7CE"))) 502 ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="≠"'], fill=PatternFill("solid", fgColor="FFC7CE")))
509 ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="✓"'], fill=PatternFill("solid", fgColor="C6EFCE"))) 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 lien(ws, f"E{R_D1 + 1}", f"=SUM(E{R_D0}:E{R_D1})", FMT_D2) 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 ws.merge_cells(start_row=R_TOP - 1, start_column=3, end_row=R_TOP - 1, end_column=4) 507 ws.merge_cells(start_row=R_TOP - 1, start_column=3, end_row=R_TOP - 1, end_column=4)
514 for i in range(3): 508 for i in range(3):
515 rr = R_TOP + i 509 rr = R_TOP + i
516 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 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 ws.merge_cells(start_row=rr, start_column=3, end_row=rr, end_column=4) 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) 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)
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) 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 finir_feuille(ws, OR, zoom=100, titre="Relevé et composantes — questions 1 à 3") 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 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) 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 ligne(8, "Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval — lien", "calc", formula=f"={mq(0)}") 543 ligne(8, "Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval — lien", "calc", formula=f"={mq(0)}")
550 ligne(9, "a) Coûts directs nus localisés", "rep", comment="=C7+C8") 544 ligne(9, "a) Coûts directs nus localisés", "rep", comment="=C7+C8")
551 ligne(10, "b) Conditions générales du chantier (8 % des directs nus localisés)", "rep", comment=f"=C9*{mq(1)}") 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 ch2.gapWidth = 60 711 ch2.gapWidth = 60
718 style_chart(ch2); ch2.legend = None 712 style_chart(ch2); ch2.legend = None
719 ws.add_chart(ch2, "I10") 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 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") 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 finir_feuille(ws, TURQUOISE, titre="Dashboard — question 10") 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 "Question 10 — une page, ton professionnel, chaque affirmation ancrée dans un chiffre du classeur (citez la cellule).", ncols=2) 724 "Question 10 — une page, ton professionnel, chaque affirmation ancrée dans un chiffre du classeur (citez la cellule).", ncols=2)
731 sections = [ 725 sections = [
732 ("Conclusion : coût total de remplacement neuf, $/pi² (hors sol et chauffé), $/logement, part des indirects et du profit", 2), 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 ("Effet chiffré d'un retard de chantier de 6 mois sur les intérêts intercalaires et sur le coût total", 2), 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 (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), 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 ("Conventions à déclarer (profit sur directs + indirects, contingences, exclusion des taxes) et ce qui changerait avec l'autre convention", 2), 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 wb.save(OUT) 746 wb.save(OUT)
753 print("OK :", OUT) 747 print("OK :", OUT)
754 print("Données :", {k: v for k, v in DN.items() if k != "PR"}, "PR", PR) 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 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), 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 puis remplit chaque cellule jaune avec la FORMULE attendue (chaînée à Données), les zones de texte avec les réponses modèles, 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 Sortie : 03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/solutionnaire_enseignant/IMM1033-20_TP2_solutionnaire.xlsx 7 Sortie : 03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/solutionnaire_enseignant/IMM1033-20_TP2_solutionnaire.xlsx
8 Vérification (Excel recalcule) : verif_solution_xlsx.py <xlsx> verif_attendus_tp2.py 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 ns = runpy.run_path(os.path.join(HERE, "make_IMM1033_TP2.py")) 17 ns = runpy.run_path(os.path.join(HERE, "make_IMM1033_TP2.py"))
18 wb = ns["wb"] 18 wb = ns["wb"]
19 PR, R_T1, R_T5, R_T6, R_T10 = ns["PR"], ns["R_T1"], ns["R_T5"], ns["R_T6"], ns["R_T10"] 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 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"] 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 from openpyxl.styles import Alignment, Font, PatternFill # noqa: E402 24 from openpyxl.styles import Alignment, Font, PatternFill # noqa: E402
25 from openpyxl.utils import get_column_letter # noqa: E402 25 from openpyxl.utils import get_column_letter # noqa: E402
26 from openpyxl.utils.cell import range_boundaries # noqa: E402 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 ws = wb["Relevé"] 86 ws = wb["Relevé"]
87 txt(ws, "C5", 87 txt(ws, "C5",
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 " 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 "(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 " 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 "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 ; " 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 "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 " 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 rr = 16 + i 96 rr = 16 + i
97 sol(ws, f"F{rr}", g["formule"], "#,##0.00"); sol(ws, f"H{rr}", f"=F{rr}/G{rr}-1", "0.00%") 97 sol(ws, f"F{rr}", g["formule"], "#,##0.00"); sol(ws, f"H{rr}", f"=F{rr}/G{rr}-1", "0.00%")
98 for rr in range(R_C0, R_C1 + 1): 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") 99+ sol(ws, f"I{rr}", f"=F{rr}*H{rr}", D2)
100− sol(ws, f"L{rr}", f"=F{rr}*K{rr}", D2) 100+sol(ws, f"I{R_CT}", f"=SUM(I{R_C0}:I{R_C1})", 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%")
106 for rr in range(R_D0, R_D1 + 1): 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) 102+ sol(ws, f"E{rr}", f"=SUMIF($C${R_C0}:$C${R_C1},B{rr},$I${R_C0}:$I${R_C1})", D2)
108− sol(ws, f"F{rr}", f"=E{rr}/$L${R_CT}", "0.0%") 103+ sol(ws, f"F{rr}", f"=E{rr}/$I${R_CT}", "0.0%")
109 for i in range(3): 104 for i in range(3):
110 rr = R_TOP + i 105 rr = R_TOP + i
111− sol(ws, f"E{rr}", f"=LARGE($L${R_C0}:$L${R_C1},B{rr})", D2) 106+ sol(ws, f"E{rr}", f"=LARGE($I${R_C0}:$I${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))") 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 # ---------------- BORDEREAU ---------------- 109 # ---------------- BORDEREAU ----------------
115 ws = wb["Bordereau"] 110 ws = wb["Bordereau"]
@@ -162,14 +157,19 @@ for col in "DEFG":
162 ws[f"{col}6"].font = Font(name="Calibri", size=20, bold=True, color="1E4620"); ws[f"{col}7"].fill = FILL_SOL 157 ws[f"{col}6"].font = Font(name="Calibri", size=20, bold=True, color="1E4620"); ws[f"{col}7"].fill = FILL_SOL
163 sol(ws, "C8", "Coût sous la valeur de marché — projet viable (marge > 11 %)") 158 sol(ws, "C8", "Coût sous la valeur de marché — projet viable (marge > 11 %)")
164 ws["C8"].font = Font(name="Calibri", size=14, bold=True, color="1E4620"); ws["C8"].alignment = Alignment(horizontal="center", vertical="center") 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 ws["B27"].font = Font(name="Calibri", size=11, bold=True, color="1E4620") 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}")]): 162+for j, h in enumerate(["Durée (mois)", "Intercalaires ($)", "Coût total ($)"]):
168− a = ws.cell(row=28 + i, column=13, value=lbl); a.fill = FILL_SOL 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")
169− b = ws.cell(row=28 + i, column=14, value=f); b.fill = FILL_SOL; b.number_format = "#,##0" 164+for i, m in enumerate((6, 12, 18, 24)):
170−pie = PieChart(); pie.title = "Direct nu : matériaux, main-d'œuvre, équipement"; pie.height = 7; pie.width = 10 165+ rr = 28 + i
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)) 166+ a = ws.cell(row=rr, column=13, value=m); a.fill = FILL_SOL
172−ws.add_chart(pie, "B28") 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 ws = wb["Note"] 174 ws = wb["Note"]
175 NOTE = [ 175 NOTE = [
@@ -178,7 +178,7 @@ NOTE = [
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.", 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 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}). " 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 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}). " 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 "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 $, " 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 "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é " 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 "de retard dans le contrat de l'entrepreneur.", 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 'nom': 'Excavation, remblai et drain français', 1451 'nom': 'Excavation, remblai et drain français',
1452 'detail': 'excavation en masse, remblai, drain de fondation perforé', 1452 'detail': 'excavation en masse, remblai, drain de fondation perforé',
1453 'qte': 651.77, 1453 'qte': 651.77,
1454− 'unite': 'm³ excavé', 1454+ 'unite': 'm³',
1455 'mat': 2.09, 1455 'mat': 2.09,
1456 'mo': 3.25, 1456 'mo': 3.25,
1457 'eq': 2.18, 1457 'eq': 2.18,
@@ -1479,7 +1479,7 @@ COMPOSANTES = [{'no': 1,
1479 'nom': 'Fondations : semelles, murs coffrés et membrane', 1479 'nom': 'Fondations : semelles, murs coffrés et membrane',
1480 'detail': "semelle filante 24 × 12 po, mur de béton 8 po, enduit d'imperméabilisation", 1480 'detail': "semelle filante 24 × 12 po, mur de béton 8 po, enduit d'imperméabilisation",
1481 'qte': 140.06, 1481 'qte': 140.06,
1482− 'unite': 'm² de mur de fondation', 1482+ 'unite': 'm² de mur',
1483 'mat': 108.35, 1483 'mat': 108.35,
1484 'mo': 90.32, 1484 'mo': 90.32,
1485 'eq': 6.39, 1485 'eq': 6.39,
@@ -1505,7 +1505,7 @@ COMPOSANTES = [{'no': 1,
1505 'wbs': '06', 1505 'wbs': '06',
1506 'division': 'Bois et composites', 1506 'division': 'Bois et composites',
1507 'nom': 'Planchers portés', 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 'qte': 352.81, 1509 'qte': 352.81,
1510 'unite': 'm² de plancher', 1510 'unite': 'm² de plancher',
1511 'mat': 43.27, 1511 'mat': 43.27,
@@ -1519,9 +1519,9 @@ COMPOSANTES = [{'no': 1,
1519 'wbs': '06', 1519 'wbs': '06',
1520 'division': 'Bois et composites', 1520 'division': 'Bois et composites',
1521 'nom': 'Ossature de bois', 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 'qte': 572.42, 1523 'qte': 572.42,
1524− 'unite': 'm² de mur (ext. brut + cloisons)', 1524+ 'unite': 'm² de mur',
1525 'mat': 17.26, 1525 'mat': 17.26,
1526 'mo': 15.47, 1526 'mo': 15.47,
1527 'eq': 0.0, 1527 'eq': 0.0,
@@ -1533,7 +1533,7 @@ COMPOSANTES = [{'no': 1,
1533 'wbs': '07', 1533 'wbs': '07',
1534 'division': 'Enveloppe, isolation et toiture', 1534 'division': 'Enveloppe, isolation et toiture',
1535 'nom': 'Toiture complète', 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 'qte': 218.92, 1537 'qte': 218.92,
1538 'unite': 'm² de toit', 1538 'unite': 'm² de toit',
1539 'mat': 54.66, 1539 'mat': 54.66,
@@ -1549,7 +1549,7 @@ COMPOSANTES = [{'no': 1,
1549 'nom': 'Isolation des murs extérieurs R-24 et du comble R-50', 1549 'nom': 'Isolation des murs extérieurs R-24 et du comble R-50',
1550 'detail': 'matelas R-21 (≈ R-24) + cellulose soufflée', 1550 'detail': 'matelas R-21 (≈ R-24) + cellulose soufflée',
1551 'qte': 415.77, 1551 'qte': 415.77,
1552− 'unite': 'm² isolé (murs nets + comble)', 1552+ 'unite': 'm² isolé',
1553 'mat': 9.56, 1553 'mat': 9.56,
1554 'mo': 7.99, 1554 'mo': 7.99,
1555 'eq': 2.86, 1555 'eq': 2.86,
@@ -1589,7 +1589,7 @@ COMPOSANTES = [{'no': 1,
1589 'wbs': '08', 1589 'wbs': '08',
1590 'division': 'Portes et fenêtres', 1590 'division': 'Portes et fenêtres',
1591 'nom': 'Fenêtres', 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 'qte': 24, 1593 'qte': 24,
1594 'unite': 'unité', 1594 'unite': 'unité',
1595 'mat': 848.89, 1595 'mat': 848.89,
@@ -1631,7 +1631,7 @@ COMPOSANTES = [{'no': 1,
1631 'wbs': '09', 1631 'wbs': '09',
1632 'division': 'Finitions intérieures', 1632 'division': 'Finitions intérieures',
1633 'nom': 'Gypse et peinture', 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 'qte': 1154.19, 1635 'qte': 1154.19,
1636 'unite': 'm² de gypse', 1636 'unite': 'm² de gypse',
1637 'mat': 13.92, 1637 'mat': 13.92,
@@ -1778,24 +1778,12 @@ GRANDEURS = [{'libelle': 'Empreinte du bâtiment (m²) = (L + ép.) × (P + ép.
1778 'releve_valeur': 280.11, 1778 'releve_valeur': 280.11,
1779 'releve_unite': 'm²', 1779 'releve_unite': 'm²',
1780 'formule': '=F17*Données!D14*Données!D10'}, 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 {'libelle': 'Surface de toit (m²) = empreinte × facteur de pente × débords', 1781 {'libelle': 'Surface de toit (m²) = empreinte × facteur de pente × débords',
1788 'indice': '199,02 × 1,00 × 1,10', 1782 'indice': '199,02 × 1,00 × 1,10',
1789 'releve_nom': 'Couverture', 1783 'releve_nom': 'Couverture',
1790 'releve_valeur': 218.92, 1784 'releve_valeur': 218.92,
1791 'releve_unite': 'm²', 1785 'releve_unite': 'm²',
1792− 'formule': '=F16*Données!D18*Données!D19'}, 1786+ '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'}]
1799 1787
1800 DIVISIONS = {'03': 'Béton', 1788 DIVISIONS = {'03': 'Béton',
1801 '05': 'Métaux', 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 HONO, ASSUR, JURID, PREF, PRIME, DUREE, PROFIT = 0.04, 0.008, 9500, 0.0470, 0.0205, 12, 0.11 10 HONO, ASSUR, JURID, PREF, PRIME, DUREE, PROFIT = 0.04, 0.008, 9500, 0.0470, 0.0205, 12, 0.11
11 TPS, TVQ, ALTUS_LO, ALTUS_HI, RATIO_TERRAIN, PI2 = 0.05, 0.09975, 180, 330, 1.257, 10.7639 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 rdc, etage = PAGES[1], PAGES[2] 14 rdc, etage = PAGES[1], PAGES[2]
15 ouv_ext = rdc["ouvertures_aire"] + etage["ouvertures_aire"] 15 ouv_ext = rdc["ouvertures_aire"] + etage["ouvertures_aire"]
16 pieces = rdc["aire_pieces"] + etage["aire_pieces"] 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 Q2["perimetre"] = 2 * (P["L_axe"] + P["P_axe"]) 19 Q2["perimetre"] = 2 * (P["L_axe"] + P["P_axe"])
20 Q2["murs_fondation"] = Q2["perimetre"] * P["h_fondation"] 20 Q2["murs_fondation"] = Q2["perimetre"] * P["h_fondation"]
21 Q2["murs_ext_bruts"] = Q2["perimetre"] * P["h_etage"] * P["niveaux"] 21 Q2["murs_ext_bruts"] = Q2["perimetre"] * P["h_etage"] * P["niveaux"]
22−Q2["murs_ext_nets"] = Q2["murs_ext_bruts"] - ouv_ext
23 Q2["toiture"] = Q2["empreinte"] * P["facteur_pente"] * P["debords"] 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 Q2_REF = {k: g["releve_valeur"] for k, g in zip(Q2, GRANDEURS)} 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 LIGNES = COMPOSANTES # alias : le TP travaille sur les composantes 28 LIGNES = COMPOSANTES # alias : le TP travaille sur les composantes
29 for L in LIGNES: 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 L["montant"] = L["qte"] * L["cu"] 31 L["montant"] = L["qte"] * L["cu"]
32 L["m_mat"], L["m_mo"], L["m_eq"] = L["qte"] * L["mat"], L["qte"] * L["mo"], L["qte"] * L["eq"] 32 L["m_mat"], L["m_mo"], L["m_eq"] = L["qte"] * L["mat"], L["qte"] * L["mo"], L["qte"] * L["eq"]
33 L["poste"] = L["nom"] 33 L["poste"] = L["nom"]
34 DIRECT_NU = sum(L["montant"] for L in LIGNES) 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 PAR_DIV = {} 37 PAR_DIV = {}
37 for L in LIGNES: 38 for L in LIGNES:
38 PAR_DIV[L["wbs"]] = PAR_DIV.get(L["wbs"], 0) + L["montant"] 39 PAR_DIV[L["wbs"]] = PAR_DIV.get(L["wbs"], 0) + L["montant"]
39 TOP3 = sorted(LIGNES, key=lambda L: -L["montant"])[:3] 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 # --- Q4 : des coûts nus aux coûts directs du cours --- 43 # --- Q4 : des coûts nus aux coûts directs du cours ---
42 AJUST = MOTEUR_QS["ajust_regional"] 44 AJUST = MOTEUR_QS["ajust_regional"]
@@ -70,6 +72,11 @@ TPS_M, TVQ_M = TOTAL * TPS, TOTAL * TVQ
70 TTC = TOTAL + TPS_M + TVQ_M 72 TTC = TOTAL + TPS_M + TVQ_M
71 INTERC_18 = DC * I_TAUX * (18 / 12) * 0.5 73 INTERC_18 = DC * I_TAUX * (18 / 12) * 0.5
72 PART_INDIRECTS = INDIRECTS / TOTAL 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 # --- Q9 : marché (8 ventes retenues) --- 81 # --- Q9 : marché (8 ventes retenues) ---
75 VENTES = [v for v in VENTES if v["adresse"] in VENTES_TP] 82 VENTES = [v for v in VENTES if v["adresse"] in VENTES_TP]
@@ -96,7 +103,7 @@ if __name__ == "__main__":
96 print("Q2 grandeurs (calcul vs relevé UQO Éval)") 103 print("Q2 grandeurs (calcul vs relevé UQO Éval)")
97 for k, v in Q2.items(): 104 for k, v in Q2.items():
98 print(f" {k:16s} {f(v)} vs {f(Q2_REF[k])} écart {100*(v/Q2_REF[k]-1):+.2f} %") 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 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]}") 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 print(" top3", [(L['poste'], round(L['montant'])) for L in TOP3]) 108 print(" top3", [(L['poste'], round(L['montant'])) for L in TOP3])
102 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']})") 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 print(f"Q7 honoraires {f(HONOS)} assurance {f(ASSURANCE)} juridique {JURID} TOTAL INDIRECTS {f(INDIRECTS)} ({INDIRECTS/DIRECTS:.1%} des directs)") 112 print(f"Q7 honoraires {f(HONOS)} assurance {f(ASSURANCE)} juridique {JURID} TOTAL INDIRECTS {f(INDIRECTS)} ({INDIRECTS/DIRECTS:.1%} des directs)")
106 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") 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 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%}") 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 print("Q9 ventes") 116 print("Q9 ventes")
109 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}") 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 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}") 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 Référence : tp2_solutions.py (direct nu 471 100 $ → directs + contingences 611 843 $ → coût total 759 152 $ ; marché 866 833 $).""" 2 Référence : tp2_solutions.py (direct nu 471 100 $ → directs + contingences 611 843 $ → coût total 759 152 $ ; marché 866 833 $)."""
3 ATTENDUS = [ 3 ATTENDUS = [
4 ("Accueil", "F22", 1.0, 0), 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), 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é", "H22", 0, 0.0002), 6+ ("Relevé", "H16", 0, 0.0001), ("Relevé", "H20", 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), 7+ ("Relevé", "I27", 4901.31, 0.1), ("Relevé", "I35", 77532.83, 1), ("Relevé", "I43", 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), 8+ ("Relevé", "I49", 471100.03, 1),
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), 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é", "E72", 77532.83, 1), ("Relevé", "C72", "Revêtement de brique (80 %)", None), ("Relevé", "E73", 54984.88, 1), ("Relevé", "E74", 35680.61, 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 ("Bordereau", "C9", 471355.86, 1), ("Bordereau", "C10", 37708.47, 1), ("Bordereau", "C11", 35634.50, 1), ("Bordereau", "C12", 43575.91, 1), 11 ("Bordereau", "C9", 471355.86, 1), ("Bordereau", "C10", 37708.47, 1), ("Bordereau", "C11", 35634.50, 1), ("Bordereau", "C12", 43575.91, 1),
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), 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 ("Bordereau", "C19", 2875.66, 0.05), ("Bordereau", "C20", 10626.72, 0.01), ("Bordereau", "C23", 0.0675, 0.00001), ("Bordereau", "C24", 20649.69, 0.1), 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 ("Marché", "K14", 866833, 1), ("Marché", "L14", 4389, 1), ("Marché", "M14", 216708, 1), ("Marché", "N14", 1.327, 0.001), 19 ("Marché", "K14", 866833, 1), ("Marché", "L14", 4389, 1), ("Marché", "M14", 216708, 1), ("Marché", "N14", 1.327, 0.001),
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), 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 ("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), 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 "tps": [ 110 "tps": [
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.", 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 "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."}]}, 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 {"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."}, 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 "part_colors": ["#2976bb", "#0f8b8d", "#cca424", "#6b4fbb", "#107c4e"], 116 "part_colors": ["#2976bb", "#0f8b8d", "#cca424", "#6b4fbb", "#107c4e"],
117 117
Menu

Theme