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>
24 changed files +421 −286
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 | ||||