IMM1033 TP2 allégé : bordereau en 22 composantes à prix composites (au lieu de 64 lignes RSMeans), 7 grandeurs, 8 ventes ; énoncé 17 p., gabarit, solutionnaires (Excel vérifié 71/71), diapos séance 7
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
19 changed files +898 −628
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/seance07_couts_directs.tex
+6 −6
@@ -1456,18 +1456,18 @@ Compléter l'exercice d'estimation du bungalow et entamer le TP2 (énoncé et ga | ||
| 1456 | 1456 | \begin{frame}{TP2 --- Bordereau de coût de remplacement neuf avec UQO Éval (15\,\%)} |
| 1457 | 1457 | \footnotesize |
| 1458 | 1458 | \begin{importbox}[Mandat] |
| 1459 | −Un promoteur de Gatineau projette un \textbf{quadruplex de 2 étages} (18,3 $\times$ 10,4 m, 4 logements, sous-sol non fini, brique 80\,\%). Vous montez le bordereau complet à partir du \textbf{cas d'étude « Cas 9 » du module Quantity Survey d'UQO Éval} : plans, relevé des quantités, 64 lignes tarifées \textbf{RSMeans 2026 T4 localisées Gatineau} --- puis indirects réels, profit et validation par \textbf{11 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\,\%). 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}. | |
| 1460 | 1460 | \end{importbox} |
| 1461 | 1461 | \vspace{0.5mm} |
| 1462 | 1462 | \uqotitle{Objectifs pédagogiques :} |
| 1463 | 1463 | \begin{itemize} |
| 1464 | − \item Reproduire 12 grandeurs du relevé depuis le plan et tarifer 64 lignes (conversion SI $\rightarrow$ RSMeans, coût unitaire nu, sous-totaux par division) --- séance 7 | |
| 1464 | + \item Reproduire 7 grandeurs du relevé depuis le plan et chiffrer 22 composantes (coût unitaire nu, montant, sous-totaux par division) --- séance 7 | |
| 1465 | 1465 | \item Passer des coûts nus aux coûts directs du cours (conditions générales, frais généraux, profit de l'entrepreneur), puis contingences |
| 1466 | 1466 | \item Calculer les indirects réels : permis de Gatineau (\texttt{MAX}), GCR, intercalaires avec facteur ½, honoraires --- séance 8 |
| 1467 | 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 |
| 1468 | 1468 | \end{itemize} |
| 1469 | 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), 11 ventes 2024-2025 de quadruplex 2021-2024, moteur de coût UQO Éval, Altus 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 | 1471 | \end{notebox} |
| 1472 | 1472 | \end{frame} |
| 1473 | 1473 | |
@@ -1491,10 +1491,10 @@ Un promoteur de Gatineau projette un \textbf{quadruplex de 2 étages} (18,3 $\ti | ||
| 1491 | 1491 | \begin{column}{0.42\textwidth} |
| 1492 | 1492 | \uqotitle{Les onglets du gabarit :} |
| 1493 | 1493 | \begin{itemize} |
| 1494 | − \item \textbf{Données} : 11 tableaux réels (ne pas modifier) | |
| 1495 | − \item \textbf{Relevé} : Q1-Q3 --- plan $\rightarrow$ quantités $\rightarrow$ 64 lignes RSMeans | |
| 1494 | + \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 | |
| 1496 | 1496 | \item \textbf{Bordereau} : Q4-Q8 --- directs du cours, contingences, permis, GCR, intercalaires, honoraires, profit, \$/pi\up{2} |
| 1497 | − \item \textbf{Marché} : Q9 --- extraction sur 11 ventes, moteur, Altus, profit extrait | |
| 1497 | + \item \textbf{Marché} : Q9 --- extraction sur 8 ventes, moteur, Altus, profit extrait | |
| 1498 | 1498 | \item \textbf{Dashboard} + \textbf{Note} : Q10 --- KPI, verdict, graphiques, note |
| 1499 | 1499 | \item Cas ouvert sur \texttt{uqo-eval.app/quantity-survey} : dupliquez-le |
| 1500 | 1500 | \end{itemize} |
modified
IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/README.md
+4 −4
@@ -1,10 +1,10 @@ | ||
| 1 | 1 | # IMM1033-20 · TP2 — Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval (15 %) |
| 2 | 2 | |
| 3 | 3 | - Remise : séance 9 (12 novembre 2026, 23 h 59) · Livrables étudiants : gabarit Excel complété (renommé TP2_CodePermanent.xlsx) + PDF de la note au promoteur. |
| 4 | −- **Données 100 % réelles extraites de www.uqo-eval.app le 29 octobre 2026** : cas d'étude « Cas 9 — Quadruplex 2 étages, Gatineau (RSMeans 2026 T4) » du module Quantity Survey (`https://www.uqo-eval.app/quantity-survey/projets/97fa1d2a-06e1-4ed3-a580-0728616915ce`, créé pour ce TP par `scripts/qs-seed-cases.mts "Cas 9"` sur M2U64) : plans des 3 niveaux (`enonce/assets/plan-*.png`), fiche technique, relevé des quantités (49 mesures), révision r1 de 64 lignes tarifées RSMeans 2026 T4 localisées Gatineau (C57) → direct nu 471 085 $, total r1 611 823 $ ; 11 ventes réelles 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 à 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). | |
| 5 | 5 | - **Plus de personnalisation par code permanent** : même cas pour tous ; la note récompense la chaîne de calcul (conversions, assiettes, ordre des majorations) et la lecture (conventions, marché, limites). |
| 6 | −- 10 questions / 100 pts : méthode (6) · du plan au relevé, 12 grandeurs (10) · tarification des 64 lignes, SOMME.SI par division, top 3 (16) · coûts nus → directs du cours → contingences = r1 (8) · permis Gatineau MAX + GCR (8) · intercalaires 6,75 % × ½ (10) · honoraires, assurance, total indirects (8) · profit 11 %, coût total **759 115 $** (177,18 $/pi² hors sol, 189 779 $/logement) (8) · marché : bâtiment implicite médian 879 896 $, profit extrait 28,7 %, moteur −8,3 %, Altus (14) · dashboard + note (12). | |
| 7 | −- `enonce/` et `gabarit_excel/` : **à distribuer** · `solutionnaire_enseignant/` : **réservé** (PDF + `IMM1033-20_TP2_solutionnaire.xlsx` : formules réelles, 74 cellules vérifiées par recalcul Excel) · `donnees/` : extraits bruts (JSON du cas, ventes, moteur, photos originales). | |
| 8 | −- Scripts (`05_Ressources/scripts_gabarits_excel/`) : `build_tp2_donnees.py` (extraits JSON → `tp2_donnees.py`), `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 longs générés par le script inclus dans `enonce/` (bloc python du 2026-10-29) → `tables_tp2*.tex`. | |
| 6 | +- 10 questions / 100 pts : méthode (8) · du plan au relevé, 7 grandeurs (8) · bordereau des 22 composantes, SOMME.SI par division, top 3 (12) · coûts nus → directs du cours → contingences = r1 ± 50 $ (8) · permis Gatineau MAX + GCR (8) · intercalaires 6,75 % × ½ (10) · honoraires, assurance, total indirects (8) · profit 11 %, coût total **759 152 $** (177,19 $/pi² hors sol, 189 788 $/logement) (10) · marché : bâtiment implicite médian 866 833 $ (8 ventes), profit extrait 26,7 %, moteur −8,3 %, Altus (14) · dashboard + note (14). | |
| 7 | +- `enonce/` et `gabarit_excel/` : **à distribuer** · `solutionnaire_enseignant/` : **réservé** (PDF + `IMM1033-20_TP2_solutionnaire.xlsx` : formules réelles, 71 cellules vérifiées par recalcul Excel) · `donnees/` : extraits bruts (JSON du cas, ventes, moteur, photos originales). | |
| 8 | +- Scripts (`05_Ressources/scripts_gabarits_excel/`) : `build_tp2_donnees.py` (extraits JSON → `tp2_donnees.py` : LIGNES 64, COMPOSANTES 22, GRANDEURS 7, VENTES 11 + VENTES_TP 8), `make_IMM1033_TP2.py` (gabarit v2 avec suivi de progression), `tp2_solutions.py` (valeurs de référence), `make_IMM1033_TP2_solution.py` + `verif_attendus_tp2.py` (solutionnaire Excel + vérification `verif_solution_xlsx.py`). Tableaux LaTeX (composantes, relevé abrégé, divisions, ventes, moteur) générés par bloc python (2026-10-29) → `enonce/tables_tp2*.tex`. | |
| 9 | 9 | - Recompiler : `cd enonce && latexmk -lualatex IMM1033-20_TP2_enonce.tex` (idem solutionnaire). |
| 10 | 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. |
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
+76 −80
@@ -17,7 +17,7 @@ | ||
| 17 | 17 | \setexamDuree{Travail individuel à la maison (gabarit Excel obligatoire + laboratoire UQO Éval)} |
| 18 | 18 | \setexamRemise{Séance 9 (12 novembre 2026, 23 h 59) --- dépôt Moodle (fichier Excel + PDF de la note au promoteur)} |
| 19 | 19 | \setexamPonderation{15 \% de la note finale} |
| 20 | −\setexamCouverture{Bordereau de coût de remplacement neuf : quadruplex de 2 étages à Gatineau --- relevé des quantités, prix RSMeans 2026, coûts indirects réels, profit et test du marché avec UQO Éval} | |
| 20 | +\setexamCouverture{Bordereau de coût de remplacement neuf : quadruplex de 2 étages à Gatineau --- composantes tarifées RSMeans 2026, coûts indirects réels, profit et test du marché avec UQO Éval} | |
| 21 | 21 | |
| 22 | 22 | % --- Palette complémentaire (Excel + UQO Éval) --- |
| 23 | 23 | \definecolor{xlVert}{RGB}{33,115,70} |
@@ -87,15 +87,15 @@ | ||
| 87 | 87 | |
| 88 | 88 | \begin{miseengarde}[Deux avertissements importants] |
| 89 | 89 | \begin{itemize}[leftmargin=14pt, itemsep=2pt] |
| 90 | − \item \textbf{Aucun paramètre personnalisé.} Plus de montant qui dépend de votre code permanent : toutes les copies travaillent sur le \textbf{même cas réel}. Ce qui distingue votre copie, c'est la \textbf{rigueur de la chaîne de calcul} (conversions, assiettes, ordre des majorations) et la \textbf{qualité de votre lecture} (conventions, marché, limites). | |
| 91 | − \item \textbf{Prix publiés, pas des soumissions.} Les prix unitaires sont des prix \emph{nus} (matériaux, main-d'œuvre, équipement) de RSMeans 2026, 4\up{e} trimestre, localisés pour Gatineau. Un entrepreneur y ajoute ses conditions générales, ses frais généraux et son profit --- c'est l'objet de la question 4 --- et une soumission réelle peut s'en écarter. Vous devez \textbf{nommer cette limite}. | |
| 90 | + \item \textbf{Aucun paramètre personnalisé.} Plus de montant qui dépend de votre code permanent : toutes les copies travaillent sur le \textbf{même cas réel}. Ce qui distingue votre copie, c'est la \textbf{rigueur de la chaîne de calcul} (assiettes, ordre des majorations) et la \textbf{qualité de votre lecture} (conventions, marché, limites). | |
| 91 | + \item \textbf{Prix publiés, pas des soumissions.} Les prix unitaires sont des prix \emph{nus} composites (matériaux, main-d'œuvre, équipement) dérivés de RSMeans 2026, 4\up{e} trimestre, localisés pour Gatineau. Un entrepreneur y ajoute ses conditions générales, ses frais généraux et son profit --- c'est l'objet de la question 4 --- et une soumission réelle peut s'en écarter. Vous devez \textbf{nommer cette limite}. | |
| 92 | 92 | \end{itemize} |
| 93 | 93 | \end{miseengarde} |
| 94 | 94 | |
| 95 | 95 | % ------------------------------------------------------------------------------ |
| 96 | 96 | \partieexamen{Mise en situation}{} |
| 97 | 97 | |
| 98 | −Nous sommes le \textbf{29 octobre 2026}. Un promoteur de Gatineau détient un lot desservi du secteur Gatineau (rue Raymond) et projette d'y construire un \textbf{quadruplex locatif de 2 étages} : deux logements de deux chambres par étage, sous-sol non fini commun, brique à 80~\%, toit plat à membrane, plinthes électriques --- le même programme que les quadruplex neufs qui se vendent dans le secteur (figure~\ref{fig:photos}). Avant de déposer sa demande de financement, il vous mandate pour établir le \textbf{bordereau complet du coût de remplacement neuf} de l'immeuble : coûts directs par \textbf{relevé des quantités} (séance 7), coûts indirects \textbf{réels} (séance 8), profit entrepreneurial, puis \textbf{validation} contre le marché des quadruplex neufs, le moteur de coût d'UQO Éval et les guides de coûts. Dans la méthode du coût, ce bordereau est la deuxième pierre de l'édifice : $V = V_{\text{terrain}} + (C_{\text{neuf}} - D)$. | |
| 98 | +Nous sommes le \textbf{29 octobre 2026}. Un promoteur de Gatineau détient un lot desservi du secteur Gatineau (rue Raymond) et projette d'y construire un \textbf{quadruplex locatif de 2 étages} : deux logements de deux chambres par étage, sous-sol non fini commun, brique à 80~\%, toit plat à membrane, plinthes électriques --- le même programme que les quadruplex neufs qui se vendent dans le secteur (figure~\ref{fig:photos}). Avant de déposer sa demande de financement, il vous mandate pour établir le \textbf{bordereau complet du coût de remplacement neuf} de l'immeuble : coûts directs par \textbf{composantes issues du relevé des quantités} (séances 6 et 7), coûts indirects \textbf{réels} (séance 8), profit entrepreneurial, puis \textbf{validation} contre le marché des quadruplex neufs, le moteur de coût d'UQO Éval et les guides de coûts. Dans la méthode du coût, ce bordereau est la deuxième pierre de l'édifice : $V = V_{\text{terrain}} + (C_{\text{neuf}} - D)$. | |
| 99 | 99 | |
| 100 | 100 | \begin{figure}[htbp] |
| 101 | 101 | \centering |
@@ -109,7 +109,7 @@ Nous sommes le \textbf{29 octobre 2026}. Un promoteur de Gatineau détient un lo | ||
| 109 | 109 | \includegraphics[width=\linewidth]{assets/nd-1151-cuisine.jpg} |
| 110 | 110 | \end{tcolorbox} |
| 111 | 111 | \end{minipage} |
| 112 | −\caption{Un quadruplex neuf du secteur : 1151, rue Notre-Dame (Gatineau), livré en 2024 et vendu 849\,411~\$ le 7 mai 2024 (vente Q11 du tableau 9) --- deux logements à l'étage, deux au rez-de-jardin, brique et revêtement sombre, escaliers extérieurs. Photos de l'inscription (RE/MAX Québec), reproduites à des fins pédagogiques.} | |
| 112 | +\caption{Un quadruplex neuf du secteur : 1151, rue Notre-Dame (Gatineau), livré en 2024 et vendu 849\,411~\$ le 7 mai 2024 (vente Q8 du tableau 8) --- deux logements à l'étage, deux au rez-de-jardin, brique et revêtement sombre, escaliers extérieurs. Photos de l'inscription (RE/MAX Québec), reproduites à des fins pédagogiques.} | |
| 113 | 113 | \label{fig:photos} |
| 114 | 114 | \end{figure} |
| 115 | 115 | |
@@ -121,16 +121,16 @@ Nous sommes le \textbf{29 octobre 2026}. Un promoteur de Gatineau détient un lo | ||
| 121 | 121 | \toprule |
| 122 | 122 | & \textbf{Question} & \textbf{Onglet Excel} & \textbf{Points} \\ |
| 123 | 123 | \midrule |
| 124 | −\textcolor{uqoBleuClair}{\faIcon{sitemap}} & 1. Méthode d'estimation et nature du coût & \onglet{Relevé} & 6 \\ | |
| 125 | −\textcolor{uqoBleuClair}{\faIcon{drafting-compass}} & 2. Du plan au relevé des quantités & \onglet{Relevé} & 10 \\ | |
| 126 | −\textcolor{uqoBleuClair}{\faIcon{calculator}} & 3. Tarification RSMeans des 64 lignes & \onglet{Relevé} & 16 \\ | |
| 124 | +\textcolor{uqoBleuClair}{\faIcon{sitemap}} & 1. Méthode d'estimation et nature du coût & \onglet{Relevé} & 8 \\ | |
| 125 | +\textcolor{uqoBleuClair}{\faIcon{drafting-compass}} & 2. Du plan au relevé : sept grandeurs & \onglet{Relevé} & 8 \\ | |
| 126 | +\textcolor{uqoBleuClair}{\faIcon{calculator}} & 3. Bordereau des 22 composantes & \onglet{Relevé} & 12 \\ | |
| 127 | 127 | \textcolor{uqoOr!85!black}{\faIcon{layer-group}} & 4. Des coûts nus aux coûts directs du cours & \onglet{Bordereau} & 8 \\ |
| 128 | 128 | \textcolor{uqoOr!85!black}{\faIcon{file-signature}} & 5. Permis réel de Gatineau et garantie GCR & \onglet{Bordereau} & 8 \\ |
| 129 | 129 | \textcolor{uqoOr!85!black}{\faIcon{percentage}} & 6. Intérêts intercalaires & \onglet{Bordereau} & 10 \\ |
| 130 | 130 | \textcolor{uqoOr!85!black}{\faIcon{briefcase}} & 7. Autres indirects et total & \onglet{Bordereau} & 8 \\ |
| 131 | −\textcolor{uqoOr!85!black}{\faIcon{coins}} & 8. Profit entrepreneurial, coût total, unités de comparaison & \onglet{Bordereau} & 8 \\ | |
| 131 | +\textcolor{uqoOr!85!black}{\faIcon{coins}} & 8. Profit entrepreneurial, coût total, unités de comparaison & \onglet{Bordereau} & 10 \\ | |
| 132 | 132 | \textcolor{uqoBleuEval}{\faIcon{balance-scale}} & 9. Validation : marché, moteur de coût, Altus & \onglet{Marché} & 14 \\ |
| 133 | −\textcolor{uqoVert}{\faIcon{tachometer-alt}} & 10. Tableau de bord et note au promoteur & \onglet{Dashboard} \onglet{Note} & 12 \\ | |
| 133 | +\textcolor{uqoVert}{\faIcon{tachometer-alt}} & 10. Tableau de bord et note au promoteur & \onglet{Dashboard} \onglet{Note} & 14 \\ | |
| 134 | 134 | \bottomrule |
| 135 | 135 | \end{tabular} |
| 136 | 136 | \end{center} |
@@ -138,10 +138,10 @@ Nous sommes le \textbf{29 octobre 2026}. Un promoteur de Gatineau détient un lo | ||
| 138 | 138 | |
| 139 | 139 | \begin{surlelabo}[Le laboratoire UQO Éval --- ce que vous y trouverez pour ce travail] |
| 140 | 140 | \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é des quantités et la révision r1 tarifée RSMeans --- ligne par ligne, 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…). | |
| 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…). | |
| 142 | 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. |
| 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 11 en provient. | |
| 144 | − \item \textbf{Analyser une propriété} \web{} : recherchez une adresse du tableau 9 pour lire l'unité du rôle (aire d'étages, terrain, valeurs). | |
| 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. | |
| 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). | |
| 145 | 145 | \item \textbf{Éva} \web{/assistant} : assistante pédagogique qui explique une ligne RSMeans, une unité ou une majoration. |
| 146 | 146 | \end{itemize} |
| 147 | 147 | \end{surlelabo} |
@@ -212,31 +212,28 @@ Rez-de-chaussée & 176,40 & 170,8 & 57,40 & 140,06 & 108,38 & 31,68 & 12 & 4 & 5 | ||
| 212 | 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. |
| 213 | 213 | \end{donnees} |
| 214 | 214 | |
| 215 | −{\footnotesize | |
| 216 | −\input{tables_tp2} | |
| 217 | −} | |
| 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}] | |
| 216 | +\begin{center} | |
| 217 | +\small | |
| 218 | +\rowcolors{2}{uqoBgClair!70}{white} | |
| 219 | +\input{tables_tp2_releve} | |
| 220 | +\end{center} | |
| 221 | +\smallskip | |
| 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. | |
| 223 | +\end{donnees} | |
| 218 | 224 | |
| 219 | −\begin{donnees}[Tableau 5 --- Conversion des unités du relevé (SI) vers les unités RSMeans \hfill \xl{Données}{B159:E163}] | |
| 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}] | |
| 220 | 226 | \begin{center} |
| 221 | −\footnotesize | |
| 227 | +\scriptsize | |
| 228 | +\setlength{\tabcolsep}{2.8pt} | |
| 222 | 229 | \rowcolors{2}{uqoBgClair!70}{white} |
| 223 | −\begin{tabular}{@{}llll@{}} | |
| 224 | −\toprule | |
| 225 | −\textbf{Unité du relevé} & \textbf{Unité RSMeans} & \textbf{Facteur ($\times$ quantité)} & \textbf{Rappel} \\ | |
| 226 | −\midrule | |
| 227 | −m & pi lin. & 3,280840 & 1 m $=$ 3,28084 pi \\ | |
| 228 | −m\up{2} & pi\up{2} & 10,763910 & 1 m\up{2} $=$ 10,7639 pi\up{2} \\ | |
| 229 | −m\up{3} & vg\up{3} & 1,307951 & 1 m\up{3} $=$ 1,30795 vg\up{3} \\ | |
| 230 | −unité & unité (Ea.) & 1 & \\ | |
| 231 | −forfait & forfait (lump sum) & 1 & \\ | |
| 232 | −\bottomrule | |
| 233 | −\end{tabular} | |
| 230 | +\input{tables_tp2} | |
| 234 | 231 | \end{center} |
| 235 | 232 | \smallskip |
| 236 | −\footnotesize Le \textbf{facteur d'ajustement} du tableau 4 traduit une particularité du poste : poutre LVL à 3~plis ($\times$~3), fermes tarifées par pi\up{2} de plancher ($\times$~0,93), isolant R-38 épaissi pour R-50 ($\times$~1,32), XPS en deux couches ($\times$~2), descentes pluviales ($\times$~0,35 de la longueur des gouttières), membrane en deux couches ($\times$~2). Quantité RSMeans $=$ quantité du relevé $\times$ facteur $\times$ conversion. | |
| 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). | |
| 237 | 234 | \end{donnees} |
| 238 | 235 | |
| 239 | −\begin{donnees}[Tableau 6 --- Divisions MasterFormat présentes et direct nu par division selon la révision r1 (contrôle de la question 3) \hfill \xl{Données}{B167:E179}] | |
| 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}] | |
| 240 | 237 | \begin{center} |
| 241 | 238 | \small |
| 242 | 239 | \rowcolors{2}{uqoBgClair!70}{white} |
@@ -244,7 +241,7 @@ forfait & forfait (lump sum) & 1 & \\ | ||
| 244 | 241 | \end{center} |
| 245 | 242 | \end{donnees} |
| 246 | 243 | |
| 247 | −\begin{donnees}[Tableau 7 --- Majorations appliquées par le moteur Quantity Survey d'UQO Éval (ordre d'application de la révision r1) \hfill \xl{Données}{B183:E188}] | |
| 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}] | |
| 248 | 245 | \begin{center} |
| 249 | 246 | \small |
| 250 | 247 | \rowcolors{2}{uqoBgClair!70}{white} |
@@ -252,12 +249,12 @@ forfait & forfait (lump sum) & 1 & \\ | ||
| 252 | 249 | \toprule |
| 253 | 250 | \textbf{Étape} & \textbf{Valeur} & \textbf{Note} \\ |
| 254 | 251 | \midrule |
| 255 | −Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval & 255,83~\$ & matériaux $\times$ 1,02, équipement $\times$ 1,01; les 61 lignes RSMeans sont déjà localisées \\ | |
| 252 | +Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval & 255,83~\$ & matériaux $\times$ 1,02, équipement $\times$ 1,01; les lignes RSMeans sont déjà localisées \\ | |
| 256 | 253 | Conditions générales du chantier & 8~\% des directs nus localisés & mobilisation, gestion, clôtures, toilettes, nettoyage \\ |
| 257 | 254 | Frais généraux de l'entrepreneur & 7~\% du cumul précédent & bureau, assurances de l'entreprise, estimation \\ |
| 258 | 255 | Profit de l'entrepreneur général & 8~\% du cumul précédent & $\neq$ profit entrepreneurial du promoteur (question 8) \\ |
| 259 | 256 | Contingences de construction & 5~\% des directs nus localisés & imprévus de chantier \\ |
| 260 | −\textbf{Total de la révision r1} & \textbf{611\,823,07~\$} & à retrouver à la question 4 ($\pm$ 25~\$ d'arrondi) \\ | |
| 257 | +\textbf{Total de la révision r1} & \textbf{611\,823,07~\$} & à retrouver à la question 4 ($\pm$ 50~\$ d'arrondi) \\ | |
| 261 | 258 | \bottomrule |
| 262 | 259 | \end{tabular} |
| 263 | 260 | \end{center} |
@@ -265,7 +262,7 @@ Contingences de construction & 5~\% des directs nus localisés & imprévus de ch | ||
| 265 | 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. |
| 266 | 263 | \end{donnees} |
| 267 | 264 | |
| 268 | −\begin{donnees}[Tableau 8 --- 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}{B192:E207}] | |
| 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}] | |
| 269 | 266 | \begin{center} |
| 270 | 267 | \footnotesize |
| 271 | 268 | \rowcolors{2}{uqoBgClair!70}{white} |
@@ -292,7 +289,7 @@ Indexation du rôle terrain & ratio médian prix vendu $\div$ rôle terrain \tex | ||
| 292 | 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. |
| 293 | 290 | \end{donnees} |
| 294 | 291 | |
| 295 | −\begin{donnees}[Tableau 9 --- Onze ventes RÉELLES de quadruplex neufs (construits 2021--2024) à Gatineau, 2024--2025 \hfill \xl{Données}{B211:N221}] | |
| 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}] | |
| 296 | 293 | \begin{center} |
| 297 | 294 | \tiny |
| 298 | 295 | \setlength{\tabcolsep}{2.4pt} |
@@ -300,10 +297,10 @@ Indexation du rôle terrain & ratio médian prix vendu $\div$ rôle terrain \tex | ||
| 300 | 297 | \input{tables_tp2_ventes} |
| 301 | 298 | \end{center} |
| 302 | 299 | \smallskip |
| 303 | −\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. Q11 : vente de livraison de mai 2024 (figure~\ref{fig:photos}). Source : UQO Éval. | |
| 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. | |
| 304 | 301 | \end{donnees} |
| 305 | 302 | |
| 306 | −\begin{donnees}[Tableau 10 --- Deux quadruplex de 2020 en vigueur à Gatineau (prix demandés réels) \hfill \xl{Données}{B226:N227}] | |
| 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}] | |
| 307 | 304 | \begin{center} |
| 308 | 305 | \scriptsize |
| 309 | 306 | \setlength{\tabcolsep}{2.5pt} |
@@ -325,7 +322,7 @@ A2 & 335, av. de l'Hippodrome (Aylmer) & 1\,289\,900 & 299,1 & 3 & 76\,800 & 210 | ||
| 325 | 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 \$}} |
| 326 | 323 | |
| 327 | 324 | \vspace{8pt} |
| 328 | −\begin{donnees}[Tableau 11 --- 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}{B231:E256}] | |
| 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}] | |
| 329 | 326 | \begin{minipage}[t]{0.52\textwidth} |
| 330 | 327 | \scriptsize |
| 331 | 328 | \rowcolors{2}{uqoBgClair!70}{white} |
@@ -359,45 +356,45 @@ Indice de confiance & B (43~\% des matériaux sur prix observés) \\ | ||
| 359 | 356 | |
| 360 | 357 | Chaque question indique l'\textbf{emplacement exact de la réponse} dans le gabarit par un badge \xl{Onglet}{plage}. L'onglet \onglet{Données} ne doit jamais être modifié. Les formules attendues sont données en français; les équivalents anglais sont rappelés entre parenthèses. |
| 361 | 358 | |
| 362 | −\begin{questionexam}{\faIcon{sitemap}\quad Méthode d'estimation et nature du coût estimé}{6} | |
| 363 | −\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 composantes (unités en place), par \textbf{relevé des quantités} (\emph{quantity survey}) et indexée --- justifiez le choix du relevé des quantités pour ce mandat, en vous appuyant sur ce que le promoteur possède (tableaux 1 à 4). 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). | |
| 359 | +\begin{questionexam}{\faIcon{sitemap}\quad Méthode d'estimation et nature du coût estimé}{8} | |
| 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). | |
| 364 | 361 | \end{questionexam} |
| 365 | 362 | |
| 366 | −\begin{questionexam}{\faIcon{drafting-compass}\quad Du plan au relevé des quantités}{10} | |
| 367 | −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 douze 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}) : | |
| 363 | +\begin{questionexam}{\faIcon{drafting-compass}\quad Du plan au relevé : sept grandeurs}{8} | |
| 364 | +Onglet \onglet{Relevé}. Le relevé d'UQO Éval (tableau 3) est généré depuis les plans et la fiche; vous allez en \textbf{reproduire sept grandeurs} par formule, à partir des dimensions du tableau 1 (liées dans \xl{Données}{D11:D24}) et des totaux des plans (tableau 2, liés en \cel{Relevé!E12:G12}) : | |
| 368 | 365 | \begin{enumerate}[label=\alph*), itemsep=2pt] |
| 369 | − \item \xl{Relevé}{F16:F27} : empreinte $=(L+\text{ép.})\times(P+\text{ép.})$; périmètre à l'axe $=2(L+P)$; excavation $=(\text{empreinte}+0{,}9\times\text{périmètre})\times\text{profondeur}$; remblai $=\text{périmètre}\times0{,}9\times(\text{profondeur}-0{,}3)$; murs de fondation $=\text{périmètre}\times h_{\text{fond}}$; membrane $=\text{périmètre}\times(h_{\text{fond}}-\text{hors sol})$; 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; gypse des murs $=$ murs nets $+2\times$ cloisons; peinture $=$ gypse murs $+$ aires des pièces (plafonds); | |
| 370 | − \item \xl{Relevé}{H16:H27} : 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. | |
| 366 | + \item \xl{Relevé}{F16:F22} : empreinte $=(L+\text{ép.})\times(P+\text{ép.})$; périmètre à l'axe $=2(L+P)$; murs de fondation $=\text{périmètre}\times h_{\text{fond}}$; murs extérieurs bruts $=\text{périmètre}\times h_{\text{étage}}\times\text{niveaux}$; murs extérieurs nets $=$ bruts $-$ ouvertures; surface de toit $=\text{empreinte}\times\text{pente}\times\text{débords}$; planchers portés $=\Sigma$ aires des pièces hors sol; | |
| 367 | + \item \xl{Relevé}{H16:H22} : l'\textbf{écart} en \% entre votre calcul et la valeur d'UQO Éval (liée en colonne G). Un écart non nul signale une erreur de lecture du plan ou de formule --- la mise en forme conditionnelle vous le dira. | |
| 371 | 368 | \end{enumerate} |
| 372 | 369 | \begin{formule} |
| 373 | −$\text{Excavation} = (199{,}02 + 0{,}9 \times 57{,}40) \times 2{,}60$ \qquad soit \fx{=(F16+0,9*F17)*Données!D17} | |
| 370 | +$\text{Murs extérieurs bruts} = 57{,}40 \times 2{,}44 \times 2$ \qquad soit \fx{=F17*Données!D14*Données!D10} | |
| 374 | 371 | \end{formule} |
| 372 | +Ces sept grandeurs sont les quantités de référence des composantes 3 et 5 à 10 du tableau 4. | |
| 375 | 373 | \end{questionexam} |
| 376 | 374 | |
| 377 | −\begin{questionexam}{\faIcon{calculator}\quad Tarification RSMeans des 64 lignes}{16} | |
| 378 | −Onglet \onglet{Relevé}, lignes 32 à 95 (les 64 lignes du tableau 4 y sont liées : quantité, unité, facteur, unité RSMeans, trois prix unitaires nus). Pour \textbf{chaque ligne}, par formule copiée vers le bas : | |
| 375 | +\begin{questionexam}{\faIcon{calculator}\quad Bordereau des 22 composantes}{12} | |
| 376 | +Onglet \onglet{Relevé}, lignes 27 à 48 (les 22 composantes du tableau 4 y sont liées : quantité, unité, trois prix composites nus). Pour \textbf{chaque composante}, par formule copiée vers le bas : | |
| 379 | 377 | \begin{enumerate}[label=\alph*), itemsep=2pt] |
| 380 | − \item \xl{Relevé}{K32:K95} : le \textbf{facteur de conversion} lu dans le tableau 5 avec \fx{RECHERCHEV} (\fx{VLOOKUP}) sur l'unité du relevé; | |
| 381 | − \item \xl{Relevé}{L32:L95} : la \textbf{quantité RSMeans} $=$ quantité du relevé $\times$ facteur d'ajustement $\times$ conversion; | |
| 382 | − \item \xl{Relevé}{P32:P95} : le \textbf{coût unitaire nu} $=$ matériaux $+$ main-d'œuvre $+$ équipement; | |
| 383 | − \item \xl{Relevé}{Q32:Q95} : le \textbf{montant} $=$ quantité RSMeans $\times$ coût unitaire; puis \xl{Relevé}{Q96} : le \textbf{coût direct nu total}; | |
| 384 | − \item \xl{Relevé}{E98:E101} : 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}; | |
| 385 | − \item \xl{Relevé}{E105:F117} : 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 6; | |
| 386 | − \item \xl{Relevé}{C121:C123} et \xl{Relevé}{E121:E123} : les \textbf{trois postes les plus lourds} (\fx{GRANDE.VALEUR} / \fx{LARGE}, puis \fx{INDEX} + \fx{EQUIV} / \fx{MATCH}). | |
| 378 | + \item \xl{Relevé}{K27:K48} : le \textbf{coût unitaire nu} $=$ matériaux $+$ main-d'œuvre $+$ équipement; | |
| 379 | + \item \xl{Relevé}{L27:L48} : le \textbf{montant} $=$ quantité $\times$ coût unitaire; | |
| 380 | + \item \xl{Relevé}{L49} : le \textbf{coût direct nu total}; | |
| 381 | + \item \xl{Relevé}{E51:E54} : les montants totaux des matériaux, de la main-d'œuvre et de l'équipement (\fx{SOMMEPROD} / \fx{SUMPRODUCT}) et la \textbf{part de la main-d'œuvre}; | |
| 382 | + \item \xl{Relevé}{E58:F69} : le \textbf{sous-total de chaque division} MasterFormat (\fx{SOMME.SI} / \fx{SUMIF} sur la colonne des codes) et sa part; la colonne H compare au tableau 5; | |
| 383 | + \item \xl{Relevé}{C72:C74} et \xl{Relevé}{E72:E74} : les \textbf{trois composantes les plus lourdes} (\fx{GRANDE.VALEUR} / \fx{LARGE}, puis \fx{INDEX} + \fx{EQUIV} / \fx{MATCH}). | |
| 387 | 384 | \end{enumerate} |
| 388 | −Votre total doit retrouver le direct nu de la révision r1 (471\,085~\$) à quelques dollars près (arrondis des quantités). | |
| 385 | +Votre total doit retrouver le direct nu de la révision r1 (471\,085~\$) à quelques dollars près (arrondis des prix composites). | |
| 389 | 386 | \end{questionexam} |
| 390 | 387 | |
| 391 | 388 | \begin{questionexam}{\faIcon{layer-group}\quad Des coûts nus aux coûts directs du cours}{8} |
| 392 | 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}) : |
| 393 | 390 | \begin{enumerate}[label=\alph*), itemsep=2pt] |
| 394 | − \item directs nus \textbf{localisés} $=$ direct nu (lié de \cel{Relevé!Q96}) $+$ ajustement régional; | |
| 391 | + \item directs nus \textbf{localisés} $=$ direct nu (lié de \cel{Relevé!L49}) $+$ ajustement régional; | |
| 395 | 392 | \item conditions générales du chantier (8~\% des directs nus localisés); |
| 396 | 393 | \item frais généraux de l'entrepreneur (7~\% du cumul : directs $+$ conditions générales); |
| 397 | 394 | \item profit de l'entrepreneur général (8~\% du cumul précédent); |
| 398 | 395 | \item \textbf{coûts directs au sens du cours} $=$ a $+$ b $+$ c $+$ d; |
| 399 | 396 | \item contingences de construction (5~\% des directs nus localisés); |
| 400 | − \item \textbf{directs $+$ contingences}. La cellule \cel{D16} vérifie que vous retrouvez le total de la révision r1 (611\,823~\$, $\pm$ 25~\$). | |
| 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~\$). | |
| 401 | 398 | \end{enumerate} |
| 402 | 399 | \end{questionexam} |
| 403 | 400 | |
@@ -424,11 +421,11 @@ Points : taux (2); formule complète (5 --- l'oubli du ½ en coûte 3); explicat | ||
| 424 | 421 | \xl{Bordereau}{C29:C30} et \xl{Bordereau}{C32:C33} : honoraires professionnels (4~\% des coûts directs \textbf{au sens du cours}, pas des directs nus ni de directs $+$ contingences), assurance chantier (0,8~\% de directs $+$ contingences), puis le \textbf{total des indirects} (permis $+$ GCR $+$ intercalaires $+$ honoraires $+$ assurance $+$ frais juridiques liés) et le \textbf{ratio} indirects $\div$ directs du cours. Comparez mentalement ce ratio à la fourchette de 15--25~\% de la séance 8 : que manque-t-il à notre liste par rapport à un projet commercial (vous y reviendrez dans la note)? |
| 425 | 422 | \end{questionexam} |
| 426 | 423 | |
| 427 | −\begin{questionexam}{\faIcon{coins}\quad Profit entrepreneurial, coût total et unités de comparaison}{8} | |
| 424 | +\begin{questionexam}{\faIcon{coins}\quad Profit entrepreneurial, coût total et unités de comparaison}{10} | |
| 428 | 425 | \xl{Bordereau}{C36:C43} et \xl{Bordereau}{C44} : |
| 429 | 426 | \begin{enumerate}[label=\alph*), itemsep=2pt] |
| 430 | 427 | \item l'\textbf{assiette} du profit (directs $+$ contingences $+$ indirects), le \textbf{profit entrepreneurial} de 11~\% et le \textbf{COÛT TOTAL DE REMPLACEMENT NEUF} hors taxes; |
| 431 | − \item trois unités de comparaison : le coût par pi\up{2} d'\textbf{aire brute hors sol} (398,04~m\up{2}), par pi\up{2} d'\textbf{aire chauffée} (352,81~m\up{2}) et par \textbf{logement} --- la conversion en pi\up{2} lit \cel{Données!D207}; | |
| 428 | + \item trois unités de comparaison : le coût par pi\up{2} d'\textbf{aire brute hors sol} (398,04~m\up{2}), par pi\up{2} d'\textbf{aire chauffée} (352,81~m\up{2}) et par \textbf{logement} --- la conversion en pi\up{2} lit \cel{Données!D115}; | |
| 432 | 429 | \item le profit qu'aurait donné la convention « 11~\% des coûts directs seulement », l'\textbf{écart} entre les deux conventions, puis en \cel{C44} (3 à 4 lignes) : pourquoi l'évaluateur doit \textbf{toujours énoncer sa convention} dans son rapport, et quelle base est la plus défendable du point de vue du promoteur. |
| 433 | 430 | \end{enumerate} |
| 434 | 431 | Les taxes de vente (TPS, TVQ) se calculent automatiquement aux lignes 48 à 50, \textbf{à titre informatif} : la convention du cours les exclut du coût de remplacement d'un immeuble locatif pour rester comparable aux prix observés (remboursement partiel pour immeubles locatifs neufs). |
@@ -437,23 +434,22 @@ Les taxes de vente (TPS, TVQ) se calculent automatiquement aux lignes 48 à 50, | ||
| 437 | 434 | \begin{questionexam}{\faIcon{balance-scale}\quad Validation : marché des quadruplex neufs, moteur de coût, Altus}{14} |
| 438 | 435 | Onglet \onglet{Marché}. Le marché vend des immeubles \textbf{terrain compris}; pour le comparer à un coût de construction, il faut \textbf{extraire} la valeur du bâtiment (séance 8 : extraction du profit par le marché). |
| 439 | 436 | \begin{enumerate}[label=\alph*), itemsep=2pt] |
| 440 | − \item \xl{Marché}{J6:N16}, pour chacune des onze ventes du tableau 9 : le \textbf{terrain indexé} $=$ rôle terrain $\times$ 1,257 (le rôle est daté de juillet 2022; le ratio du TP1 le ramène au marché 2026), la \textbf{valeur implicite du bâtiment} $=$ prix $-$ terrain indexé, cette valeur par \textbf{m\up{2} d'aire d'étages} et par \textbf{logement}, et le ratio prix $\div$ rôle total; puis \xl{Marché}{K17:N17} les \textbf{médianes} (\fx{MEDIANE} / \fx{MEDIAN}); | |
| 441 | − \item \xl{Marché}{K21}, \xl{Marché}{K23}, \xl{Marché}{K24} : l'écart du coût total du bordereau par rapport à la valeur implicite médiane du bâtiment; l'écart par rapport au RCN du moteur de coût (tableau 11); la position de votre \$/pi\up{2} hors sol dans la fourchette Altus 2026 par une formule \fx{SI} (\emph{sous} / \emph{dans} / \emph{au-dessus de} la fourchette); | |
| 442 | − \item \xl{Marché}{K25} : le \textbf{profit entrepreneurial extrait du marché} $=$ (valeur implicite médiane du bâtiment $-$ assiette \cel{Bordereau!C36}) $\div$ assiette; | |
| 443 | − \item \xl{Marché}{F29:G30} : pour les deux annonces du tableau 10, la valeur implicite du bâtiment et le \$/logement \textbf{demandés}; | |
| 444 | − \item \xl{Marché}{C33} (8 à 12 lignes) : \textbf{lisez} ces résultats --- que signifie l'écart bordereau / marché? pourquoi le profit extrait dépasse-t-il la convention de 11~\%? quelles différences entre le projet et les comparables faut-il nommer (logements au rez-de-jardin, étages, qualité, année, terrain indexé, Q11, prix demandés $\neq$ ventes)? que retenir pour le promoteur? | |
| 437 | + \item \xl{Marché}{J6:N13}, pour chacune des huit ventes du tableau 8 : le \textbf{terrain indexé} $=$ rôle terrain $\times$ 1,257 (le rôle est daté de juillet 2022; le ratio du TP1 le ramène au marché 2026), la \textbf{valeur implicite du bâtiment} $=$ prix $-$ terrain indexé, cette valeur par \textbf{m\up{2} d'aire d'étages} et par \textbf{logement}, et le ratio prix $\div$ rôle total; puis \xl{Marché}{K14:N14} les \textbf{médianes} (\fx{MEDIANE} / \fx{MEDIAN}); | |
| 438 | + \item \xl{Marché}{K18}, \xl{Marché}{K20}, \xl{Marché}{K21} : l'écart du coût total du bordereau par rapport à la valeur implicite médiane du bâtiment; l'écart par rapport au RCN du moteur de coût (tableau 10); la position de votre \$/pi\up{2} hors sol dans la fourchette Altus 2026 par une formule \fx{SI} (\emph{sous} / \emph{dans} / \emph{au-dessus de} la fourchette); | |
| 439 | + \item \xl{Marché}{K22} : le \textbf{profit entrepreneurial extrait du marché} $=$ (valeur implicite médiane du bâtiment $-$ assiette \cel{Bordereau!C36}) $\div$ assiette; | |
| 440 | + \item \xl{Marché}{C25} (8 à 12 lignes) : \textbf{lisez} ces résultats --- que signifie l'écart bordereau / marché? pourquoi le profit extrait dépasse-t-il la convention de 11~\%? quelles différences entre le projet et les comparables faut-il nommer (logements au rez-de-jardin, qualité, année, terrain indexé, Q8, annonces du tableau 9 $=$ prix demandés, pas des ventes)? que retenir pour le promoteur? | |
| 445 | 441 | \end{enumerate} |
| 446 | −Points : a (5); b (3); c (2); d (1); e (3). | |
| 442 | +Points : a (5); b (3); c (2); d (4). | |
| 447 | 443 | \end{questionexam} |
| 448 | 444 | |
| 449 | −\begin{questionexam}{\faIcon{tachometer-alt}\quad Tableau de bord et note au promoteur}{12} | |
| 445 | +\begin{questionexam}{\faIcon{tachometer-alt}\quad Tableau de bord et note au promoteur}{14} | |
| 450 | 446 | \begin{enumerate}[label=\alph*), itemsep=2pt] |
| 451 | 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é); |
| 452 | 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; |
| 453 | − \item \textbf{Graphiques} : les deux graphiques fournis (direct nu par division; coût du bâtiment par logement selon le bordereau, le moteur, le marché et les annonces) 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 onze ventes), titré et étiqueté; | |
| 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é; | |
| 454 | 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. |
| 455 | 451 | \end{enumerate} |
| 456 | −Points : KPI (4), verdict et 3\up{e} graphique (3), note (5 --- le chiffrage du retard en vaut 2). | |
| 452 | +Points : KPI (4), verdict et 3\up{e} graphique (4), note (6 --- le chiffrage du retard en vaut 2). | |
| 457 | 453 | \end{questionexam} |
| 458 | 454 | |
| 459 | 455 | % ------------------------------------------------------------------------------ |
@@ -466,16 +462,16 @@ Points : KPI (4), verdict et 3\up{e} graphique (3), note (5 --- le chiffrage du | ||
| 466 | 462 | \toprule |
| 467 | 463 | \textbf{Question} & \textbf{Objet évalué} & \textbf{Points} \\ |
| 468 | 464 | \midrule |
| 469 | −1 & Choix du relevé des quantités motivé (2); les trois autres méthodes (2); remplacement par définition et limites (2) & 6 \\ | |
| 470 | −2 & Douze grandeurs par formule (8); écarts et correction des anomalies (2) & 10 \\ | |
| 471 | −3 & Conversion par \fx{RECHERCHEV} (3); quantité RSMeans (3); coût unitaire et montant (3); total, matériaux / MO / équipement (2); sous-totaux par division (3); trois postes les plus lourds (2) & 16 \\ | |
| 465 | +1 & Méthode par composantes motivée (3); les trois autres méthodes (2); remplacement par définition et limites (3) & 8 \\ | |
| 466 | +2 & Sept grandeurs par formule (6); écarts et correction des anomalies (2) & 8 \\ | |
| 467 | +3 & Coût unitaire et montant (4); total, matériaux / MO / équipement (3); sous-totaux par division (3); trois composantes les plus lourdes (2) & 12 \\ | |
| 472 | 468 | 4 & Ordre des majorations respecté (5); directs du cours, contingences et contrôle r1 (3) & 8 \\ |
| 473 | 469 | 5 & Permis : \fx{MAX} fonctionnel et assiette (5); GCR (3) & 8 \\ |
| 474 | 470 | 6 & Taux (2); formule complète avec ½ (5); explication et cas limite (3) & 10 \\ |
| 475 | 471 | 7 & Honoraires sur la bonne assiette (3); assurance (1); total et ratio (4) & 8 \\ |
| 476 | −8 & Assiette, profit et total (3); unités de comparaison (2); convention chiffrée et argumentée (3) & 8 \\ | |
| 477 | −9 & Extraction sur onze ventes et médianes (5); écarts et position Altus (3); profit extrait (2); annonces (1); lecture (3) & 14 \\ | |
| 478 | −10 & KPI (4); verdict et 3\up{e} graphique (3); note au promoteur chiffrée (5) & 12 \\ | |
| 472 | +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 \\ | |
| 474 | +10 & KPI (4); verdict et 3\up{e} graphique (4); note au promoteur chiffrée (6) & 14 \\ | |
| 479 | 475 | \midrule |
| 480 | 476 | & \textbf{Total} & \textbf{100} \\ |
| 481 | 477 | \bottomrule |
@@ -494,11 +490,11 @@ Points : KPI (4), verdict et 3\up{e} graphique (3), note (5 --- le chiffrage du | ||
| 494 | 490 | \partieexamen{Sources des données (extraction du 29 octobre 2026)}{} |
| 495 | 491 | |
| 496 | 492 | \begin{enumerate}[leftmargin=18pt, itemsep=3pt] |
| 497 | − \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 à 7, figures 2 et 3. \url{https://www.uqo-eval.app/quantity-survey/projets/97fa1d2a-06e1-4ed3-a580-0728616915ce} | |
| 498 | − \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 pour les seules 64 lignes du cas. \url{https://www.rsmeansonline.com} | |
| 499 | − \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 9. \url{https://www.uqo-eval.app/methodologie} | |
| 500 | − \item UQO Éval --- « À vendre » : copie des inscriptions en vigueur (source Immo-Ka, 29 octobre 2026) : tableau 10; 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. | |
| 501 | − \item UQO Éval --- moteur de coût \web{/cout} (\texttt{POST /api/cost/estimate}, mode construction, prix du 29 octobre 2026) : tableau 11. | |
| 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} | |
| 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} | |
| 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} | |
| 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. | |
| 497 | + \item UQO Éval --- moteur de coût \web{/cout} (\texttt{POST /api/cost/estimate}, mode construction, prix du 29 octobre 2026) : tableau 10. | |
| 502 | 498 | \item Ville de Gatineau, règlement 501-2005, art. 104 : permis de construction résidentiel, 4,70~\$/1\,000~\$ de travaux, minimum 335~\$/logement. \url{https://www.gatineau.ca} |
| 503 | 499 | \item Garantie de construction résidentielle (GCR), grille de primes 2026, classe 1, cote A : 2\,656,68~\$ par unité. \url{https://www.garantiegcr.com} |
| 504 | 500 | \item Banque du Canada, annonce du 28 octobre 2026 : taux directeur relevé de 2,25 à 2,50~\%; taux préférentiel des grandes banques à 4,70~\% le 29 octobre 2026. \url{https://www.banqueducanada.ca/grandes-fonctions/politique-monetaire/taux-directeur/} |
modified
IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2.tex
+25 −137
@@ -1,140 +1,28 @@ | ||
| 1 | −\begin{longtable}{@{}rp{4.4cm}rlp{7.3cm}@{}} | |
| 2 | −\caption*{\sffamily\bfseries\color{uqoBleu}Tableau 3 --- Relevé des quantités généré par UQO Éval depuis les plans et la fiche (49 mesures « QS ») \hfill \xl{Données}{B38:N86}}\\ | |
| 1 | +\begin{tabular}{@{}rlp{3.4cm}p{4.6cm}rp{1.9cm}rrr@{}} | |
| 3 | 2 | \toprule |
| 4 | −\textbf{N\up{o}} & \textbf{Poste} & \textbf{Quantité} & \textbf{Unité} & \textbf{Formule du relevé et entrées} \\ | |
| 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} \\ | |
| 5 | 4 | \midrule |
| 6 | −\endfirsthead | |
| 7 | −\toprule | |
| 8 | −\textbf{N\up{o}} & \textbf{Poste} & \textbf{Quantité} & \textbf{Unité} & \textbf{Formule du relevé et entrées} \\ | |
| 9 | −\midrule | |
| 10 | −\endhead | |
| 11 | −\bottomrule | |
| 12 | −\endfoot | |
| 13 | −1 & Excavation & 651,77 & m\up{3} & (empreinte + 0,9 m $\times$ périmètre) $\times$ profondeur --- empreinte m\up{2} = 199.02 ; perimetre m = 57.4 ; profondeur m = 2.6 \\ | |
| 14 | −2 & Remblai & 118,82 & m\up{3} & périmètre $\times$ 0,9 m $\times$ (profondeur -- 0,3) --- perimetre m = 57.4 ; profondeur m = 2.6 \\ | |
| 15 | −3 & Drain français & 57,40 & m & périmètre de fondation --- perimetre m = 57.4 \\ | |
| 16 | −4 & Branchements (aqueduc, égout, électricité) & 1,00 & forfait & 1 par bâtiment \\ | |
| 17 | −5 & Semelles filantes & 57,40 & m & périmètre (+ 1/2 périmètre du garage) --- perimetre m = 57.4 ; garage m\up{2} = 0 \\ | |
| 18 | −6 & Murs de fondation (h 2.44 m) & 140,06 & m\up{2} & périmètre $\times$ hauteur de mur --- perimetre m = 57.4 ; hauteur m = 2.44 \\ | |
| 19 | −7 & Membrane d'étanchéité des fondations & 122,84 & m\up{2} & périmètre $\times$ (hauteur -- 0,3 m hors sol) --- perimetre m = 57.4 ; hauteur m = 2.44 \\ | |
| 20 | −8 & Dalle de sous-sol 100 mm & 199,02 & m\up{2} & aire du sous-sol --- aire m\up{2} = 199.02 \\ | |
| 21 | −9 & Fenêtres de sous-sol & 3,00 & unité & comptées sur le plan du sous-sol --- perimetre m = 57.4 \\ | |
| 22 | −10 & Planchers portés (solives) & 352,81 & m\up{2} & $\Sigma$ aires de plancher des niveaux --- aire m\up{2} = 352.81 \\ | |
| 23 | −11 & Murs extérieurs ossature 2$\times$6 & 280,11 & m\up{2} & $\Sigma$ murs extérieurs bruts mesurés + pignons --- murs\_bruts m\up{2} = 280.11 ; pignons m\up{2} = 0 \\ | |
| 24 | −12 & Cloisons ossature 2$\times$4 & 292,31 & m\up{2} & $\Sigma$ cloisons mesurées (longueur $\times$ hauteur) --- cloisons m\up{2} = 292.31 \\ | |
| 25 | −13 & Poutre centrale LVL & 16,69 & m & longueur du bâtiment $\approx$ √(empreinte $\times$ 1,4) --- empreinte m\up{2} = 199.02 \\ | |
| 26 | −14 & Colonnes d'acier & 6,00 & unité & longueur $\div$ 3 m --- longueur m = 16.69 \\ | |
| 27 | −15 & Fermes de toit + support OSB & 218,92 & m\up{2} & (empreinte du dernier niveau + garage) $\times$ facteur de pente $\times$ 1,10 débords --- empreinte m\up{2} = 199.02 ; facteur\_pente = 1 ; pente = 0 \\ | |
| 28 | −16 & Escaliers intérieurs & 2,00 & unité & escaliers dessinés (min. niveaux -- 1 + sous-sol) --- dessines = 0 \\ | |
| 29 | −17 & Isolation des murs extérieurs R-24 & 216,75 & m\up{2} & $\Sigma$ murs extérieurs nets (ouvertures déduites) --- net m\up{2} = 216.75 \\ | |
| 30 | −18 & Isolation du comble R-50 & 199,02 & m\up{2} & empreinte du dernier niveau --- empreinte m\up{2} = 199.02 \\ | |
| 31 | −19 & Isolation intérieure des murs de sous-sol R-20 & 140,06 & m\up{2} & périmètre $\times$ 2,44 m --- perimetre m = 57.4 \\ | |
| 32 | −20 & Revêtement brick (80 \%) & 173,40 & m\up{2} & murs extérieurs nets $\times$ part --- net m\up{2} = 216.75 ; part = 0.8 \\ | |
| 33 | −21 & Revêtement vinyl (20 \%) & 43,35 & m\up{2} & murs extérieurs nets $\times$ part --- net m\up{2} = 216.75 ; part = 0.2 \\ | |
| 34 | −22 & Soffites et bordures de toit & 63,14 & m & périmètre $\times$ 1,10 --- perimetre m = 57.4 \\ | |
| 35 | −23 & Gouttières & 34,44 & m & périmètre $\times$ 60 \% --- perimetre m = 57.4 \\ | |
| 36 | −24 & Couverture & 218,92 & m\up{2} & surface de toit --- toit m\up{2} = 218.92 \\ | |
| 37 | −25 & Fenêtres & 24,00 & unité & comptées sur les plans --- comptees = 24 \\ | |
| 38 | −26 & Portes extérieures & 4,00 & unité & comptées sur les plans --- comptees = 4 \\ | |
| 39 | −27 & Portes-patio & 4,00 & unité & comptées sur les plans (portes ext. $\geq$ 1,5 m) --- comptees = 4 \\ | |
| 40 | −28 & Portes intérieures & 16,00 & unité & chambres + salles de bain + salles d'eau + 1 par logement --- comptees = 0 ; chambres = 8 \\ | |
| 41 | −29 & Portes de garde-robe & 11,00 & unité & 1 par chambre (min. aire $\div$ 32 m\up{2}) --- chambres = 8 \\ | |
| 42 | −30 & Gypse 1/2 po murs (face intérieure des murs ext. + 2 faces des cloisons) & 801,38 & m\up{2} & murs ext. nets + 2 $\times$ cloisons + sous-sol fini --- ext\_net m\up{2} = 216.75 ; cloisons\_x2 m\up{2} = 584.62 \\ | |
| 43 | −31 & Gypse 5/8 po plafonds & 352,81 & m\up{2} & $\Sigma$ aires des pièces (+ sous-sol fini) --- pieces m\up{2} = 352.81 \\ | |
| 44 | −32 & Peinture 2 couches (murs + plafonds) & 1\,154,18 & m\up{2} & gypse murs + plafonds \\ | |
| 45 | −33 & Céramique (cuisine, salles de bain, salles d'eau) & 131,90 & m\up{2} & aires des pièces d'eau et cuisine --- pieces\_eau m\up{2} = 131.9 \\ | |
| 46 | −34 & Plancher hardwood (80 \%) & 176,73 & m\up{2} & aires des pièces sèches $\times$ part --- pieces\_seches m\up{2} = 220.91 ; part = 0.8 \\ | |
| 47 | −35 & Plancher vinyl\_plank (20 \%) & 44,18 & m\up{2} & aires des pièces sèches $\times$ part --- pieces\_seches m\up{2} = 220.91 ; part = 0.2 \\ | |
| 48 | −36 & Plinthes & 341,60 & m & $\Sigma$ périmètres des pièces \\ | |
| 49 | −37 & Tablettes de garde-robe & 19,20 & m & 2,4 m par chambre --- chambres = 8 \\ | |
| 50 | −38 & Armoires et comptoirs de cuisine & 34,04 & m & 45 \% du périmètre de chaque cuisine (3,6–9 m) --- cuisines = 4 \\ | |
| 51 | −39 & Salles de bain complètes & 4,00 & unité & pièces « salle de bain » comptées --- comptees = 4 \\ | |
| 52 | −40 & Plomberie brute (appareils) & 28,00 & unité & 2/cuisine + 3/salle de bain + 2/salle d'eau + 2/logement --- cuisines = 4 ; sdb = 4 ; salles\_eau = 0 ; logements = 4 \\ | |
| 53 | −41 & Chauffe-eau 60 gal & 4,00 & unité & 1 par logement --- logements = 4 \\ | |
| 54 | −42 & Drainage et évents & 1,00 & forfait & 1 par bâtiment \\ | |
| 55 | −43 & Plinthes électriques 1 500 W & 26,00 & unité & aire chauffée $\div$ 14 m\up{2} --- aire m\up{2} = 352.81 \\ | |
| 56 | −44 & Échangeur d'air (VRC) & 4,00 & unité & 1 par logement \\ | |
| 57 | −45 & Entrée électrique 200 A & 4,00 & unité & 1 par logement --- logements = 4 \\ | |
| 58 | −46 & Filage brut & 352,81 & m\up{2} & aire chauffée --- aire m\up{2} = 352.81 \\ | |
| 59 | −47 & Luminaires & 54,00 & unité & aire chauffée $\div$ 6,5 m\up{2} --- aire m\up{2} = 352.81 \\ | |
| 60 | −48 & Luminaires extérieurs & 3,00 & unité & 3 + 1 si garage \\ | |
| 61 | −49 & Perron préfabriqué & 1,00 & unité & 1 par bâtiment \\ | |
| 62 | −\end{longtable} | |
| 63 | −\begingroup\scriptsize\setlength{\tabcolsep}{2.3pt} | |
| 64 | −\begin{longtable}{@{}rlp{2.7cm}p{4.0cm}rlrlrrr@{}} | |
| 65 | −\caption*{\sffamily\bfseries\color{uqoBleu}\footnotesize Tableau 4 --- Les 64 lignes de la révision r1 : quantités du relevé, facteur d'ajustement, unité RSMeans et prix unitaires NUS RSMeans 2026 T4 localisés Gatineau (C57) \hfill \xl{Données}{B91:O154}}\\ | |
| 66 | −\toprule | |
| 67 | −\textbf{N\up{o}} & \textbf{Div.} & \textbf{Poste} & \textbf{Détail RSMeans (ligne)} & \textbf{Qté} & \textbf{Unité} & \textbf{Fact.} & \textbf{U. RSM} & \textbf{Mat. \$/u} & \textbf{MO \$/u} & \textbf{Éq. \$/u} \\ | |
| 68 | −\midrule | |
| 69 | −\endfirsthead | |
| 70 | −\toprule | |
| 71 | −\textbf{N\up{o}} & \textbf{Div.} & \textbf{Poste} & \textbf{Détail RSMeans (ligne)} & \textbf{Qté} & \textbf{Unité} & \textbf{Fact.} & \textbf{U. RSM} & \textbf{Mat. \$/u} & \textbf{MO \$/u} & \textbf{Éq. \$/u} \\ | |
| 72 | −\midrule | |
| 73 | −\endhead | |
| 5 | +1 & 31 & Excavation, remblai et drain français & excavation en masse, remblai, drain de fondation perforé & 651,77 & m\up{3} excavé & 2,09 & 3,25 & 2,18 \\ | |
| 6 | +2 & 33 & Branchements des services & aqueduc, égout et électricité (catalogue UQO Éval) & 1,00 & forfait & 6\,500,00 & 1\,172,78 & 460,00 \\ | |
| 7 | +3 & 03 & Fondations : semelles, murs coffrés et membrane & semelle filante 24 $\times$ 12 po, mur de béton 8 po, enduit d'imperméabilisation & 140,06 & m\up{2} de mur de fondation & 108,35 & 90,32 & 6,39 \\ | |
| 8 | +4 & 03 & Sous-sol : dalle, isolation XPS et fenêtres & dalle 4 po, XPS 2 po deux couches, 3 fenêtres utilitaires & 199,02 & m\up{2} de dalle & 75,83 & 24,47 & 0,11 \\ | |
| 9 | +5 & 06 & Planchers portés & solives en I 24 po c/c et sous-plancher OSB 3/4 po & 352,81 & m\up{2} de plancher & 43,27 & 11,41 & 0,00 \\ | |
| 10 | +6 & 06 & Ossature de bois & murs extérieurs 2 $\times$ 6 + contreplaqué 1/2 po, cloisons 2 $\times$ 4, poutre LVL, colonnes & 572,42 & m\up{2} de mur (ext. brut + cloisons) & 17,26 & 15,47 & 0,00 \\ | |
| 11 | +7 & 07 & Toiture complète & fermes, support CDX 1/2 po, membrane APP 2 couches, soffites, gouttières et descentes & 218,92 & m\up{2} de toit & 54,66 & 25,26 & 9,98 \\ | |
| 12 | +8 & 07 & Isolation des murs extérieurs R-24 et du comble R-50 & matelas R-21 ($\approx$ R-24) + cellulose soufflée & 415,77 & m\up{2} isolé (murs nets + comble) & 9,56 & 7,99 & 2,86 \\ | |
| 13 | +9 & 07 & Revêtement de brique (80 \%) & placage de brique standard, appareil courant & 173,40 & m\up{2} de mur net & 358,33 & 88,80 & 0,00 \\ | |
| 14 | +10 & 07 & Revêtement de vinyle (20 \%) & revêtement de vinyle double 5 po & 43,35 & m\up{2} de mur net & 16,90 & 21,53 & 0,00 \\ | |
| 15 | +11 & 08 & Fenêtres & fenêtre de vinyle à guillotine 3 $\times$ 41/2 pi avec moustiquaire & 24,00 & unité & 848,89 & 51,18 & 0,00 \\ | |
| 16 | +12 & 08 & Portes extérieures et portes-patio & 4 portes d'acier isolées + 4 portes-patio coulissantes 6 pi & 8,00 & unité & 1\,467,81 & 126,44 & 0,00 \\ | |
| 17 | +13 & 08 & Portes intérieures et de garde-robe & 16 portes prémontées à âme creuse + 11 portes pliantes & 27,00 & unité & 292,18 & 48,17 & 0,00 \\ | |
| 18 | +14 & 09 & Gypse et peinture & gypse 1/2 po murs, 5/8 po plafonds, peinture latex 2 couches & 1\,154,19 & m\up{2} de gypse & 13,92 & 15,55 & 0,00 \\ | |
| 19 | +15 & 09 & Planchers finis & bois franc préverni (60 \%), céramique (25 \%), vinyle de luxe (15 \%) & 352,81 & m\up{2} de plancher & 76,53 & 24,60 & 0,00 \\ | |
| 20 | +16 & 09 & Escaliers, rampes, plinthes et tablettes & 2 escaliers préfabriqués, mains courantes, plinthe ogee, tablettes de pin & 1,00 & forfait & 6\,017,62 & 2\,946,59 & 0,00 \\ | |
| 21 | +17 & 11 & Cuisines & armoires, comptoirs stratifiés, éviers avec robinet & 4,00 & logement & 12\,382,26 & 1\,363,96 & 0,00 \\ | |
| 22 | +18 & 22 & Salles de bain complètes & toilette, lavabo et robinet, baignoire d'acier, robinetterie & 4,00 & unité & 2\,450,13 & 661,37 & 0,00 \\ | |
| 23 | +19 & 22 & Plomberie brute, chauffe-eau et drainage & 28 appareils (alimentation, évacuation, évent), 4 chauffe-eau 60 gal, drainage & 4,00 & logement & 4\,178,92 & 3\,406,68 & 0,00 \\ | |
| 24 | +20 & 23 & Chauffage et ventilation & 26 plinthes électriques 1 500 W, 4 échangeurs d'air (VRC) & 4,00 & logement & 2\,126,98 & 1\,350,96 & 0,00 \\ | |
| 25 | +21 & 26 & Électricité complète & 4 entrées 200 A et panneaux, filage brut, 54 luminaires, 3 lanternes & 4,00 & logement & 4\,430,71 & 2\,405,75 & 0,00 \\ | |
| 26 | +22 & 32 & Perron préfabriqué & 5 contremarches, 5 pi & 1,00 & unité & 2\,244,00 & 267,03 & 224,72 \\ | |
| 74 | 27 | \bottomrule |
| 75 | −\endfoot | |
| 76 | −1 & 31 & Excavation & excavation en masse, pelle hydraulique 1 vg\up{3} (B.C.Y.) (312316425100) & 651,77 & m\up{3} & 1,00 & vg\up{3} & 0,00 & 1,12 & 1,14 \\ | |
| 77 | −2 & 31 & Remblai & remblai en masse au bouteur (L.C.Y.) (312323131300) & 118,82 & m\up{3} & 1,00 & vg\up{3} & 0,00 & 0,69 & 1,73 \\ | |
| 78 | −3 & 31 & Drain français & drain de fondation perforé 4 po (334116103000) & 57,40 & m & 1,00 & pi lin. & 7,22 & 5,61 & 0,96 \\ | |
| 79 | −4 & 33 & Branchements (aqueduc, égout, électricité) & catalogue UQO Éval & 1,00 & forfait & 1,00 & forfait & 6\,500,00 & 1\,172,78 & 460,00 \\ | |
| 80 | −5 & 03 & Semelles filantes & semelle filante 24 $\times$ 12 po (0,61 $\times$ 0,30 m = 0,183 m\up{3}/m) (033053403935) & 10,50 & m\up{3} & 1,00 & vg\up{3} & 228,09 & 107,03 & 0,70 \\ | |
| 81 | −6 & 03 & Murs de fondation (h 2.44 m) & mur de béton 8 po coffré (0,203 m\up{3}/m\up{2}) (033053404200) & 28,43 & m\up{3} & 1,00 & vg\up{3} & 315,65 & 286,06 & 23,80 \\ | |
| 82 | −7 & 07 & Membrane d'étanchéité des fondations & enduit bitumineux d'imperméabilisation pulvérisé, 1 couche (071113100300) & 122,84 & m\up{2} & 1,00 & pi\up{2} & 0,23 & 0,41 & 0,00 \\ | |
| 83 | −8 & 03 & Dalle de sous-sol 100 mm & dalle sur sol 4 po (033053405001) & 199,02 & m\up{2} & 1,00 & pi\up{2} & 2,69 & 1,13 & 0,01 \\ | |
| 84 | −9 & 08 & Fenêtres de sous-sol & fenêtre de sous-sol utilitaire 1 pi 7 $\times$ 2 pi 8 (085123401100) & 3,00 & unité & 1,00 & unité & 506,52 & 22,17 & 0,00 \\ | |
| 85 | −10 & 06 & Planchers portés (solives) & solives en I 24 po c/c, portée 15–24 pi (061733101200) & 352,81 & m\up{2} & 1,00 & pi\up{2} & 2,96 & 0,65 & 0,00 \\ | |
| 86 | −11 & 06 & Planchers portés (solives) & sous-plancher OSB 3/4 po (061623101600) & 352,81 & m\up{2} & 1,00 & pi\up{2} & 1,06 & 0,41 & 0,00 \\ | |
| 87 | −12 & 06 & Murs extérieurs ossature 2$\times$6 & ossature 2 $\times$ 6 à 16 po c/c, 8 pi, lisses incluses (m de mur = m\up{2} $\div$ 2,44) (061110260800) & 114,84 & m & 1,00 & pi lin. & 6,19 & 8,62 & 0,00 \\ | |
| 88 | −13 & 06 & Murs extérieurs ossature 2$\times$6 & revêtement intermédiaire contreplaqué 1/2 po (061636100600) & 280,11 & m\up{2} & 1,00 & pi\up{2} & 1,00 & 0,69 & 0,00 \\ | |
| 89 | −14 & 06 & Cloisons ossature 2$\times$4 & cloison 2 $\times$ 4 à 16 po c/c, 8 pi, lisses incluses (m de cloison = m\up{2} $\div$ 2,44) (061110260200) & 119,85 & m & 1,00 & pi lin. & 4,23 & 7,76 & 0,00 \\ | |
| 90 | −15 & 06 & Poutre centrale LVL & poutre LVL 13/4 $\times$ 14 po, 3 plis (061813206150) & 16,69 & m & 3,00 & pi lin. & 13,91 & 1,72 & 0,00 \\ | |
| 91 | −16 & 05 & Colonnes d'acier & colonne tubulaire (lally) 4 po remplie de béton, 8 pi (051223158080) & 6,00 & unité & 1,00 & unité & 97,38 & 31,95 & 0,00 \\ | |
| 92 | −17 & 06 & Fermes de toit + support OSB & fermes fink 4/12 à 24 po c/c (par pi\up{2} de plancher $\approx$ 0,93 $\times$ aire de toit) (061753100210) & 218,92 & m\up{2} & 0,93 & pi\up{2} & 2,39 & 0,66 & 0,90 \\ | |
| 93 | −18 & 06 & Fermes de toit + support OSB & support de toit contreplaqué CDX 1/2 po (061636100100) & 218,92 & m\up{2} & 1,00 & pi\up{2} & 1,00 & 0,56 & 0,00 \\ | |
| 94 | −19 & 09 & Escaliers intérieurs & escalier préfabriqué 14 contremarches, 3 pi (pin pour tapis) (064313200600) & 28,00 & unité & 1,00 & unité & 82,54 & 19,94 & 0,00 \\ | |
| 95 | −20 & 09 & Escaliers intérieurs & main courante avec balustres (4,3 m par escalier) (064313201550) & 8,60 & m & 1,00 & pi lin. & 83,45 & 12,92 & 0,00 \\ | |
| 96 | −21 & 07 & Isolation des murs extérieurs R-24 & matelas kraft 6 po R-21 (plus proche de R-24 dans RSMeans) (072116200182) & 216,75 & m\up{2} & 1,00 & pi\up{2} & 1,68 & 0,49 & 0,00 \\ | |
| 97 | −22 & 07 & Isolation du comble R-50 & cellulose soufflée R-38 (épaisseur $\times$ 1,32 pour R-50) (072126100120) & 199,02 & m\up{2} & 1,32 & pi\up{2} & 0,02 & 0,77 & 0,42 \\ | |
| 98 | −23 & 07 & Isolation intérieure des murs de sous-sol R-20 & XPS 2 po R-10, deux couches (072113101940) & 140,06 & m\up{2} & 2,00 & pi\up{2} & 2,59 & 0,79 & 0,00 \\ | |
| 99 | −24 & 07 & Revêtement brick (80 \%) & placage de brique standard, appareil courant (042113132000) & 173,40 & m\up{2} & 1,00 & pi\up{2} & 33,29 & 8,25 & 0,00 \\ | |
| 100 | −25 & 07 & Revêtement vinyl (20 \%) & revêtement de vinyle double 5 po (074633104000) & 43,35 & m\up{2} & 1,00 & pi\up{2} & 1,57 & 2,00 & 0,00 \\ | |
| 101 | −26 & 07 & Soffites et bordures de toit & soffite et bordure d'aluminium ventilés, débord 1 pi (074213206920) & 63,14 & m & 1,00 & pi lin. & 8,37 & 6,51 & 0,00 \\ | |
| 102 | −27 & 07 & Gouttières & gouttières d'aluminium 5 po (077123300100) & 34,44 & m & 1,00 & pi lin. & 3,38 & 4,58 & 0,00 \\ | |
| 103 | −28 & 07 & Gouttières & descentes 2 $\times$ 3 po ($\approx$ 35 \% de la longueur) (077123100100) & 34,44 & m & 0,35 & pi lin. & 2,24 & 3,02 & 0,00 \\ | |
| 104 | −29 & 07 & Couverture & membrane APP, base + finition (2 couches) (075213100040) & 218,92 & m\up{2} & 2,00 & pi\up{2} & 0,46 & 0,17 & 0,05 \\ | |
| 105 | −30 & 08 & Fenêtres & fenêtre de vinyle à guillotine 3 $\times$ 41/2 pi, moustiquaire (085313100100) & 24,00 & unité & 1,00 & unité & 848,89 & 51,18 & 0,00 \\ | |
| 106 | −31 & 08 & Portes extérieures & porte d'acier isolée prémontée 3 $\times$ 6 pi 8 (081313201340) & 4,00 & unité & 1,00 & unité & 841,77 & 53,22 & 0,00 \\ | |
| 107 | −32 & 08 & Portes-patio & porte-patio coulissante 6 pi, vitrage isolant (083219150020) & 4,00 & unité & 1,00 & unité & 2\,093,85 & 199,65 & 0,00 \\ | |
| 108 | −33 & 08 & Portes intérieures & porte intérieure prémontée à âme creuse (081723104600) & 16,00 & unité & 1,00 & unité & 274,95 & 46,98 & 0,00 \\ | |
| 109 | −34 & 08 & Portes de garde-robe & porte pliante de placard 3 pi (081313202330) & 11,00 & unité & 1,00 & unité & 317,25 & 49,91 & 0,00 \\ | |
| 110 | −35 & 09 & Gypse 1/2 po murs (face intérieure des murs ext. + 2 faces des cloisons) & gypse 1/2 po murs, tiré de joints niveau 4 (092910300350) & 801,38 & m\up{2} & 1,00 & pi\up{2} & 0,65 & 0,79 & 0,00 \\ | |
| 111 | −36 & 09 & Gypse 5/8 po plafonds & gypse 5/8 po coupe-feu plafonds, niveau 4 (092910303150) & 352,81 & m\up{2} & 1,00 & pi\up{2} & 0,79 & 1,00 & 0,00 \\ | |
| 112 | −37 & 09 & Peinture 2 couches (murs + plafonds) & peinture latex 2 couches au rouleau, murs et plafonds (099123720840) & 1\,154,18 & m\up{2} & 1,00 & pi\up{2} & 0,60 & 0,59 & 0,00 \\ | |
| 113 | −38 & 09 & Céramique (cuisine, salles de bain, salles d'eau) & céramique 12 $\times$ 12 po, couche mince (093133103270) & 131,90 & m\up{2} & 1,00 & pi\up{2} & 3,52 & 2,85 & 0,00 \\ | |
| 114 | −39 & 09 & Plancher hardwood (80 \%) & lames de chêne blanc préverni 31/4 po (096429106200) & 176,73 & m\up{2} & 1,00 & pi\up{2} & 8,88 & 2,24 & 0,00 \\ | |
| 115 | −40 & 09 & Plancher vinyl\_plank (20 \%) & planches de vinyle de luxe collées (096519238100) & 44,18 & m\up{2} & 1,00 & pi\up{2} & 10,75 & 0,78 & 0,00 \\ | |
| 116 | −41 & 09 & Plinthes & plinthe ogee peuplier 3 po (062213155180) & 341,60 & m & 1,00 & pi lin. & 0,95 & 1,60 & 0,00 \\ | |
| 117 | −42 & 09 & Tablettes de garde-robe & tablette de pin 1 $\times$ 12 po (105723190200) & 19,20 & m & 1,00 & pi lin. & 4,56 & 3,66 & 0,00 \\ | |
| 118 | −43 & 11 & Armoires et comptoirs de cuisine & armoires de cuisine, règle du pouce, minimum (par pi lin.) (123223109560) & 34,04 & m & 1,00 & pi lin. & 351,34 & 25,66 & 0,00 \\ | |
| 119 | −44 & 11 & Armoires et comptoirs de cuisine & comptoir stratifié avec dosseret, maximum (123623130100) & 34,04 & m & 1,00 & pi lin. & 61,02 & 15,47 & 0,00 \\ | |
| 120 | −45 & 11 & Armoires et comptoirs de cuisine & évier double inox avec robinet (1 par 8 m d'armoires) (224116163200) & 4,25 & unité & 1,00 & unité & 817,10 & 202,69 & 0,00 \\ | |
| 121 | −46 & 22 & Salles de bain complètes & toilette deux pièces (224113131100) & 4,00 & unité & 1,00 & unité & 376,68 & 183,96 & 0,00 \\ | |
| 122 | −47 & 22 & Salles de bain complètes & lavabo de meuble-lavabo (marbre cultivé) (224116131000) & 4,00 & unité & 1,00 & unité & 281,64 & 152,22 & 0,00 \\ | |
| 123 | −48 & 22 & Salles de bain complètes & robinet de lavabo avec drain (224139102120) & 4,00 & unité & 1,00 & unité & 134,44 & 80,99 & 0,00 \\ | |
| 124 | −49 & 22 & Salles de bain complètes & baignoire d'acier émaillé 5 pi (224119102300) & 4,00 & unité & 1,00 & unité & 1\,216,95 & 176,64 & 0,00 \\ | |
| 125 | −50 & 22 & Salles de bain complètes & robinetterie de bain-douche à pression équilibrée (224139100420) & 4,00 & unité & 1,00 & unité & 440,42 & 67,56 & 0,00 \\ | |
| 126 | −51 & 22 & Plomberie brute (appareils) & plomberie brute par appareil (alimentation, évacuation, évent) (224116133580) & 28,00 & unité & 1,00 & unité & 347,70 & 423,28 & 0,00 \\ | |
| 127 | −52 & 22 & Chauffe-eau 60 gal & chauffe-eau électrique 66 gal (plus proche de 60 gal) (223330131120) & 4,00 & unité & 1,00 & unité & 1\,622,60 & 301,18 & 0,00 \\ | |
| 128 | −53 & 22 & Drainage et évents & catalogue UQO Éval & 1,00 & forfait & 1,00 & forfait & 489,69 & 570,16 & 0,00 \\ | |
| 129 | −54 & 23 & Plinthes électriques 1 500 W & plinthe électrique 1 500 W, 6 pi (238333102000) & 26,00 & unité & 1,00 & unité & 112,92 & 107,38 & 0,00 \\ | |
| 130 | −55 & 23 & Échangeur d'air (VRC) & catalogue UQO Éval & 4,00 & unité & 1,00 & unité & 1\,393,00 & 652,99 & 0,00 \\ | |
| 131 | −56 & 26 & Entrée électrique 200 A & entrée et panneau résidentiels 150 A (RSMeans ; majorer pour 200 A) (260590101150) & 4,00 & unité & 1,00 & unité & 1\,612,00 & 513,45 & 0,00 \\ | |
| 132 | −57 & 26 & Entrée électrique 200 A & panneau 200 A, 24 circuits (262416100800) & 4,00 & unité & 1,00 & unité & 1\,217,06 & 733,50 & 0,00 \\ | |
| 133 | −58 & 26 & Filage brut & prises doubles NM \#12 (1 par 8 m\up{2}) (260590104050) & 44,10 & unité & 1,00 & unité & 25,95 & 42,79 & 0,00 \\ | |
| 134 | −59 & 26 & Filage brut & interrupteurs NM (1 par 15 m\up{2}) (260590102110) & 23,52 & unité & 1,00 & unité & 19,26 & 30,97 & 0,00 \\ | |
| 135 | −60 & 26 & Luminaires & luminaire plafonnier économique (260590106210) & 54,00 & unité & 1,00 & unité & 44,33 & 13,20 & 0,00 \\ | |
| 136 | −61 & 26 & Luminaires & sortie d'éclairage boîte + câble NM (260590106100) & 54,00 & unité & 1,00 & unité & 35,46 & 21,19 & 0,00 \\ | |
| 137 | −62 & 26 & Luminaires extérieurs & lanterne murale extérieure (265113702000) & 3,00 & unité & 1,00 & unité & 131,38 & 33,01 & 0,00 \\ | |
| 138 | −63 & 26 & Luminaires extérieurs & sortie d'éclairage boîte + câble NM (260590106100) & 3,00 & unité & 1,00 & unité & 35,46 & 21,19 & 0,00 \\ | |
| 139 | −64 & 32 & Perron préfabriqué & perron préfabriqué 5 contremarches, 5 pi (034123500350) & 1,00 & unité & 1,00 & unité & 2\,244,00 & 267,03 & 224,72 \\ | |
| 140 | −\end{longtable}\endgroup | |
| 28 | +\end{tabular} | |
modified
IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2_div.tex
+4 −5
@@ -2,11 +2,10 @@ | ||
| 2 | 2 | \toprule |
| 3 | 3 | \textbf{Code} & \textbf{Division MasterFormat} & \textbf{Direct nu r1 (\$)} & \textbf{Part} \\ |
| 4 | 4 | \midrule |
| 5 | −03 & Béton & 36\,079,73 & 7,7~\% \\ | |
| 6 | −05 & Métaux & 775,98 & 0,2~\% \\ | |
| 7 | −06 & Bois et composites & 49\,582,02 & 10,5~\% \\ | |
| 8 | −07 & Enveloppe, isolation et toiture & 106\,068,97 & 22,5~\% \\ | |
| 9 | −08 & Portes et fenêtres & 45\,131,35 & 9,6~\% \\ | |
| 5 | +03 & Béton & 48\,703,36 & 10,3~\% \\ | |
| 6 | +06 & Bois et composites & 38\,025,59 & 8,1~\% \\ | |
| 7 | +07 & Enveloppe, isolation et toiture & 107\,363,82 & 22,8~\% \\ | |
| 8 | +08 & Portes et fenêtres & 43\,545,28 & 9,2~\% \\ | |
| 10 | 9 | 09 & Finitions intérieures & 78\,647,93 & 16,7~\% \\ |
| 11 | 10 | 11 & Cuisines & 54\,984,88 & 11,7~\% \\ |
| 12 | 11 | 22 & Plomberie & 42\,788,41 & 9,1~\% \\ |
added
IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2_releve.tex
+13 −0
@@ -0,0 +1,13 @@ | ||
| 1 | +\begin{tabular}{@{}clp{6.2cm}rl@{}} | |
| 2 | +\toprule | |
| 3 | +\textbf{N\up{o}} & \textbf{Grandeur (relevé UQO Éval)} & \textbf{Formule du relevé} & \textbf{Valeur} & \textbf{Unité} \\ | |
| 4 | +\midrule | |
| 5 | +1 & Dalle de sous-sol 100 mm & (L + ép.) $\times$ (P + ép.) & 199,02 & m\up{2} \\ | |
| 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} \\ | |
| 8 | +4 & Murs extérieurs ossature 2$\times$6 & périmètre $\times$ hauteur d'étage $\times$ niveaux & 280,11 & m\up{2} \\ | |
| 9 | +5 & Isolation des murs extérieurs R-24 & bruts -- ouvertures hors sol & 216,75 & m\up{2} \\ | |
| 10 | +6 & Couverture & empreinte $\times$ facteur de pente $\times$ débords & 218,92 & m\up{2} \\ | |
| 11 | +7 & Planchers portés (solives) & $\Sigma$ aires des pièces hors sol & 352,81 & m\up{2} \\ | |
| 12 | +\bottomrule | |
| 13 | +\end{tabular} | |
modified
IMM1033-20_Methodes_du_cout/03_Travaux_pratiques/TP2_Bordereau_de_cout_neuf/enonce/tables_tp2_ventes.tex
+6 −9
@@ -4,14 +4,11 @@ | ||
| 4 | 4 | \midrule |
| 5 | 5 | Q1 & 180, rue O'Brien (Saint-Renéureau de poste) & 2025-11-21 & 1\,145\,000 & 2021 & 190,2 & 658,9 & 2 / D & 229\,300 & 567\,300 & 796\,600 \\ |
| 6 | 6 | Q2 & 160, rue O'Brien (Saint-Renéureau de poste) & 2025-11-21 & 1\,168\,000 & 2021 & 190,2 & 657,6 & 2 / D & 229\,200 & 567\,300 & 796\,500 \\ |
| 7 | −Q3 & 18, rue du Campagnard (Gatineau) & 2025-10-22 & 1\,193\,000 & 2021 & 217,4 & 524,8 & 2 / J & 203\,700 & 740\,400 & 944\,100 \\ | |
| 8 | −Q4 & 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 \\ | |
| 9 | −Q5 & 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 \\ | |
| 10 | −Q6 & 24, boulevard Sacré-Coeur (Hull) & 2025-04-16 & 1\,300\,000 & 2023 & 266,7 & 259,9 & 3 / D & 207\,900 & 752\,500 & 960\,400 \\ | |
| 11 | −Q7 & 203, rue de la Cité-Jardin (Gatineau) & 2025-03-17 & 1\,199\,500 & 2021 & 229,9 & 478,3 & 3 / R & 217\,500 & 800\,900 & 1\,018\,400 \\ | |
| 12 | −Q8 & 7, rue Damphousse (Gatineau) & 2025-03-14 & 1\,125\,000 & 2022 & 239,4 & 587,9 & 2 / D & 184\,500 & 839\,600 & 1\,024\,100 \\ | |
| 13 | −Q9 & 767, rue Notre-Dame (Gatineau) & 2025-03-07 & 1\,205\,276 & 2024 & 231,8 & 565,5 & 2 / J & 184\,100 & 799\,800 & 983\,900 \\ | |
| 14 | −Q10 & 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 \\ | |
| 15 | −Q11 & 1151, Rue Notre-Dame (Gatineau) & 2024-05-07 & 849\,411 & 2024 & 194,4 & 695,5 & 2 / D & 186\,200 & 715\,000 & 901\,200 \\ | |
| 7 | +Q3 & 94, rue de l'Écorce (Masson) & 2025-10-21 & 1\,100\,000 & 2022 & 196,2 & 929,5 & 2 / D & 204\,000 & 594\,900 & 798\,900 \\ | |
| 8 | +Q4 & 390, rue Raymond (Saint-Renéureau de poste) & 2025-09-12 & 1\,165\,000 & 2024 & 190,2 & 657,6 & 2 / D & 229\,200 & 683\,400 & 912\,600 \\ | |
| 9 | +Q5 & 7, rue Damphousse (Gatineau) & 2025-03-14 & 1\,125\,000 & 2022 & 239,4 & 587,9 & 2 / D & 184\,500 & 839\,600 & 1\,024\,100 \\ | |
| 10 | +Q6 & 767, rue Notre-Dame (Gatineau) & 2025-03-07 & 1\,205\,276 & 2024 & 231,8 & 565,5 & 2 / J & 184\,100 & 799\,800 & 983\,900 \\ | |
| 11 | +Q7 & 380, rue Raymond (Saint-Renéureau de poste) & 2025-02-03 & 1\,140\,000 & 2022 & 190,2 & 657,6 & 2 / D & 229\,200 & 573\,000 & 802\,200 \\ | |
| 12 | +Q8 & 1151, Rue Notre-Dame (Gatineau) & 2024-05-07 & 849\,411 & 2024 & 194,4 & 695,5 & 2 / D & 186\,200 & 715\,000 & 901\,200 \\ | |
| 16 | 13 | \bottomrule |
| 17 | 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
+40 −48
@@ -14,27 +14,27 @@ | ||
| 14 | 14 | \setexamDuree{Travail individuel à la maison (gabarit Excel obligatoire + laboratoire UQO Éval)} |
| 15 | 15 | \setexamRemise{Séance 9 (12 novembre 2026) --- dépôt Moodle} |
| 16 | 16 | \setexamPonderation{15 \% de la note finale} |
| 17 | −\setexamCouverture{Bordereau de coût de remplacement neuf : quadruplex de 2 étages à Gatineau --- données réelles d'UQO Éval (Cas 9, 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 RSMeans 2026 T4)} | |
| 18 | 18 | |
| 19 | 19 | \begin{document} |
| 20 | 20 | \pagetitreexamen |
| 21 | 21 | |
| 22 | 22 | \begin{notescorrection}[Philosophie de correction] |
| 23 | −Plus de paramètre B : toutes les copies travaillent sur le même cas réel (cas d'étude « Cas 9 » d'UQO Éval, révision r1 du 29 octobre 2026). La note récompense la \textbf{rigueur de la chaîne} (conversions, ordre des majorations, assiettes) et la \textbf{lecture} (conventions, marché, limites). Le gabarit est entièrement chaîné : changer un prix unitaire dans \emph{Données} doit recalculer Bordereau!C38. Valeurs reproductibles par \texttt{tp2\_solutions.py}; solutionnaire Excel \texttt{IMM1033-20\_TP2\_solutionnaire.xlsx} (formules réelles, 74 cellules vérifiées par recalcul dans Excel). Chaîne de référence : direct nu \textbf{471\,076~\$} (r1 : 471\,085) $\rightarrow$ directs du cours \textbf{588\,245~\$} $\rightarrow$ directs $+$ contingences \textbf{611\,812~\$} (r1 : 611\,823) $\rightarrow$ indirects \textbf{72\,075~\$} $\rightarrow$ coût total \textbf{759\,115~\$} (177,18~\$/pi\up{2} hors sol, 189\,779~\$/logement) $\rightarrow$ marché : bâtiment implicite médian \textbf{879\,896~\$}, profit extrait \textbf{28,7~\%}. Correction express : taper 0 dans Données!K91 (matériaux de l'excavation, déjà 0) ne change rien, mais taper 50 dans Données!K146 (brique) doit faire bouger Bordereau!C38 : sinon la chaîne n'est pas liée. | |
| 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. | |
| 24 | 24 | \end{notescorrection} |
| 25 | 25 | |
| 26 | 26 | \partieexamen{Solutions}{} |
| 27 | 27 | |
| 28 | −\begin{questionexam}{Méthode d'estimation et nature du coût estimé}{6} | |
| 28 | +\begin{questionexam}{Méthode d'estimation et nature du coût estimé}{8} | |
| 29 | 29 | \begin{solution} |
| 30 | −\textbf{Relevé des quantités} : le promoteur dispose de plans cotés et d'une fiche technique; la méthode part des quantités réelles de chaque composante (m\up{3} de béton, m\up{2} de brique, nombre de fenêtres) tarifées à l'unité --- c'est la méthode de l'entrepreneur qui soumissionne et la plus précise des quatre (séance 6), au prix d'un travail plus lourd (64 lignes). 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; la méthode par \textbf{composantes} (unités en place, celle du moteur de coût d'UQO Éval, tableau 11) est un bon compromis et sert ici de \emph{contrôle}; la méthode \textbf{indexée} suppose un coût historique connu, inexistant pour un projet neuf. \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 publiés RSMeans localisés (pas des soumissions), 55 mesures non vérifiées manuellement; 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 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. | |
| 31 | 31 | \end{solution} |
| 32 | 32 | \begin{notescorrection} |
| 33 | −Relevé motivé par les données : 2 pts; trois autres méthodes situées : 2 pts; remplacement par définition (1) et deux limites (1). | |
| 33 | +Méthode par composantes motivée par les données : 3 pts; trois autres méthodes situées : 2 pts; remplacement par définition (1) et deux limites (2). | |
| 34 | 34 | \end{notescorrection} |
| 35 | 35 | \end{questionexam} |
| 36 | 36 | |
| 37 | −\begin{questionexam}{Du plan au relevé des quantités}{10} | |
| 37 | +\begin{questionexam}{Du plan au relevé : sept grandeurs}{8} | |
| 38 | 38 | \begin{solution} |
| 39 | 39 | \begin{center} |
| 40 | 40 | \footnotesize |
@@ -44,50 +44,45 @@ Relevé motivé par les données : 2 pts; trois autres méthodes situées : 2 pt | ||
| 44 | 44 | \midrule |
| 45 | 45 | 1 & Empreinte $=(18{,}30+0{,}30)(10{,}40+0{,}30)$ & 199,02 m\up{2} & 199,02 & 0,00 \% \\ |
| 46 | 46 | 2 & Périmètre $=2(18{,}30+10{,}40)$ & 57,40 m & 57,40 & 0,00 \% \\ |
| 47 | −3 & Excavation $=(199{,}02+0{,}9\times57{,}40)\times2{,}60$ & 651,77 m\up{3} & 651,77 & 0,00 \% \\ | |
| 48 | −4 & Remblai $=57{,}40\times0{,}9\times2{,}30$ & 118,82 m\up{3} & 118,82 & 0,00 \% \\ | |
| 49 | −5 & Murs de fondation $=57{,}40\times2{,}44$ & 140,06 m\up{2} & 140,06 & 0,00 \% \\ | |
| 50 | −6 & Membrane $=57{,}40\times(2{,}44-0{,}30)$ & 122,84 m\up{2} & 122,84 & 0,00 \% \\ | |
| 51 | −7 & Murs extérieurs bruts $=57{,}40\times2{,}44\times2$ & 280,11 m\up{2} & 280,11 & 0,00 \% \\ | |
| 52 | −8 & Murs extérieurs nets $=280{,}11-63{,}36$ & 216,75 m\up{2} & 216,75 & 0,00 \% \\ | |
| 53 | −9 & Toit $=199{,}02\times1{,}00\times1{,}10$ & 218,92 m\up{2} & 218,92 & 0,00 \% \\ | |
| 54 | −10 & Planchers portés $=176{,}40+176{,}40$ & 352,80 m\up{2} & 352,81 & 0,00 \% \\ | |
| 55 | −11 & Gypse murs $=216{,}75+2\times292{,}31$ & 801,39 m\up{2} & 801,38 & 0,00 \% \\ | |
| 56 | −12 & Peinture $=801{,}39+352{,}80$ & 1\,154,19 m\up{2} & 1\,154,18 & 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 \% \\ | |
| 49 | +5 & Murs extérieurs nets $=280{,}11-63{,}36$ & 216,75 m\up{2} & 216,75 & 0,00 \% \\ | |
| 50 | +6 & Toit $=199{,}02\times1{,}00\times1{,}10$ & 218,92 m\up{2} & 218,92 & 0,00 \% \\ | |
| 51 | +7 & Planchers portés $=176{,}40+176{,}40$ & 352,80 m\up{2} & 352,81 & 0,00 \% \\ | |
| 57 | 52 | \bottomrule |
| 58 | 53 | \end{tabular} |
| 59 | 54 | \end{center} |
| 60 | −Formules dans \texttt{Relevé!F16:F27}, écarts \texttt{=F16/G16-1} en H. Les douze écarts sont nuls (arrondis au centième près) : la lecture du plan est cohérente avec le relevé automatique. | |
| 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. | |
| 61 | 56 | \end{solution} |
| 62 | 57 | \begin{notescorrection} |
| 63 | −8 pts pour les douze formules (⅔ pt chacune, 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. | |
| 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. | |
| 64 | 59 | \end{notescorrection} |
| 65 | 60 | \end{questionexam} |
| 66 | 61 | |
| 67 | −\begin{questionexam}{Tarification RSMeans des 64 lignes}{16} | |
| 62 | +\begin{questionexam}{Bordereau des 22 composantes}{12} | |
| 68 | 63 | \begin{solution} |
| 69 | −Formules de la ligne 32 copiées vers le bas : \texttt{K32 =RECHERCHEV(G32;Données!\$B\$159:\$D\$163;3;FAUX)}, \texttt{L32 =F32*H32*K32}, \texttt{P32 =M32+N32+O32}, \texttt{Q32 =L32*P32}. Exemples : excavation $651{,}77 \times 1 \times 1{,}307951 = 852{,}48$~vg\up{3} $\times$ 2,26~\$ $=$ 1\,926,60~\$; poutre LVL $16{,}69 \times 3 \times 3{,}28084 = 164{,}27$~pi $\times$ 15,63~\$ $=$ 2\,567,57~\$; brique $173{,}40 \times 10{,}7639 = 1\,866{,}46$~pi\up{2} $\times$ 41,54~\$ $=$ \textbf{77\,532,83~\$}.\\ | |
| 70 | −\textbf{Total direct nu} \texttt{Q96} $=$ \textbf{471\,076,32~\$} (révision r1 : 471\,085,04; écart de 9~\$ d'arrondi). Matériaux 335\,681,75~\$; main-d'œuvre 128\,998,38~\$; équipement 6\,396,19~\$; \textbf{part de la main-d'œuvre 27,4~\%}.\\ | |
| 71 | −Sous-totaux par division (\texttt{=SOMME.SI(\$C\$32:\$C\$95;B105;\$Q\$32:\$Q\$95)}) : 03 béton 36\,076 (7,7~\%); 05 métaux 776; 06 bois 49\,582 (10,5~\%); \textbf{07 enveloppe 106\,069 (22,5~\%)}; 08 ouvertures 45\,131 (9,6~\%); 09 finitions 78\,648 (16,7~\%); 11 cuisines 54\,980 (11,7~\%); 22 plomberie 42\,788 (9,1~\%); 23 CVCA 13\,912; 26 électricité 27\,346 (5,8~\%); 31 terrassement 4\,900; 32 extérieur 2\,736; 33 services 8\,133 --- tous à moins de 5~\$ du tableau 6 (colonne H « ✓ »).\\ | |
| 72 | −Trois postes les plus lourds (\texttt{=GRANDE.VALEUR(\$Q\$32:\$Q\$95;1)} puis \texttt{INDEX/EQUIV}) : \textbf{placage de brique 77\,533~\$}, \textbf{armoires et comptoirs de cuisine 42\,103~\$}, \textbf{murs de fondation coffrés 23\,260~\$} --- 30~\% du direct nu à eux trois. | |
| 64 | +Formules de la ligne 27 copiées vers le bas : \texttt{K27 =H27+I27+J27}, \texttt{L27 =F27*K27}. Exemples : excavation $651{,}77$~m\up{3} $\times$ 7,52~\$ $=$ 4\,901,31~\$; toiture complète $218{,}92$~m\up{2} $\times$ 89,90~\$ $=$ 19\,680,91~\$; brique $173{,}40$~m\up{2} $\times$ 447,13~\$ $=$ \textbf{77\,532,34~\$}; cuisines $4 \times 13\,746{,}22 = 54\,984{,}88$~\$.\\ | |
| 65 | +\textbf{Total direct nu} \texttt{L49} $=$ \textbf{471\,100,03~\$} (révision r1 : 471\,085,04; écart de 15~\$ d'arrondi des prix composites). Matériaux 335\,692,60~\$; main-d'œuvre 129\,011,05~\$; équipement 6\,396,38~\$; \textbf{part de la main-d'œuvre 27,4~\%}.\\ | |
| 66 | +Sous-totaux par division (\texttt{=SOMME.SI(\$C\$27:\$C\$48;B58;\$L\$27:\$L\$48)}) : 03 béton (fondations, sous-sol) 48\,704 (10,3~\%); 06 bois 38\,027 (8,1~\%); \textbf{07 enveloppe et toiture 107\,365 (22,8~\%)}; 08 ouvertures 43\,545 (9,2~\%); 09 finitions 78\,658 (16,7~\%); 11 cuisines 54\,985 (11,7~\%); 22 plomberie 42\,788 (9,1~\%); 23 CVCA 13\,912; 26 électricité 27\,346 (5,8~\%); 31 terrassement 4\,901; 32 extérieur 2\,736; 33 services 8\,133 --- tous à moins de 25~\$ du tableau 5 (colonne H « ✓ »).\\ | |
| 67 | +Trois composantes les plus lourdes (\texttt{=GRANDE.VALEUR(\$L\$27:\$L\$48;1)} puis \texttt{INDEX/EQUIV}) : \textbf{revêtement de brique 77\,532~\$}, \textbf{cuisines 54\,985~\$}, \textbf{planchers finis 35\,680~\$} --- 36~\% du direct nu à elles trois. | |
| 73 | 68 | \end{solution} |
| 74 | 69 | \begin{notescorrection} |
| 75 | −Conversion par RECHERCHEV (3; une valeur tapée $=$ 1); quantité RSMeans avec le facteur (3; facteur oublié sur LVL / XPS / membrane $= -1$); coût unitaire et montant (3); total et ventilation matériaux / MO / équipement (2); sous-totaux SOMME.SI (3; codes « 03 » en texte : un EQUIV numérique échoue); top 3 (2). | |
| 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). | |
| 76 | 71 | \end{notescorrection} |
| 77 | 72 | \end{questionexam} |
| 78 | 73 | |
| 79 | 74 | \begin{questionexam}{Des coûts nus aux coûts directs du cours}{8} |
| 80 | 75 | \begin{solution} |
| 81 | −a) Localisés $= 471\,076{,}32 + 255{,}83 = \mathbf{471\,332{,}15}$~\$. b) Conditions générales $8~\% = 37\,706{,}57$. c) Frais généraux $7~\% \times (471\,332{,}15 + 37\,706{,}57) = 35\,632{,}71$. d) Profit de l'entrepreneur $8~\% \times 544\,671{,}43 = 43\,573{,}71$. e) \textbf{Coûts directs au sens du cours} $= \mathbf{588\,245{,}15}$~\$. f) Contingences $5~\% \times 471\,332{,}15 = 23\,566{,}61$. g) \textbf{Directs $+$ contingences} $= \mathbf{611\,811{,}75}$~\$ --- la révision r1 donne 611\,823,07~\$ (écart $-11$~\$, \texttt{D16} « ✓ »). Les majorations de l'entrepreneur ajoutent 24,8~\% aux coûts nus. | |
| 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. | |
| 82 | 77 | \end{solution} |
| 83 | 78 | \begin{notescorrection} |
| 84 | −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\,412~\$) : $-1$. | |
| 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$. | |
| 85 | 80 | \end{notescorrection} |
| 86 | 81 | \end{questionexam} |
| 87 | 82 | |
| 88 | 83 | \begin{questionexam}{Permis de construction réel et garantie GCR}{8} |
| 89 | 84 | \begin{solution} |
| 90 | −a) Permis $=\max\bigl(4{,}70/1\,000 \times 611\,811{,}75;\; 335 \times 4\bigr) = \max(2\,875{,}52;\; 1\,340) = \mathbf{2\,875{,}52}$~\$ : le tarif proportionnel l'emporte; le \texttt{MAX} doit être présent et fonctionnel (test : avec 200\,000~\$ de travaux, 1\,340~\$ s'appliquerait). b) GCR $= 4 \times 2\,656{,}68 = \mathbf{10\,626{,}72}$~\$. | |
| 85 | +a) Permis $=\max\bigl(4{,}70/1\,000 \times 611\,842{,}53;\; 335 \times 4\bigr) = \max(2\,875{,}66;\; 1\,340) = \mathbf{2\,875{,}66}$~\$ : le tarif proportionnel l'emporte; le \texttt{MAX} doit être présent et fonctionnel (test : avec 200\,000~\$ de travaux, 1\,340~\$ s'appliquerait). b) GCR $= 4 \times 2\,656{,}68 = \mathbf{10\,626{,}72}$~\$. | |
| 91 | 86 | \end{solution} |
| 92 | 87 | \begin{notescorrection} |
| 93 | 88 | MAX correct et assiette directs $+$ contingences : 5 pts (MAX absent mais résultat juste : 3/5); GCR : 3 pts. |
@@ -96,7 +91,7 @@ MAX correct et assiette directs $+$ contingences : 5 pts (MAX absent mais résul | ||
| 96 | 91 | |
| 97 | 92 | \begin{questionexam}{Intérêts intercalaires}{10} |
| 98 | 93 | \begin{solution} |
| 99 | −a) $i = 4{,}70~\% + 2{,}05~\% = \mathbf{6{,}75~\%}$. b) $I = 611\,811{,}75 \times 0{,}0675 \times \tfrac{12}{12} \times \tfrac{1}{2} = \mathbf{20\,648{,}65}$~\$. c) Le prêt de construction est tiré \textbf{au rythme des travaux} (décaissements progressifs à chaque certificat d'avancement) : l'encours moyen sur les 12 mois vaut environ la moitié du coût final, d'où le facteur ½ --- on ne paie pas 6,75~\% sur 611\,812~\$ pendant un an. Il est \textbf{trop optimiste} si les décaissements sont concentrés tôt (structure et enveloppe payées dans les premiers mois, acomptes aux fournisseurs, terrain financé par le même prêt) ou si le chantier s'étire après la fin des tirages : l'encours moyen dépasse alors 50~\%. | |
| 94 | +a) $i = 4{,}70~\% + 2{,}05~\% = \mathbf{6{,}75~\%}$. b) $I = 611\,842{,}53 \times 0{,}0675 \times \tfrac{12}{12} \times \tfrac{1}{2} = \mathbf{20\,649{,}69}$~\$. c) Le prêt de construction est tiré \textbf{au rythme des travaux} (décaissements progressifs à chaque certificat d'avancement) : l'encours moyen sur les 12 mois vaut environ la moitié du coût final, d'où le facteur ½ --- on ne paie pas 6,75~\% sur 611\,843~\$ pendant un an. Il est \textbf{trop optimiste} si les décaissements sont concentrés tôt (structure et enveloppe payées dans les premiers mois, acomptes aux fournisseurs, terrain financé par le même prêt) ou si le chantier s'étire après la fin des tirages : l'encours moyen dépasse alors 50~\%. | |
| 100 | 95 | \end{solution} |
| 101 | 96 | \begin{notescorrection} |
| 102 | 97 | a : 2 pts; b : 5 pts (½ oublié $= -3$; taux non composé avec la prime $= -1$); c : 3 pts (encours moyen 2, cas limite 1). |
@@ -105,19 +100,19 @@ a : 2 pts; b : 5 pts (½ oublié $= -3$; taux non composé avec la prime $= -1$) | ||
| 105 | 100 | |
| 106 | 101 | \begin{questionexam}{Autres coûts indirects et total}{8} |
| 107 | 102 | \begin{solution} |
| 108 | −a) Honoraires $4~\% \times 588\,245{,}15 = \mathbf{23\,529{,}81}$. b) Assurance $0{,}8~\% \times 611\,811{,}75 = \mathbf{4\,894{,}49}$. Frais juridiques 9\,500 (liés). c) \textbf{Total des indirects} $= 2\,875{,}52 + 10\,626{,}72 + 20\,648{,}65 + 23\,529{,}81 + 4\,894{,}49 + 9\,500 = \mathbf{72\,075{,}18}$~\$. d) Ratio $= 72\,075 / 588\,245 = \mathbf{12{,}3~\%}$ --- sous la fourchette de 15--25~\% de la séance 8 : il manque le marketing / la location, les frais de dossier bancaire, l'inspection et les essais, les taxes foncières pendant le chantier, et les honoraires sont modestes (plans de gabarit). | |
| 103 | +a) Honoraires $4~\% \times 588\,274{,}74 = \mathbf{23\,530{,}99}$. b) Assurance $0{,}8~\% \times 611\,842{,}53 = \mathbf{4\,894{,}74}$. Frais juridiques 9\,500 (liés). c) \textbf{Total des indirects} $= 2\,875{,}66 + 10\,626{,}72 + 20\,649{,}69 + 23\,530{,}99 + 4\,894{,}74 + 9\,500 = \mathbf{72\,077{,}80}$~\$. d) Ratio $= 72\,078 / 588\,275 = \mathbf{12{,}3~\%}$ --- sous la fourchette de 15--25~\% de la séance 8 : il manque le marketing / la location, les frais de dossier bancaire, l'inspection et les essais, les taxes foncières pendant le chantier, et les honoraires sont modestes (plans de gabarit). | |
| 109 | 104 | \end{solution} |
| 110 | 105 | \begin{notescorrection} |
| 111 | 106 | Honoraires sur les directs du cours : 3 pts (sur les directs nus : 2; sur directs $+$ contingences : 2); assurance : 1; total et ratio : 4 (ratio commenté : 1 des 4). |
| 112 | 107 | \end{notescorrection} |
| 113 | 108 | \end{questionexam} |
| 114 | 109 | |
| 115 | −\begin{questionexam}{Profit entrepreneurial, coût total et unités de comparaison}{8} | |
| 110 | +\begin{questionexam}{Profit entrepreneurial, coût total et unités de comparaison}{10} | |
| 116 | 111 | \begin{solution} |
| 117 | −a) Assiette $= 611\,811{,}75 + 72\,075{,}18 = 683\,886{,}93$; profit $11~\% = \mathbf{75\,227{,}56}$; \textbf{coût total de remplacement neuf $= 759\,114{,}50$~\$} (hors taxes). b) $759\,114{,}50 / (398{,}04 \times 10{,}7639 = 4\,284{,}5~\text{pi}^2) = \mathbf{177{,}18~\$/pi\up{2}}$ hors sol; $/ 3\,797{,}6~\text{pi}^2 = \mathbf{199{,}89~\$/pi\up{2}}$ chauffé; $/4 = \mathbf{189\,778{,}62~\$/logement}$. c) Sur les directs seuls : $11~\% \times 588\,245{,}15 = 64\,706{,}97$~\$, soit \textbf{10\,520,60~\$ de moins} ($-1{,}4$~\% du coût total). Deux conventions coexistent : même pourcentage, assiettes différentes, deux coûts neufs différents --- l'évaluateur doit \textbf{énoncer la sienne} (normes OEAQ : hypothèses et méthodes explicites) pour que le lecteur puisse répliquer le calcul et comparer des bordereaux. Du point de vue du promoteur, la base la plus défendable est l'\textbf{investissement total à risque} (directs $+$ indirects, intercalaires compris) : c'est sur ce capital qu'il exige un rendement. Informatif : TPS 37\,955,72; TVQ 75\,721,67; TTC 872\,791,89~\$. | |
| 112 | +a) Assiette $= 611\,842{,}53 + 72\,077{,}80 = 683\,920{,}33$; profit $11~\% = \mathbf{75\,231{,}24}$; \textbf{coût total de remplacement neuf $= 759\,151{,}56$~\$} (hors taxes). b) $759\,151{,}56 / (398{,}04 \times 10{,}7639 = 4\,284{,}5~\text{pi}^2) = \mathbf{177{,}19~\$/pi\up{2}}$ hors sol; $/ 3\,797{,}6~\text{pi}^2 = \mathbf{199{,}90~\$/pi\up{2}}$ chauffé; $/4 = \mathbf{189\,787{,}89~\$/logement}$. c) Sur les directs seuls : $11~\% \times 588\,274{,}74 = 64\,710{,}22$~\$, soit \textbf{10\,521,01~\$ de moins} ($-1{,}4$~\% du coût total). Deux conventions coexistent : même pourcentage, assiettes différentes, deux coûts neufs différents --- l'évaluateur doit \textbf{énoncer la sienne} (normes OEAQ : hypothèses et méthodes explicites) pour que le lecteur puisse répliquer le calcul et comparer des bordereaux. Du point de vue du promoteur, la base la plus défendable est l'\textbf{investissement total à risque} (directs $+$ indirects, intercalaires compris) : c'est sur ce capital qu'il exige un rendement. Informatif : TPS 37\,957,58; TVQ 75\,725,37; TTC 872\,834,51~\$. | |
| 118 | 113 | \end{solution} |
| 119 | 114 | \begin{notescorrection} |
| 120 | −a : 3 pts (assiette correcte 2); b : 2 pts; c : 3 pts (écart chiffré 1, nécessité d'énoncer 1, base défendable 1). | |
| 115 | +a : 4 pts (assiette correcte 2); b : 3 pts; c : 3 pts (écart chiffré 1, nécessité d'énoncer 1, base défendable 1). | |
| 121 | 116 | \end{notescorrection} |
| 122 | 117 | \end{questionexam} |
| 123 | 118 | |
@@ -133,38 +128,35 @@ a : 3 pts (assiette correcte 2); b : 2 pts; c : 3 pts (écart chiffré 1, néces | ||
| 133 | 128 | \midrule |
| 134 | 129 | Q1 & 180, rue O'Brien & 1\,145\,000 & 288\,230 & 856\,770 & 4\,505 & 214\,192 & 1,437 \\ |
| 135 | 130 | Q2 & 160, rue O'Brien & 1\,168\,000 & 288\,104 & 879\,896 & 4\,626 & 219\,974 & 1,466 \\ |
| 136 | −Q3 & 18, rue du Campagnard & 1\,193\,000 & 256\,051 & 936\,949 & 4\,310 & 234\,237 & 1,264 \\ | |
| 137 | −Q4 & 94, rue de l'Écorce & 1\,100\,000 & 256\,428 & 843\,572 & 4\,300 & 210\,893 & 1,377 \\ | |
| 138 | −Q5 & 390, rue Raymond & 1\,165\,000 & 288\,104 & 876\,896 & 4\,610 & 219\,224 & 1,277 \\ | |
| 139 | −Q6 & 24, boul. Sacré-Cœur & 1\,300\,000 & 261\,330 & 1\,038\,670 & 3\,895 & 259\,667 & 1,354 \\ | |
| 140 | −Q7 & 203, rue de la Cité-Jardin & 1\,199\,500 & 273\,398 & 926\,102 & 4\,028 & 231\,526 & 1,178 \\ | |
| 141 | −Q8 & 7, rue Damphousse & 1\,125\,000 & 231\,916 & 893\,084 & 3\,731 & 223\,271 & 1,099 \\ | |
| 142 | −Q9 & 767, rue Notre-Dame & 1\,205\,276 & 231\,414 & 973\,862 & 4\,201 & 243\,466 & 1,225 \\ | |
| 143 | −Q10 & 380, rue Raymond & 1\,140\,000 & 288\,104 & 851\,896 & 4\,479 & 212\,974 & 1,421 \\ | |
| 144 | −Q11 & 1151, rue Notre-Dame & 849\,411 & 234\,053 & 615\,358 & 3\,165 & 153\,839 & 0,943 \\ | |
| 131 | +Q3 & 94, rue de l'Écorce & 1\,100\,000 & 256\,428 & 843\,572 & 4\,300 & 210\,893 & 1,377 \\ | |
| 132 | +Q4 & 390, rue Raymond & 1\,165\,000 & 288\,104 & 876\,896 & 4\,610 & 219\,224 & 1,277 \\ | |
| 133 | +Q5 & 7, rue Damphousse & 1\,125\,000 & 231\,916 & 893\,084 & 3\,731 & 223\,271 & 1,099 \\ | |
| 134 | +Q6 & 767, rue Notre-Dame & 1\,205\,276 & 231\,414 & 973\,862 & 4\,201 & 243\,466 & 1,225 \\ | |
| 135 | +Q7 & 380, rue Raymond & 1\,140\,000 & 288\,104 & 851\,896 & 4\,479 & 212\,974 & 1,421 \\ | |
| 136 | +Q8 & 1151, rue Notre-Dame & 849\,411 & 234\,053 & 615\,358 & 3\,165 & 153\,839 & 0,943 \\ | |
| 145 | 137 | \midrule |
| 146 | − & \textbf{Médianes} & 1\,165\,000 & & \textbf{879\,896} & \textbf{4\,300} & \textbf{219\,974} & \textbf{1,277} \\ | |
| 138 | + & \textbf{Médianes} & 1\,142\,500 & & \textbf{866\,833} & \textbf{4\,389} & \textbf{216\,708} & \textbf{1,327} \\ | |
| 147 | 139 | \bottomrule |
| 148 | 140 | \end{tabular} |
| 149 | 141 | \end{center} |
| 150 | −\textbf{b)} Bordereau 759\,115~\$ contre 879\,896~\$ : écart \textbf{$-13{,}7$~\%}; contre le moteur de coût (827\,445~\$) : \textbf{$-8{,}3$~\%} (dans sa fourchette p10--p90 de 763\,109 -- 891\,781~\$); 177,18~\$/pi\up{2} hors sol $<$ 180 : « \textbf{sous la fourchette} » Altus (mais 199,89~\$/pi\up{2} chauffé est dedans --- l'unité de surface compte). \textbf{c)} Profit extrait $= (879\,896 - 683\,887) / 683\,887 = \mathbf{28{,}7~\%}$, contre 11~\% de convention. \textbf{d)} A1 : $1\,329\,000 - 240\,700 \times 1{,}257 = 1\,026\,440$~\$ (256\,610~\$/logement); A2 : $1\,289\,900 - 210\,100 \times 1{,}257 = 1\,025\,804$~\$ (256\,451~\$/logement) --- prix demandés d'immeubles de 2020 à 3 étages. \textbf{e)} Lecture attendue : le marché 2025 paie les quadruplex neufs \textbf{plus cher que leur coût de création} (profit implicite $\approx$ 29~\%), ce qui attire les promoteurs et confirme la viabilité; mais (1) les comparables ont deux logements au rez-de-jardin (sous-sol fini) et parfois trois étages --- plus de finition que notre sous-sol non fini; (2) qualité et année varient (Q6 : Hull, 3 étages, 1,3~M\$); (3) le terrain indexé par le ratio des terrains vacants (1,257) est une approximation --- un ratio de 1,10 ferait monter la valeur implicite du bâtiment; (4) la dispersion des ratios prix $\div$ rôle (0,94 à 1,47) rappelle que le rôle est daté de 2022; (5) Q11 (livraison 2024, 849\,411~\$) tire la médiane vers le bas; (6) les annonces sont des prix \emph{demandés}. Pour le promoteur : coût de création $\approx$ 759\,000~\$ $+$ terrain contre une valeur $\approx$ 880\,000~\$ $+$ terrain; la marge réelle dépendra des soumissions, de la durée du chantier et du niveau de finition. | |
| 142 | +\textbf{b)} Bordereau 759\,152~\$ contre 866\,833~\$ : écart \textbf{$-12{,}4$~\%}; contre le moteur de coût (827\,445~\$) : \textbf{$-8{,}3$~\%} (dans sa fourchette p10--p90 de 763\,109 -- 891\,781~\$); 177,19~\$/pi\up{2} hors sol $<$ 180 : « \textbf{sous la fourchette} » Altus (mais 199,90~\$/pi\up{2} chauffé est dedans --- l'unité de surface compte). \textbf{c)} Profit extrait $= (866\,833 - 683\,920) / 683\,920 = \mathbf{26{,}7~\%}$, contre 11~\% de convention. \textbf{d)} Lecture attendue : le marché 2025 paie les quadruplex neufs \textbf{plus cher que leur coût de création} (profit implicite $\approx$ 27~\%), ce qui attire les promoteurs et confirme la viabilité; mais (1) les comparables ont deux logements au rez-de-jardin (sous-sol fini) --- plus de finition que notre sous-sol non fini; (2) qualité et année varient; (3) le terrain indexé par le ratio des terrains vacants (1,257) est une approximation --- un ratio de 1,10 ferait monter la valeur implicite du bâtiment; (4) la dispersion des ratios prix $\div$ rôle (0,94 à 1,47) rappelle que le rôle est daté de 2022; (5) Q8 (livraison 2024, 849\,411~\$) tire la médiane vers le bas; (6) les annonces A1 et A2 du tableau 9 ($\approx$ 1,3~M\$ demandés pour des quadruplex de 2020 à 3 étages, soit $\approx$ 256\,500~\$ de bâtiment implicite par logement) sont des prix \emph{demandés}. Pour le promoteur : coût de création $\approx$ 759\,000~\$ $+$ terrain contre une valeur $\approx$ 867\,000~\$ $+$ terrain; la marge réelle dépendra des soumissions, de la durée du chantier et du niveau de finition. | |
| 151 | 143 | \end{solution} |
| 152 | 144 | \begin{notescorrection} |
| 153 | −a : 5 pts (terrain indexé 1, bâtiment implicite 1, \$/m\up{2} et \$/logement 1, ratio 1, médianes 1); b : 3 pts (formule SI fonctionnelle 1); c : 2 pts (assiette $=$ Bordereau!C36 : oublier les indirects $= -1$); d : 1 pt; e : 3 pts (viabilité 1, au moins trois limites nommées avec les données 2). | |
| 145 | +a : 5 pts (terrain indexé 1, bâtiment implicite 1, \$/m\up{2} et \$/logement 1, ratio 1, médianes 1); b : 3 pts (formule SI fonctionnelle 1); c : 2 pts (assiette $=$ Bordereau!C36 : oublier les indirects $= -1$); d : 4 pts (viabilité 1, au moins trois limites nommées avec les données 3). | |
| 154 | 146 | \end{notescorrection} |
| 155 | 147 | \end{questionexam} |
| 156 | 148 | |
| 157 | −\begin{questionexam}{Tableau de bord et note au promoteur}{12} | |
| 149 | +\begin{questionexam}{Tableau de bord et note au promoteur}{14} | |
| 158 | 150 | \begin{solution} |
| 159 | −KPI : indirects 72\,075~\$ (\texttt{=SIERREUR(Bordereau!C32;"—")}), profit 75\,228~\$, 177,18~\$/pi\up{2}, écart marché $-13{,}7$~\%. 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\,682 / 128\,998 / 6\,396~\$). Note au promoteur (éléments attendus) : coût total 759\,115~\$, 177~\$/pi\up{2} hors sol, 200~\$/pi\up{2} chauffé, 189\,779~\$/logement, indirects $+$ profit $=$ 19,4~\% du total; postes sensibles : brique (77\,533~\$, 16,5~\% du direct nu), armoires (42\,103), fondations (23\,260), enveloppe 22,5~\%, main-d'œuvre 27,4~\%; \textbf{retard de 6 mois} : $I = 611\,812 \times 6{,}75~\% \times \tfrac{18}{12} \times \tfrac{1}{2} = 30\,973$~\$, soit $\mathbf{+10\,324}$~\$ ($+50$~\% du poste), et $\approx +11\,460$~\$ sur le coût total une fois le profit de 11~\% appliqué ($\approx$ 770\,575~\$, $+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\,677~\$ 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). | |
| 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). | |
| 160 | 152 | \end{solution} |
| 161 | 153 | \begin{notescorrection} |
| 162 | −KPI : 4 pts; verdict cohérent : 1; 3\up{e} graphique titré : 2; note : 5 (retard chiffré 2, cellules citées 1, conventions et limites 2). | |
| 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). | |
| 163 | 155 | \end{notescorrection} |
| 164 | 156 | \end{questionexam} |
| 165 | 157 | |
| 166 | 158 | \begin{notescorrection}[Rappels transversaux et pièges] |
| 167 | −Facteur ½ omis; honoraires sur les directs nus; profit entrepreneurial sur les directs seuls sans le déclarer; majorations de l'entrepreneur appliquées sur une base commune au lieu des cumuls; codes de division numériques dans SOMME.SI; empreinte à l'axe (190,32~m\up{2}); terrain non indexé à la question 9 (bâtiment implicite médian 935\,800~\$ et profit extrait 36,8~\% --- recevable si déclaré); unité de surface non précisée pour le \$/pi\up{2}. Bordereau non chaîné : plafond 50~\% des questions 2 à 9. | |
| 159 | +Facteur ½ omis; honoraires sur les directs nus; profit entrepreneurial sur les directs seuls sans le déclarer; majorations de l'entrepreneur appliquées sur une base commune au lieu des cumuls; codes de division numériques dans SOMME.SI; empreinte à l'axe (190,32~m\up{2}); terrain non indexé à la question 9 (bâtiment implicite médian $\approx$ 924\,000~\$ et profit extrait $\approx$ 35~\% --- recevable si déclaré); unité de surface non précisée pour le \$/pi\up{2}. Bordereau non chaîné : plafond 50~\% des questions 2 à 9. | |
| 168 | 160 | \end{notescorrection} |
| 169 | 161 | |
| 170 | 162 | \medskip |
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
+58 −2
@@ -76,6 +76,61 @@ for pg in cas["pages"]: | ||
| 76 | 76 | |
| 77 | 77 | t = r["totals"] |
| 78 | 78 | spec = cas["project"]["spec"] |
| 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 --- | |
| 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]), | |
| 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]), | |
| 85 | + ("03", "Sous-sol : dalle, isolation XPS et fenêtres", "dalle 4 po, XPS 2 po deux couches, 3 fenêtres utilitaires", 199.02, "m² de dalle", [8, 9, 23]), | |
| 86 | + ("06", "Planchers portés", "solives en I 24 po c/c et sous-plancher OSB ¾ po", 352.81, "m² de plancher", [10, 11]), | |
| 87 | + ("06", "Ossature de bois", "murs extérieurs 2 × 6 + contreplaqué ½ po, cloisons 2 × 4, poutre LVL, colonnes", 572.42, "m² de mur (ext. brut + cloisons)", [12, 13, 14, 15, 16]), | |
| 88 | + ("07", "Toiture complète", "fermes, support CDX ½ po, membrane APP 2 couches, soffites, gouttières et descentes", 218.92, "m² de toit", [17, 18, 26, 27, 28, 29]), | |
| 89 | + ("07", "Isolation des murs extérieurs R-24 et du comble R-50", "matelas R-21 (≈ R-24) + cellulose soufflée", 415.77, "m² isolé (murs nets + comble)", [21, 22]), | |
| 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]), | |
| 92 | + ("08", "Fenêtres", "fenêtre de vinyle à guillotine 3 × 4½ 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]), | |
| 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]), | |
| 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]), | |
| 98 | + ("11", "Cuisines", "armoires, comptoirs stratifiés, éviers avec robinet", 4, "logement", [43, 44, 45]), | |
| 99 | + ("22", "Salles de bain complètes", "toilette, lavabo et robinet, baignoire d'acier, robinetterie", 4, "unité", [46, 47, 48, 49, 50]), | |
| 100 | + ("22", "Plomberie brute, chauffe-eau et drainage", "28 appareils (alimentation, évacuation, évent), 4 chauffe-eau 60 gal, drainage", 4, "logement", [51, 52, 53]), | |
| 101 | + ("23", "Chauffage et ventilation", "26 plinthes électriques 1 500 W, 4 échangeurs d'air (VRC)", 4, "logement", [54, 55]), | |
| 102 | + ("26", "Électricité complète", "4 entrées 200 A et panneaux, filage brut, 54 luminaires, 3 lanternes", 4, "logement", [56, 57, 58, 59, 60, 61, 62, 63]), | |
| 103 | + ("32", "Perron préfabriqué", "5 contremarches, 5 pi", 1, "unité", [64]), | |
| 104 | +] | |
| 105 | +by_no = {L["no"]: L for L in lignes} | |
| 106 | +assert sorted(n for *_, nos in COMP_DEF for n in nos) == list(range(1, 65)) | |
| 107 | +composantes = [] | |
| 108 | +for i, (div, nom, det, q, u, nos) in enumerate(COMP_DEF, 1): | |
| 109 | + tot = sum(by_no[n]["direct"] for n in nos) | |
| 110 | + mat = sum(by_no[n]["direct"] * by_no[n]["mat"] / by_no[n]["direct_u"] if by_no[n]["direct_u"] else 0 for n in nos) | |
| 111 | + mo = sum(by_no[n]["direct"] * by_no[n]["mo"] / by_no[n]["direct_u"] if by_no[n]["direct_u"] else 0 for n in nos) | |
| 112 | + eq = max(tot - mat - mo, 0.0) | |
| 113 | + pm, pl, pe = round(mat / q, 2), round(mo / q, 2), round(eq / q, 2) | |
| 114 | + composantes.append({"no": i, "wbs": div, "division": DIV[div], "nom": nom, "detail": det, "qte": q, "unite": u, | |
| 115 | + "mat": pm, "mo": pl, "eq": pe, "direct_u": round(pm + pl + pe, 2), "direct": round(q * (pm + pl + pe), 2), "direct_r1": round(tot, 2), | |
| 116 | + "lignes": ", ".join(by_no[n]["code"] for n in nos if by_no[n]["code"]) or "catalogue UQO Éval"}) | |
| 117 | +assert abs(sum(c["direct_r1"] for c in composantes) - t["direct"]) < 0.5 | |
| 118 | +by_wbs_comp = {} | |
| 119 | +for c in composantes: | |
| 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) --- | |
| 122 | +REL_N = {m["nom"]: m for m in mes} | |
| 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)"), | |
| 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"), | |
| 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"), | |
| 130 | + ("Planchers portés (m²) = Σ aires des pièces hors sol", "176,40 + 176,40", "Planchers portés (solives)", "=G12"), | |
| 131 | +] | |
| 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] | |
| 133 | + | |
| 79 | 134 | out = { |
| 80 | 135 | "DATE_EVAL": "dt.date(2026, 10, 29)", |
| 81 | 136 | "PROJET": {"id": cas["project"]["id"], "nom": cas["project"]["name"], "adresse": cas["project"]["address"], "municipalite": "Gatineau", |
@@ -85,15 +140,16 @@ out = { | ||
| 85 | 140 | "prof_excavation": 2.6, "debords": 1.10, "facteur_pente": 1.0, "empreinte": 199.02, "perimetre": 57.4, |
| 86 | 141 | "aire_chauffee": 352.81, "aire_brute_hors_sol": round(2 * 199.02, 2), "sous_sol": 199.02, |
| 87 | 142 | "rsm_location": "GATINEAU (C57)", "rsm_release": "Year 2026 Quarter 4", "mo": "STD (syndiquée)"}, |
| 88 | − "PAGES": pages, "RELEVE": mes, "LIGNES": lignes, "DIVISIONS": DIV, "CONVERSIONS": {k: {"unite_rsm": v[0], "facteur": v[1], "fr": UNITE_FR[k], "rsm_fr": RSM_FR[v[0]]} for k, v in CONV.items()}, | |
| 143 | + "PAGES": pages, "RELEVE": mes, "LIGNES": lignes, "COMPOSANTES": composantes, "GRANDEURS": grandeurs, "DIVISIONS": DIV, "CONVERSIONS": {k: {"unite_rsm": v[0], "facteur": v[1], "fr": UNITE_FR[k], "rsm_fr": RSM_FR[v[0]]} for k, v in CONV.items()}, | |
| 89 | 144 | "MOTEUR_QS": {"direct_nu": t["direct"], "ajust_regional": t["locationAdjustment"], "direct_localise": t["located"], "cg_pct": 0.08, "cg": t["generalConditions"], |
| 90 | 145 | "fg_pct": 0.07, "fg": t["overhead"], "profit_pct": 0.08, "profit": t["profit"], "cont_pct": 0.05, "cont": t["contingency"], "total": t["total"], |
| 91 | − "mat": t["material"], "mo": t["labour"], "eq": t["equipment"], "by_wbs": {x["wbs"]: x["direct"] for x in r["byWbs"]}, | |
| 146 | + "mat": t["material"], "mo": t["labour"], "eq": t["equipment"], "by_wbs": {x["wbs"]: x["direct"] for x in r["byWbs"]}, "by_wbs_comp": by_wbs_comp, | |
| 92 | 147 | "facteurs": r["location"], "ordre": r["applicationOrder"]}, |
| 93 | 148 | "VENTES": [{"adresse": v["street"], "secteur": v["sector"], "date": v["date"], "prix": v["amount"], "annee": v["annee_construction"], |
| 94 | 149 | "aire_etages": v["aire_etages_m2"], "terrain": v["superficie_terrain_m2"], "front": v["front_terrain_m"], "etages": v["nb_etages"], |
| 95 | 150 | "lien": v["lien_physique"], "vt": v["valeur_terrain"], "vb": v["valeur_batiment"], "role": v["valeur_role"], "id": v["id_provinc"]} |
| 96 | 151 | for v in sorted(ventes["quad_sales"], key=lambda x: x["date"], reverse=True)], |
| 152 | + "VENTES_TP": ["180, rue O'Brien", "160, rue O'Brien", "94, rue de l'Écorce", "390, rue Raymond", "7, rue Damphousse", "767, rue Notre-Dame", "380, rue Raymond", "1151, Rue Notre-Dame"], | |
| 97 | 153 | "ANNONCES": [ |
| 98 | 154 | {"adresse": "280, rue Champlain", "secteur": "Île de Hull", "prix": 1329000, "annee": 2020, "aire_pi2": 3025, "aire_etages": 281.1, "terrain": 303.5, "etages": 3, |
| 99 | 155 | "logements": 4, "vt": 240700, "vb": 807100, "role": 1047800, "revenus": 79140, "uid": "remax_quebec:22916007", "photo": "champlain-280.jpg", |
modified
IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/make_IMM1033_TP2.py
+201 −228
@@ -1,14 +1,14 @@ | ||
| 1 | 1 | #!/usr/bin/env python3 |
| 2 | −"""Gabarit Excel — IMM1033-20 TP2 : Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval (design v2). | |
| 2 | +"""Gabarit Excel — IMM1033-20 TP2 : Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval (design v2, version allégée). | |
| 3 | 3 | |
| 4 | 4 | Toutes les données proviennent de www.uqo-eval.app (extraction du 29 octobre 2026) : cas d'étude « Cas 9 — Quadruplex 2 étages, |
| 5 | −Gatineau » du module Quantity Survey (plans, relevé des quantités, 64 lignes tarifées RSMeans 2026 T4 localisées Gatineau), | |
| 6 | −onze ventes réelles de quadruplex neufs, deux annonces en vigueur, estimation du moteur de coût. Voir tp2_donnees.py. | |
| 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. | |
| 7 | 7 | |
| 8 | 8 | Zones de réponse (identiques à l'énoncé LaTeX) : |
| 9 | − Relevé Q1 : C5 | Q2 : F16:F27 · H16:H27 | Q3 : K32:L95 · P32:Q95 · Q96 · E98:E101 · E105:F117 · C121:C123 · E121:E123 | |
| 9 | + Relevé Q1 : C5 | Q2 : F16:F22 · H16:H22 | Q3 : K27:L48 · L49 · E51:E54 · E58:F69 · C72:C74 · E72:E74 | |
| 10 | 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:N16 · K17:N17 · K21 · K23:K25 · F29:G30 · C33 | |
| 11 | + Marché Q9 : J6:N13 · K14:N14 · K18 · K20:K22 · C25 | |
| 12 | 12 | Dashboard Q10 : KPI D6:G6 (4 jaunes) · C8 · graphique 3 · onglet Note |
| 13 | 13 | """ |
| 14 | 14 | import os |
@@ -27,7 +27,7 @@ from openpyxl.worksheet.datavalidation import DataValidation | ||
| 27 | 27 | from openpyxl.worksheet.hyperlink import Hyperlink |
| 28 | 28 | |
| 29 | 29 | import uqo_xlsx as U |
| 30 | −from tp2_donnees import ANNONCES, CONVERSIONS, DATE_EVAL, DIVISIONS, LIGNES, MOTEUR_COUT, MOTEUR_QS, PAGES, PARAMS, PROJET, RELEVE, VENTES | |
| 30 | +from tp2_donnees import ANNONCES, COMPOSANTES, DATE_EVAL, DIVISIONS, GRANDEURS, MOTEUR_COUT, MOTEUR_QS, PAGES, PARAMS, PROJET, VENTES, VENTES_TP | |
| 31 | 31 | from uqo_xlsx import ( |
| 32 | 32 | BLEU, BLEU_CLAIR, CENTER, FILL_BLEU, FILL_CALCUL, FILL_CLAIR, FILL_DONNEES, FONT_H1, FONT_H2, |
| 33 | 33 | FONT_NORMAL, FONT_NOTE, GRIS, OR, VERT, WRAP, bandeau, legende, note, preparer_feuille, titre_section, |
@@ -61,6 +61,8 @@ FMT_P1 = "0.0%" | ||
| 61 | 61 | FMT_N2 = "#,##0.00" |
| 62 | 62 | FMT_DATE = "yyyy-mm-dd" |
| 63 | 63 | P = PROJET |
| 64 | +VTP = [v for v in VENTES if v["adresse"] in VENTES_TP] | |
| 65 | +NV = len(VTP) | |
| 64 | 66 | |
| 65 | 67 | |
| 66 | 68 | def rep(ws, coord, hint="", num_fmt=None, height=None, comment=None): |
@@ -171,28 +173,36 @@ ws = wb.active | ||
| 171 | 173 | ws.title = "Accueil" |
| 172 | 174 | preparer_feuille(ws, {"B": 7, "C": 44, "D": 22, "E": 10, "F": 30, "G": 22, "H": 26}) |
| 173 | 175 | bandeau(ws, "IMM1033-20 — Travail pratique 2", |
| 174 | − "Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval : relevé des quantités, RSMeans 2026, indirects, profit, marché · Automne 2026 · UQO · Simon-Pierre Boucher", ncols=7) | |
| 176 | + "Bordereau de coût de remplacement neuf d'un quadruplex avec UQO Éval : composantes RSMeans 2026, indirects réels, profit, marché · Automne 2026 · UQO · Simon-Pierre Boucher", ncols=7) | |
| 175 | 177 | titre_section(ws, 5, 2, "Identification", 7) |
| 176 | 178 | for r, lbl in [(6, "Nom, prénom"), (7, "Code permanent"), (8, "Outils utilisés (assistante Éva d'UQO Éval, chatbot du cours, autres)")]: |
| 177 | 179 | c = ws.cell(row=r, column=3, value=lbl); c.font = FONT_H2; c.alignment = WRAP |
| 178 | 180 | ws.merge_cells(start_row=r, start_column=4, end_row=r, end_column=8) |
| 179 | −rep(ws, "D6"); rep(ws, "D7"); rep(ws, "D8", hint="ex. : Éva (UQO Éval) pour comprendre une ligne RSMeans ; chatbot du cours ; aucun…") | |
| 181 | +rep(ws, "D6"); rep(ws, "D7"); rep(ws, "D8", hint="ex. : Éva (UQO Éval) pour comprendre une composante ; chatbot du cours ; aucun…") | |
| 180 | 182 | |
| 181 | 183 | titre_section(ws, 10, 2, "Parcours du travail — progression mise à jour automatiquement", 7) |
| 182 | 184 | entetes(ws, 11, 2, ["", "Question", "Onglet (cliquer)", "Points", "Zone principale", "Statut", "Repère de correction"]) |
| 185 | +NC = len(COMPOSANTES) | |
| 186 | +R_C0, R_C1 = 27, 27 + NC - 1 # 27..48 | |
| 187 | +R_CT = R_C1 + 1 # 49 total | |
| 188 | +R_MAT = R_CT + 2 # 51..54 | |
| 189 | +R_DH = R_MAT + 6 # 57 entête divisions | |
| 190 | +R_D0, R_D1 = R_DH + 1, R_DH + 12 # 58..69 (12 divisions : 05 fusionnée dans 06) | |
| 191 | +R_TOP = R_D1 + 3 # 73..75 | |
| 183 | 192 | parcours = [ |
| 184 | − ("1", "Méthode d'estimation et nature du coût", "Relevé", 6, "C5", None, "Relevé des quantités ; remplacement par définition"), | |
| 185 | − ("2", "Du plan au relevé des quantités", "Relevé", 10, "F16:F27 · H16:H27", "COUNTBLANK(Relevé!F16:F27)+COUNTBLANK(Relevé!H16:H27)", 24, "Écarts ≈ 0 % avec le relevé UQO Éval"), | |
| 186 | − ("3", "Tarification RSMeans des 64 lignes", "Relevé", 16, "K32:L95 · P32:Q95 · Q96 · E98:E101 · E105:F117 · C121:E123", | |
| 187 | − "COUNTBLANK(Relevé!K32:L95)+COUNTBLANK(Relevé!P32:Q95)+COUNTBLANK(Relevé!Q96)+COUNTBLANK(Relevé!E98:E101)+COUNTBLANK(Relevé!E105:F117)+COUNTBLANK(Relevé!C121:C123)+COUNTBLANK(Relevé!E121:E123)", 293, "Direct nu ≈ 471 085 $ ; brique = poste le plus lourd"), | |
| 193 | + ("1", "Méthode d'estimation et nature du coût", "Relevé", 8, "C5", None, "Relevé abrégé / composantes ; remplacement par définition"), | |
| 194 | + ("2", "Du plan au relevé : sept grandeurs", "Relevé", 8, "F16:F22 · H16:H22", "COUNTBLANK(Relevé!F16:F22)+COUNTBLANK(Relevé!H16:H22)", 14, "Écarts ≈ 0 % avec le relevé UQO Éval"), | |
| 195 | + ("3", "Bordereau des 22 composantes (prix composites nus)", "Relevé", 12, f"K{R_C0}:L{R_C1} · L{R_CT} · E{R_MAT}:E{R_MAT + 3} · E{R_D0}:F{R_D1} · C{R_TOP}:E{R_TOP + 2}", | |
| 196 | + f"COUNTBLANK(Relevé!K{R_C0}:L{R_C1})+COUNTBLANK(Relevé!L{R_CT})+COUNTBLANK(Relevé!E{R_MAT}:E{R_MAT + 3})+COUNTBLANK(Relevé!E{R_D0}:F{R_D1})+COUNTBLANK(Relevé!C{R_TOP}:C{R_TOP + 2})+COUNTBLANK(Relevé!E{R_TOP}:E{R_TOP + 2})", | |
| 197 | + 2 * NC + 1 + 4 + 2 * 12 + 6, "Direct nu ≈ 471 085 $ ; brique = poste le plus lourd"), | |
| 188 | 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 $)"), |
| 189 | 199 | ("5", "Permis réel de Gatineau et garantie GCR", "Bordereau", 8, "C19:C20", "COUNTBLANK(Bordereau!C19:C20)", 2, "MAX fonctionnel ; 4 unités"), |
| 190 | 200 | ("6", "Intérêts intercalaires", "Bordereau", 10, "C23:C24 · C25", "COUNTBLANK(Bordereau!C23:C24)", 2, "Taux composé ; facteur ½"), |
| 191 | 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"), |
| 192 | − ("8", "Profit entrepreneurial, coût total, unités de comparaison", "Bordereau", 8, "C36:C43 · C44", "COUNTBLANK(Bordereau!C36:C43)", 8, "Assiette = directs + cont. + indirects"), | |
| 193 | − ("9", "Validation par le marché (11 ventes réelles), le moteur UQO Éval et Altus", "Marché", 14, "J6:N16 · K17:N17 · K21 · K23:K25 · F29:G30 · C33", | |
| 194 | − "COUNTBLANK(Marché!J6:N16)+COUNTBLANK(Marché!K17:N17)+COUNTBLANK(Marché!K21)+COUNTBLANK(Marché!K23:K25)+COUNTBLANK(Marché!F29:G30)", 67, "Terrain indexé ; profit extrait ; limites"), | |
| 195 | − ("10", "Tableau de bord et note au promoteur", "Dashboard", 12, "KPI D6:G6 · C8 · graphique 3 · onglet Note", "COUNTBLANK(Dashboard!D6:G6)+COUNTBLANK(Dashboard!C8)", 5, "KPI par formule ; retard de 6 mois chiffré"), | |
| 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}", | |
| 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é"), | |
| 196 | 206 | ] |
| 197 | 207 | for i, row in enumerate(parcours): |
| 198 | 208 | no, q, feuille, pts, zone_txt, cb, *rest = row |
@@ -226,12 +236,12 @@ note(ws, 23, 3, "Le statut passe à « ◐ En cours » dès qu'une cellule de la | ||
| 226 | 236 | |
| 227 | 237 | titre_section(ws, 25, 2, "Mode d'emploi du classeur", 7) |
| 228 | 238 | instructions = [ |
| 229 | − "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, RSMeans 2026 T4, ventes du Registre foncier, moteur de coût.", | |
| 230 | − "2. Onglet Données : le projet (dimensions du plan), les plans par niveau, le relevé des quantités d'UQO Éval, les 64 lignes RSMeans (quantités, unités, prix unitaires nus matériaux / main-d'œuvre / équipement), la table de conversion, les paramètres du moteur, les paramètres réels des indirects, les 11 ventes de quadruplex neufs, le moteur de coût. NE RIEN MODIFIER.", | |
| 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.", | |
| 231 | 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.", |
| 232 | − "4. Onglet Relevé : questions 1 à 3 — du plan aux quantités (12 grandeurs à reproduire), puis tarification des 64 lignes RSMeans (conversion d'unités, coût unitaire, montant, sous-totaux par division).", | |
| 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).", | |
| 233 | 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.", |
| 234 | − "6. Onglet Marché : question 9 — extraction de la valeur implicite du bâtiment sur 11 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é.", | |
| 235 | 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.", |
| 236 | 246 | ] |
| 237 | 247 | r = 26 |
@@ -247,9 +257,9 @@ finir_feuille(ws, BLEU, zoom=100, landscape=False, titre="Accueil et progression | ||
| 247 | 257 | # 2. DONNÉES |
| 248 | 258 | # ============================================================================== |
| 249 | 259 | ws = wb.create_sheet("Données") |
| 250 | −preparer_feuille(ws, {"B": 8, "C": 30, "D": 30, "E": 44, "F": 14, "G": 12, "H": 10, "I": 10, "J": 12, "K": 12, "L": 12, "M": 12, "N": 12, "O": 30, "P": 8}) | |
| 260 | +preparer_feuille(ws, {"B": 8, "C": 30, "D": 30, "E": 44, "F": 14, "G": 14, "H": 12, "I": 12, "J": 12, "K": 12, "L": 12, "M": 12, "N": 12, "O": 30, "P": 8}) | |
| 251 | 261 | bandeau(ws, "Données fournies — toutes réelles, extraites de www.uqo-eval.app le 29 octobre 2026", |
| 252 | − "Tableaux 1 à 11 de l'énoncé · NE PAS MODIFIER · les zones de réponse des autres onglets y sont liées", ncols=14) | |
| 262 | + "Tableaux 1 à 10 de l'énoncé · NE PAS MODIFIER · les zones de réponse des autres onglets y sont liées", ncols=14) | |
| 253 | 263 | ws.freeze_panes = "A5" |
| 254 | 264 | |
| 255 | 265 | titre_section(ws, 5, 2, "Tableau 1 — Le projet : quadruplex de 2 étages à construire à Gatineau (cas d'étude UQO Éval « Cas 9 », plans et fiche technique)", 14) |
@@ -276,8 +286,6 @@ for i, (lbl, v, fmt) in enumerate(sujet_rows): | ||
| 276 | 286 | c = donnee(ws, rr, 4, v, fmt, left=fmt is None) |
| 277 | 287 | if isinstance(v, str) and v.startswith("http"): |
| 278 | 288 | c.hyperlink = v; c.font = FONT_LINK |
| 279 | −# → D9 logements · D10 niveaux · D11 L · D12 P · D13 ép · D14 h étage · D15 h fond · D16 hors sol · D17 prof exc · D18 pente · D19 débords | |
| 280 | −# D20 empreinte · D21 périmètre · D22 aire chauffée · D23 aire brute hors sol · D24 sous-sol · D25 date | |
| 281 | 289 | R_T1 = {"log": 9, "niv": 10, "L": 11, "P": 12, "ep": 13, "h": 14, "hf": 15, "hs": 16, "exc": 17, "pente": 18, "deb": 19, "emp": 20, "per": 21, "ch": 22, "hsol": 23, "ss": 24, "date": 25} |
| 282 | 290 | |
| 283 | 291 | titre_section(ws, 29, 2, "Tableau 2 — Ce que les plans donnent, par niveau (Plan Studio UQO Éval, échelle 50 px/m)", 12) |
@@ -291,128 +299,116 @@ for i, pg in enumerate(PAGES): | ||
| 291 | 299 | ("ouvertures_aire", "0.00"), ("fenetres", "0"), ("portes", "0"), ("cloisons_long", "0.00"), ("cloisons_aire", "0.00")]): |
| 292 | 300 | donnee(ws, rr, 4 + j, pg[k], fmt) |
| 293 | 301 | bandes(ws, 31, 3, 2, 12) |
| 294 | −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 à 4) 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) | |
| 295 | 303 | R_T2 = {"ss": 31, "rdc": 32, "et": 33} |
| 296 | 304 | |
| 297 | −titre_section(ws, 36, 2, "Tableau 3 — Relevé des quantités généré par UQO Éval depuis les plans et la fiche (49 mesures « QS », metre-qs-1.0)", 14) | |
| 298 | −entetes(ws, 37, 2, ["No", "Poste", "", "Formule du relevé", "Quantité", "Unité", "Entrées de la formule"]) | |
| 299 | −ws.merge_cells("C37:D37"); ws.merge_cells("H37:N37") | |
| 300 | −for i, m in enumerate(RELEVE): | |
| 301 | − rr = 38 + i | |
| 302 | − donnee(ws, rr, 2, i + 1) | |
| 303 | − ws.merge_cells(start_row=rr, start_column=3, end_row=rr, end_column=4); donnee(ws, rr, 3, m["nom"], left=True) | |
| 304 | − donnee(ws, rr, 5, m["formule"], left=True) | |
| 305 | − donnee(ws, rr, 6, m["valeur"], "#,##0.00"); donnee(ws, rr, 7, m["unite"]) | |
| 306 | − ws.merge_cells(start_row=rr, start_column=8, end_row=rr, end_column=14); donnee(ws, rr, 8, m["entrees"].replace("_m2", " m²").replace("_m3", " m³").replace("_m=", " m=").replace("=", " = ").replace(",", " ;"), left=True) | |
| 307 | −bandes(ws, 38, len(RELEVE), 2, 13) | |
| 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) | |
| 306 | +entetes(ws, 37, 2, ["No", "Grandeur (relevé UQO Éval)", "", "Formule du relevé", "Valeur UQO Éval", "Unité"]) | |
| 307 | +ws.merge_cells("C37:D37") | |
| 308 | 308 | R_T3 = 38 |
| 309 | −r_fin_t3 = 38 + len(RELEVE) # 87 | |
| 310 | − | |
| 311 | −r0 = r_fin_t3 + 2 # 89 | |
| 312 | −titre_section(ws, r0, 2, "Tableau 4 — Les 64 lignes de la révision r1 : quantités du relevé, facteur d'ajustement, unité RSMeans et PRIX UNITAIRES NUS RSMeans 2026 T4 localisés Gatineau (C57)", 15) | |
| 313 | −entetes(ws, r0 + 1, 2, ["No", "Div.", "Poste", "Détail RSMeans", "Ligne RSMeans", "Quantité (relevé)", "Unité", "Facteur d'ajustement", "Unité RSMeans", "Matériaux ($/u)", "Main-d'œuvre ($/u)", "Équipement ($/u)", "Source du prix", "MO"]) | |
| 314 | −R_T4 = r0 + 2 # première ligne (91) | |
| 315 | −for i, L in enumerate(LIGNES): | |
| 309 | +for i, g in enumerate(GRANDEURS): | |
| 310 | + rr = R_T3 + i | |
| 311 | + donnee(ws, rr, 2, i + 1) | |
| 312 | + ws.merge_cells(start_row=rr, start_column=3, end_row=rr, end_column=4); donnee(ws, rr, 3, g["releve_nom"], left=True) | |
| 313 | + donnee(ws, rr, 5, g["libelle"].split(" = ", 1)[1] if " = " in g["libelle"] else "", left=True) | |
| 314 | + donnee(ws, rr, 6, g["releve_valeur"], "#,##0.00"); donnee(ws, rr, 7, g["releve_unite"]) | |
| 315 | +bandes(ws, R_T3, len(GRANDEURS), 2, 6) | |
| 316 | +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) | |
| 318 | + | |
| 319 | +r0 = r_fin_t3 + 2 | |
| 320 | +titre_section(ws, r0, 2, "Tableau 4 — Le bordereau en 22 composantes : quantités du relevé (unités SI) et PRIX COMPOSITES NUS par unité (matériaux, main-d'œuvre, équipement) dérivés des lignes RSMeans 2026 T4 localisées Gatineau (C57)", 15) | |
| 321 | +entetes(ws, r0 + 1, 2, ["No", "Div.", "Composante", "Ce qu'elle comprend", "Quantité (relevé)", "Unité", "Matériaux ($/u)", "Main-d'œuvre ($/u)", "Équipement ($/u)", "Lignes RSMeans sources"]) | |
| 322 | +R_T4 = r0 + 2 | |
| 323 | +for i, L in enumerate(COMPOSANTES): | |
| 316 | 324 | rr = R_T4 + i |
| 317 | − donnee(ws, rr, 2, L["no"]); donnee(ws, rr, 3, L["wbs"]); donnee(ws, rr, 4, L["poste"], left=True); donnee(ws, rr, 5, L["detail"], left=True) | |
| 318 | − donnee(ws, rr, 6, L["code"] or "—"); donnee(ws, rr, 7, L["qte"], "#,##0.00"); donnee(ws, rr, 8, CONVERSIONS[L["unite"]]["fr"]); donnee(ws, rr, 9, L["facteur"], "0.00") | |
| 319 | − donnee(ws, rr, 10, CONVERSIONS[L["unite"]]["rsm_fr"]); donnee(ws, rr, 11, L["mat"], FMT_N2); donnee(ws, rr, 12, L["mo"], FMT_N2); donnee(ws, rr, 13, L["eq"], FMT_N2) | |
| 320 | − donnee(ws, rr, 14, L["source"], left=True); donnee(ws, rr, 15, L["mo_type"]) | |
| 321 | −bandes(ws, R_T4, len(LIGNES), 2, 14) | |
| 322 | −r_fin_t4 = R_T4 + len(LIGNES) # 155 | |
| 323 | −note(ws, r_fin_t4, 2, "Prix NUS (bare costs) RSMeans : 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). Le facteur d'ajustement traduit une particularité du poste (LVL à 3 plis = × 3 ; fermes par pi² ≈ × 0,93 ; isolant R-50 = × 1,32 ; XPS deux couches = × 2 ; descentes ≈ × 0,35 ; membrane deux couches = × 2). MO : STD = syndiquée, RES = résidentielle (substituée par RSMeans quand la ligne n'existe qu'en résidentiel). Trois postes viennent du catalogue de prix observés d'UQO Éval (branchements, drainage, VRC).", 14) | |
| 324 | − | |
| 325 | −r0 = r_fin_t4 + 2 # 157 | |
| 326 | −titre_section(ws, r0, 2, "Tableau 5 — Conversion des unités du relevé (SI) vers les unités RSMeans (impériales)", 5) | |
| 327 | −entetes(ws, r0 + 1, 2, ["Unité du relevé", "Unité RSMeans", "Facteur (× quantité)", "Rappel"]) | |
| 328 | −R_T5 = r0 + 2 | |
| 329 | −for i, (k, cv) in enumerate(CONVERSIONS.items()): | |
| 330 | − rr = R_T5 + i | |
| 331 | − donnee(ws, rr, 2, cv["fr"]); donnee(ws, rr, 3, cv["rsm_fr"]); donnee(ws, rr, 4, cv["facteur"], "0.000000") | |
| 332 | − donnee(ws, rr, 5, {"m": "1 m = 3,28084 pi", "m2": "1 m² = 10,7639 pi²", "m3": "1 m³ = 1,30795 vg³", "unit": "unité = unité (Ea.)", "lump": "forfait (lump sum)"}[k], left=True) | |
| 333 | −bandes(ws, R_T5, 5, 2, 4) | |
| 334 | −r_fin_t5 = R_T5 + 5 | |
| 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, 6, L["qte"], "#,##0.00"); donnee(ws, rr, 7, L["unite"], left=True); donnee(ws, rr, 8, L["mat"], FMT_N2); donnee(ws, rr, 9, L["mo"], FMT_N2); donnee(ws, rr, 10, L["eq"], FMT_N2) | |
| 327 | + ws.merge_cells(start_row=rr, start_column=11, end_row=rr, end_column=14); donnee(ws, rr, 11, L["lignes"], left=True) | |
| 328 | + ws.row_dimensions[rr].height = 30 | |
| 329 | +bandes(ws, R_T4, NC, 2, 13) | |
| 330 | +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) | |
| 335 | 332 | |
| 336 | −r0 = r_fin_t5 + 1 | |
| 337 | −titre_section(ws, r0, 2, "Tableau 6 — Divisions MasterFormat présentes et coût direct nu par division selon la révision r1 ($)", 5) | |
| 333 | +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) | |
| 338 | 335 | entetes(ws, r0 + 1, 2, ["Code", "Division", "Direct nu r1 ($)", "Part (%)"]) |
| 339 | −R_T6 = r0 + 2 | |
| 340 | −DIVS = sorted(DIVISIONS) | |
| 336 | +R_T5 = r0 + 2 | |
| 337 | +DIVS = sorted(k for k in DIVISIONS if MOTEUR_QS['by_wbs_comp'].get(k)) | |
| 341 | 338 | for i, k in enumerate(DIVS): |
| 342 | − rr = R_T6 + i | |
| 343 | − donnee(ws, rr, 2, k); donnee(ws, rr, 3, DIVISIONS[k], left=True); donnee(ws, rr, 4, MOTEUR_QS["by_wbs"][k], FMT_D2); donnee(ws, rr, 5, MOTEUR_QS["by_wbs"][k] / MOTEUR_QS["direct_nu"], FMT_P1) | |
| 344 | −bandes(ws, R_T6, len(DIVS), 2, 4) | |
| 345 | −r_fin_t6 = R_T6 + len(DIVS) | |
| 339 | + rr = R_T5 + i | |
| 340 | + donnee(ws, rr, 2, k); donnee(ws, rr, 3, DIVISIONS[k], left=True); donnee(ws, rr, 4, MOTEUR_QS["by_wbs_comp"].get(k, 0), FMT_D2); donnee(ws, rr, 5, MOTEUR_QS["by_wbs_comp"].get(k, 0) / MOTEUR_QS["direct_nu"], FMT_P1) | |
| 341 | +bandes(ws, R_T5, len(DIVS), 2, 4) | |
| 342 | +r_fin_t5 = R_T5 + len(DIVS) | |
| 346 | 343 | |
| 347 | −r0 = r_fin_t6 + 1 | |
| 348 | −titre_section(ws, r0, 2, "Tableau 7 — Majorations appliquées par le moteur Quantity Survey d'UQO Éval (ordre d'application de la révision r1)", 5) | |
| 344 | +r0 = r_fin_t5 + 1 | |
| 345 | +titre_section(ws, r0, 2, "Tableau 6 — Majorations appliquées par le moteur Quantity Survey d'UQO Éval (ordre d'application de la révision r1)", 5) | |
| 349 | 346 | entetes(ws, r0 + 1, 2, ["Paramètre", "", "Valeur", "Note"]) |
| 350 | 347 | ws.merge_cells(start_row=r0 + 1, start_column=2, end_row=r0 + 1, end_column=3) |
| 351 | 348 | moteur_rows = [ |
| 352 | − ("Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval ($)", MOTEUR_QS["ajust_regional"], FMT_D2, "matériaux × 1,02, équipement × 1,01 (QC-GAT) ; les 61 lignes RSMeans sont déjà localisées"), | |
| 349 | + ("Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval ($)", MOTEUR_QS["ajust_regional"], FMT_D2, "matériaux × 1,02, équipement × 1,01 (QC-GAT) ; les lignes RSMeans sont déjà localisées"), | |
| 353 | 350 | ("Conditions générales du chantier (% des directs nus localisés)", MOTEUR_QS["cg_pct"], "0%", "mobilisation, gestion, clôtures, toilettes, nettoyage"), |
| 354 | 351 | ("Frais généraux de l'entrepreneur (% du cumul précédent)", MOTEUR_QS["fg_pct"], "0%", "bureau, assurances de l'entreprise, estimation"), |
| 355 | 352 | ("Profit de l'entrepreneur général (% du cumul précédent)", MOTEUR_QS["profit_pct"], "0%", "≠ profit entrepreneurial du promoteur (question 8)"), |
| 356 | 353 | ("Contingences de construction (% des directs nus localisés)", MOTEUR_QS["cont_pct"], "0%", "imprévus de chantier"), |
| 357 | − ("Total de la révision r1 (directs du cours + contingences) ($)", MOTEUR_QS["total"], FMT_D2, "à retrouver à la question 4 (± 25 $ d'arrondi)"), | |
| 354 | + ("Total de la révision r1 (directs du cours + contingences) ($)", MOTEUR_QS["total"], FMT_D2, "à retrouver à la question 4 (± 50 $ d'arrondi)"), | |
| 358 | 355 | ] |
| 359 | −R_T7 = r0 + 2 | |
| 356 | +R_T6 = r0 + 2 | |
| 360 | 357 | for i, (lbl, v, fmt, nt) in enumerate(moteur_rows): |
| 361 | − rr = R_T7 + i | |
| 358 | + rr = R_T6 + i | |
| 362 | 359 | ws.merge_cells(start_row=rr, start_column=2, end_row=rr, end_column=3) |
| 363 | 360 | donnee(ws, rr, 2, lbl, left=True); donnee(ws, rr, 4, v, fmt); donnee(ws, rr, 5, nt, left=True) |
| 364 | −bandes(ws, R_T7, len(moteur_rows), 2, 4) | |
| 365 | −# → D{R_T7} ajust · D+1 CG · D+2 FG · D+3 profit entr. · D+4 cont · D+5 total r1 | |
| 366 | −r_fin_t7 = R_T7 + len(moteur_rows) | |
| 361 | +bandes(ws, R_T6, len(moteur_rows), 2, 4) | |
| 362 | +r_fin_t6 = R_T6 + len(moteur_rows) | |
| 367 | 363 | |
| 368 | −r0 = r_fin_t7 + 1 | |
| 369 | −titre_section(ws, r0, 2, "Tableau 8 — Paramètres réels des coûts indirects, du profit, des taxes et des références (consultés le 29 octobre 2026)", 5) | |
| 364 | +r0 = r_fin_t6 + 1 | |
| 365 | +titre_section(ws, r0, 2, "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)", 5) | |
| 370 | 366 | entetes(ws, r0 + 1, 2, ["Paramètre", "", "Valeur", "Source"]) |
| 371 | 367 | ws.merge_cells(start_row=r0 + 1, start_column=2, end_row=r0 + 1, end_column=3) |
| 372 | −R_T8 = r0 + 2 | |
| 368 | +R_T7 = r0 + 2 | |
| 373 | 369 | SOURCES = ["Ville de Gatineau, règl. 501-2005, art. 104", "Ville de Gatineau, règl. 501-2005, art. 104", "Garantie de construction résidentielle, grille 2026", "convention du cours (séance 8)", |
| 374 | 370 | "convention du cours (séance 8)", "promoteur (notaire, arpenteur, administration)", "Banque du Canada 2,50 % le 28 oct. 2026 → préférentiel 4,70 % le 29 oct.", "prêts construction : préférentiel + 150 à 250 pb (convention : 205 pb)", |
| 375 | 371 | "échéancier du promoteur", "convention du cours (séance 8) : 10-12 % pour un locatif", "ARC", "Revenu Québec", "Altus, 2026 Canadian Cost Guide (23 avril 2026)", "Altus, 2026 Canadian Cost Guide", |
| 376 | 372 | "UQO Éval — TP1 (ventes de terrains vacants 2026 ÷ rôle 2024-2026)", "conversion"] |
| 377 | 373 | for i, (lbl, v, fmt) in enumerate(PARAMS): |
| 378 | − rr = R_T8 + i | |
| 374 | + rr = R_T7 + i | |
| 379 | 375 | ws.merge_cells(start_row=rr, start_column=2, end_row=rr, end_column=3) |
| 380 | 376 | donnee(ws, rr, 2, lbl, left=True); donnee(ws, rr, 4, v, fmt); donnee(ws, rr, 5, SOURCES[i], left=True) |
| 381 | −bandes(ws, R_T8, len(PARAMS), 2, 4) | |
| 382 | −PR = {k: R_T8 + i for i, k in enumerate(["permis", "permis_min", "gcr", "hono", "assur", "jurid", "pref", "prime", "duree", "profit", "tps", "tvq", "altus_lo", "altus_hi", "ratio", "pi2"])} | |
| 383 | −r_fin_t8 = R_T8 + len(PARAMS) | |
| 377 | +bandes(ws, R_T7, len(PARAMS), 2, 4) | |
| 378 | +PR = {k: R_T7 + i for i, k in enumerate(["permis", "permis_min", "gcr", "hono", "assur", "jurid", "pref", "prime", "duree", "profit", "tps", "tvq", "altus_lo", "altus_hi", "ratio", "pi2"])} | |
| 379 | +r_fin_t7 = R_T7 + len(PARAMS) | |
| 384 | 380 | |
| 385 | −r0 = r_fin_t8 + 1 | |
| 386 | −titre_section(ws, r0, 2, "Tableau 9 — Onze ventes RÉELLES de quadruplex neufs (construits 2021-2024) à Gatineau, 2024-2025 (Registre foncier ⋈ rôle 2024-2026, via UQO Éval)", 14) | |
| 381 | +r0 = r_fin_t7 + 1 | |
| 382 | +titre_section(ws, r0, 2, f"Tableau 8 — {NV} ventes RÉELLES de quadruplex neufs de 2 étages (construits 2021-2024) à Gatineau, 2024-2025 (Registre foncier ⋈ rôle 2024-2026, via UQO Éval)", 14) | |
| 387 | 383 | entetes(ws, r0 + 1, 2, ["No", "Adresse", "Secteur", "Date de vente", "Prix ($)", "Année de construction", "Aire d'étages au rôle (m²)", "Terrain (m²)", "Étages", "Lien physique", "Rôle — terrain ($)", "Rôle — bâtiment ($)", "Rôle — total ($)"]) |
| 388 | −R_T9 = r0 + 2 | |
| 389 | −for i, v in enumerate(VENTES): | |
| 390 | − rr = R_T9 + i | |
| 384 | +R_T8 = r0 + 2 | |
| 385 | +for i, v in enumerate(VTP): | |
| 386 | + rr = R_T8 + i | |
| 391 | 387 | donnee(ws, rr, 2, f"Q{i + 1}").font = Font(name="Calibri", size=11, bold=True, color=BLEU) |
| 392 | − donnee(ws, rr, 3, v["adresse"], left=True); donnee(ws, rr, 4, v["secteur"], left=True); donnee(ws, rr, 5, v["date"]); donnee(ws, rr, 6, v["prix"], "#,##0") | |
| 388 | + donnee(ws, rr, 3, v["adresse"], left=True); donnee(ws, rr, 4, v["secteur"].replace("Paroisse Saint-René (b", "Saint-René"), left=True); donnee(ws, rr, 5, v["date"]); donnee(ws, rr, 6, v["prix"], "#,##0") | |
| 393 | 389 | donnee(ws, rr, 7, v["annee"], "0"); donnee(ws, rr, 8, v["aire_etages"], "0.0"); donnee(ws, rr, 9, v["terrain"], "0.0"); donnee(ws, rr, 10, v["etages"], "0") |
| 394 | 390 | donnee(ws, rr, 11, v["lien"], left=True); donnee(ws, rr, 12, v["vt"], "#,##0"); donnee(ws, rr, 13, v["vb"], "#,##0"); donnee(ws, rr, 14, v["role"], "#,##0") |
| 395 | −bandes(ws, R_T9, len(VENTES), 2, 13) | |
| 396 | −r_fin_t9 = R_T9 + len(VENTES) | |
| 397 | −note(ws, r_fin_t9, 2, "Aire d'étages au rôle = superficie hors sol des étages (sous-sol exclu) ; dans ces quadruplex, deux des quatre logements occupent généralement le rez-de-jardin (sous-sol aménagé). Rôle 2024-2026, conditions du marché au 1er juillet 2022. Q11 (1151, rue Notre-Dame) : vente de mai 2024 d'un immeuble livré en 2024 (photo dans l'énoncé).", 13) | |
| 391 | +bandes(ws, R_T8, NV, 2, 13) | |
| 392 | +r_fin_t8 = R_T8 + NV | |
| 393 | +note(ws, r_fin_t8, 2, "Aire d'étages au rôle = superficie hors sol des étages (sous-sol exclu) ; dans ces quadruplex, deux des quatre logements occupent généralement le rez-de-jardin (sous-sol aménagé). Rôle 2024-2026, conditions du marché au 1er juillet 2022. Q8 (1151, rue Notre-Dame) : vente de mai 2024 d'un immeuble livré en 2024 (photo dans l'énoncé).", 13) | |
| 398 | 394 | |
| 399 | −r0 = r_fin_t9 + 2 | |
| 400 | −titre_section(ws, r0, 2, "Tableau 10 — Deux quadruplex de 2020 EN VIGUEUR à Gatineau (prix demandés réels, copie Immo-Ka du 29 octobre 2026)", 14) | |
| 395 | +r0 = r_fin_t8 + 2 | |
| 396 | +titre_section(ws, r0, 2, "Tableau 9 — Deux quadruplex de 2020 EN VIGUEUR à Gatineau (prix demandés réels, copie Immo-Ka du 29 octobre 2026) — lecture seulement", 14) | |
| 401 | 397 | entetes(ws, r0 + 1, 2, ["No", "Adresse", "Secteur", "Prix demandé ($)", "Aire habitable (pi²)", "Aire d'étages au rôle (m²)", "Terrain (m²)", "Étages", "Revenus bruts ($/an)", "Rôle — terrain ($)", "Rôle — bâtiment ($)", "Rôle — total ($)", "Description (fiche du courtier)"]) |
| 402 | −R_T10 = r0 + 2 | |
| 398 | +R_T9 = r0 + 2 | |
| 403 | 399 | for i, a in enumerate(ANNONCES): |
| 404 | − rr = R_T10 + i | |
| 400 | + rr = R_T9 + i | |
| 405 | 401 | donnee(ws, rr, 2, f"A{i + 1}").font = Font(name="Calibri", size=11, bold=True, color=BLEU) |
| 406 | 402 | donnee(ws, rr, 3, a["adresse"], left=True); donnee(ws, rr, 4, a["secteur"], left=True); donnee(ws, rr, 5, a["prix"], "#,##0"); donnee(ws, rr, 6, a["aire_pi2"], "#,##0") |
| 407 | 403 | donnee(ws, rr, 7, a["aire_etages"], "0.0"); donnee(ws, rr, 8, a["terrain"], "0.0"); donnee(ws, rr, 9, a["etages"], "0"); donnee(ws, rr, 10, a["revenus"], "#,##0") |
| 408 | 404 | donnee(ws, rr, 11, a["vt"], "#,##0"); donnee(ws, rr, 12, a["vb"], "#,##0"); donnee(ws, rr, 13, a["role"], "#,##0") |
| 409 | 405 | lk = donnee(ws, rr, 14, a["desc"], left=True); lk.hyperlink = f"https://www.uqo-eval.app/a-vendre/{a['uid']}"; lk.font = FONT_LINK |
| 410 | 406 | ws.row_dimensions[rr].height = 30 |
| 411 | −bandes(ws, R_T10, 2, 2, 13) | |
| 412 | −r_fin_t10 = R_T10 + 2 | |
| 407 | +bandes(ws, R_T9, 2, 2, 13) | |
| 408 | +r_fin_t9 = R_T9 + 2 | |
| 413 | 409 | |
| 414 | −r0 = r_fin_t10 + 1 | |
| 415 | −titre_section(ws, r0, 2, "Tableau 11 — Estimation du moteur de coût d'UQO Éval pour le même programme (méthode par composantes, prix observés Canac/BMR/Patrick Morin + APCHQ, 29 octobre 2026)", 14) | |
| 410 | +r0 = r_fin_t9 + 1 | |
| 411 | +titre_section(ws, r0, 2, "Tableau 10 — Estimation du moteur de coût d'UQO Éval pour le même programme (méthode par composantes, prix observés Canac/BMR/Patrick Morin + APCHQ, 29 octobre 2026)", 14) | |
| 416 | 412 | entetes(ws, r0 + 1, 2, ["Paramètre", "", "Valeur", "Note"]) |
| 417 | 413 | ws.merge_cells(start_row=r0 + 1, start_column=2, end_row=r0 + 1, end_column=3) |
| 418 | 414 | MC = MOTEUR_COUT |
@@ -422,128 +418,106 @@ mc_rows = [("Coût de remplacement neuf (RCN) du moteur ($)", MC["rcn"], FMT_D, | ||
| 422 | 418 | ("RCN par pi² ($/pi²)", MC["per_sqft"], FMT_PSF, ""), ("Coûts directs du moteur ($)", MC["direct"], FMT_D, "matériaux + main-d'œuvre + équipement"), |
| 423 | 419 | ("Coûts indirects du moteur ($)", MC["indirect"], FMT_D, "plans 3 %, permis 0,8 %, inspection 0,5 %, assurances 1,5 %, mobilisation 1,5 %, gestion 3 %, financement 2 %, administration 1 %"), |
| 424 | 420 | ("Indice de confiance", MC["confiance"], None, "43 % des matériaux sur prix observés, le reste sur prix de référence")] |
| 425 | −R_T11 = r0 + 2 | |
| 421 | +R_T10 = r0 + 2 | |
| 426 | 422 | for i, (lbl, v, fmt, nt) in enumerate(mc_rows): |
| 427 | − rr = R_T11 + i | |
| 423 | + rr = R_T10 + i | |
| 428 | 424 | ws.merge_cells(start_row=rr, start_column=2, end_row=rr, end_column=3) |
| 429 | 425 | donnee(ws, rr, 2, lbl, left=True); donnee(ws, rr, 4, v, fmt); ws.merge_cells(start_row=rr, start_column=5, end_row=rr, end_column=9); donnee(ws, rr, 5, nt, left=True) |
| 430 | −bandes(ws, R_T11, len(mc_rows), 2, 3) | |
| 431 | −r_fin_t11 = R_T11 + len(mc_rows) | |
| 432 | −entetes(ws, r_fin_t11 + 1, 2, ["Catégorie du moteur", "", "Montant ajusté ($)", "Part (%)"]) | |
| 433 | −ws.merge_cells(start_row=r_fin_t11 + 1, start_column=2, end_row=r_fin_t11 + 1, end_column=3) | |
| 434 | −R_T11b = r_fin_t11 + 2 | |
| 426 | +bandes(ws, R_T10, len(mc_rows), 2, 3) | |
| 427 | +r_fin_t10 = R_T10 + len(mc_rows) | |
| 428 | +entetes(ws, r_fin_t10 + 1, 2, ["Catégorie du moteur", "", "Montant ajusté ($)", "Part (%)"]) | |
| 429 | +ws.merge_cells(start_row=r_fin_t10 + 1, start_column=2, end_row=r_fin_t10 + 1, end_column=3) | |
| 430 | +R_T10b = r_fin_t10 + 2 | |
| 435 | 431 | for i, (lbl, amt, pct) in enumerate(MC["categories"]): |
| 436 | − rr = R_T11b + i | |
| 432 | + rr = R_T10b + i | |
| 437 | 433 | ws.merge_cells(start_row=rr, start_column=2, end_row=rr, end_column=3) |
| 438 | 434 | donnee(ws, rr, 2, lbl, left=True); donnee(ws, rr, 4, amt, "#,##0"); donnee(ws, rr, 5, pct / 100, FMT_P1) |
| 439 | −bandes(ws, R_T11b, len(MC["categories"]), 2, 3) | |
| 435 | +bandes(ws, R_T10b, len(MC["categories"]), 2, 3) | |
| 440 | 436 | finir_feuille(ws, BLEU_CLAIR, zoom=100, titre="Données réelles UQO Éval") |
| 441 | −DN = {"T1": R_T1, "T2": R_T2, "T3": R_T3, "T4": R_T4, "T5": R_T5, "T6": R_T6, "T7": R_T7, "PR": PR, "T9": R_T9, "T10": R_T10, "T11": R_T11, "T11b": R_T11b} | |
| 437 | +DN = {"T1": R_T1, "T2": R_T2, "T3": R_T3, "T4": R_T4, "T5": R_T5, "T6": R_T6, "PR": PR, "T8": R_T8, "T9": R_T9, "T10": R_T10, "T10b": R_T10b} | |
| 442 | 438 | |
| 443 | 439 | # ============================================================================== |
| 444 | 440 | # 3. RELEVÉ (Q1, Q2, Q3) |
| 445 | 441 | # ============================================================================== |
| 446 | 442 | ws = wb.create_sheet("Relevé") |
| 447 | −preparer_feuille(ws, {"B": 6, "C": 8, "D": 30, "E": 36, "F": 13, "G": 12, "H": 9, "I": 9, "J": 10, "K": 12, "L": 13, "M": 11, "N": 11, "O": 11, "P": 12, "Q": 14}) | |
| 448 | −bandeau(ws, "Relevé des quantités et tarification RSMeans — Questions 1, 2 et 3", | |
| 449 | − "Du plan aux quantités, des quantités aux coûts directs nus · PAR FORMULE dans les cellules jaunes", ncols=16) | |
| 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 | +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) | |
| 450 | 446 | ws.freeze_panes = "A5" |
| 451 | −titre_section(ws, 4, 2, "Question 1 — Méthode d'estimation du coût et nature du coût estimé (C5)", 16) | |
| 452 | −zone(ws, "C5", 4, 8, "Pourquoi le relevé des quantités (quantity survey) ici ? Que valent les trois autres méthodes (comparative $/pi², composantes, 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)…") | |
| 447 | +titre_section(ws, 4, 2, "Question 1 — Méthode d'estimation du coût et nature du coût estimé (C5)", 11) | |
| 448 | +zone(ws, "C5", 4, 8, "Pourquoi un bordereau par composantes issu d'un relevé ici ? Que valent les trois autres méthodes (comparative $/pi², relevé détaillé, indexée) pour ce mandat ? Pourquoi un projet neuf est-il par définition un coût de REMPLACEMENT ? Quelles limites (plan générique, prix publiés) ? (6-9 lignes)…") | |
| 453 | 449 | |
| 454 | −titre_section(ws, 10, 2, "Question 2 — Du plan au relevé des quantités : reproduisez par formule 12 grandeurs du relevé d'UQO Éval (F16:F27), puis l'écart avec la valeur de la plateforme (H16:H27)", 16) | |
| 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) | |
| 455 | 451 | etiquette(ws, 11, 4, "Entrées liées (ne pas modifier)", bold=True) |
| 456 | 452 | entetes(ws, 11, 5, ["Ouvertures extérieures hors sol (m²)", "Cloisons hors sol (m²)", "Aire des pièces hors sol (m²)"], height=30) |
| 457 | 453 | lien(ws, "E12", f"=Données!I{R_T2['rdc']}+Données!I{R_T2['et']}", "0.00") |
| 458 | 454 | lien(ws, "F12", f"=Données!M{R_T2['rdc']}+Données!M{R_T2['et']}", "0.00") |
| 459 | 455 | lien(ws, "G12", f"=Données!D{R_T2['rdc']}+Données!D{R_T2['et']}", "0.00") |
| 460 | −note(ws, 13, 4, "Les dimensions du projet sont dans Données!D11:D24 (longueur et profondeur à l'axe, épaisseur, hauteurs, profondeur d'excavation, facteurs de toit). Les formules du relevé d'UQO Éval sont lisibles dans Données, tableau 3.", 10) | |
| 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) | |
| 461 | 457 | entetes(ws, 15, 2, ["No", "", "Grandeur", "Formule attendue (lecture du relevé UQO Éval)", "Votre calcul", "Valeur UQO Éval — lien", "Écart (%)"]) |
| 462 | 458 | ws.merge_cells("B15:C15") |
| 463 | −GRANDEURS = [ | |
| 464 | − ("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)"), | |
| 465 | − ("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)"), | |
| 466 | − ("Excavation (m³) = (empreinte + 0,9 × périmètre) × profondeur", "(199,02 + 0,9 × 57,4) × 2,6", "Excavation", "=(F16+0.9*F17)*Données!D17"), | |
| 467 | − ("Remblai (m³) = périmètre × 0,9 × (profondeur − 0,3)", "57,4 × 0,9 × (2,6 − 0,3)", "Remblai", "=F17*0.9*(Données!D17-0.3)"), | |
| 468 | − ("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"), | |
| 469 | − ("Membrane d'étanchéité (m²) = périmètre × (hauteur − partie hors sol)", "57,4 × (2,44 − 0,30)", "Membrane d'étanchéité des fondations", "=F17*(Données!D15-Données!D16)"), | |
| 470 | − ("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"), | |
| 471 | − ("Murs extérieurs nets (m²) = bruts − ouvertures hors sol", "280,11 − 63,36", "Isolation des murs extérieurs R-24", "=F22-E12"), | |
| 472 | − ("Surface de toit (m²) = empreinte × facteur de pente × débords", "199,02 × 1,00 × 1,10", "Couverture", "=F16*Données!D18*Données!D19"), | |
| 473 | − ("Planchers portés (m²) = Σ aires des pièces hors sol", "176,40 + 176,40", "Planchers portés (solives)", "=G12"), | |
| 474 | − ("Gypse ½ po murs (m²) = murs ext. nets + 2 × cloisons", "216,75 + 2 × 292,31", "Gypse ½ po murs (face intérieure des murs ext. + 2 faces des cloisons)", "=F23+2*F12"), | |
| 475 | − ("Peinture (m²) = gypse murs + gypse plafonds (= aires des pièces)", "801,38 + 352,81", "Peinture 2 couches (murs + plafonds)", "=F26+G12"), | |
| 476 | −] | |
| 477 | −NOM_REL = {m['nom']: i for i, m in enumerate(RELEVE)} | |
| 478 | −for i, (lbl, hint, nom_rel, f) in enumerate(GRANDEURS): | |
| 479 | − no_rel = NOM_REL[nom_rel] + 1 | |
| 459 | +for i, g in enumerate(GRANDEURS): | |
| 480 | 460 | rr = 16 + i |
| 481 | 461 | ws.merge_cells(start_row=rr, start_column=2, end_row=rr, end_column=3) |
| 482 | 462 | 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 |
| 483 | − etiquette(ws, rr, 4, lbl, bold=True) | |
| 484 | − e = ws.cell(row=rr, column=5, value=hint); e.font = FONT_NOTE; e.alignment = WRAP; e.border = BORDER_LIGHT; e.fill = FILL_CLAIR | |
| 485 | − rep(ws, f"F{rr}", num_fmt="#,##0.00", comment=(f + " (formule attendue ; adaptez les références si vous changez de ligne)") if i < 3 else None) | |
| 486 | − lien(ws, f"G{rr}", f"=Données!F{R_T3 + no_rel - 1}", "#,##0.00") | |
| 463 | + etiquette(ws, rr, 4, g["libelle"], bold=True) | |
| 464 | + e = ws.cell(row=rr, column=5, value=g["indice"]); e.font = FONT_NOTE; e.alignment = WRAP; e.border = BORDER_LIGHT; e.fill = FILL_CLAIR | |
| 465 | + rep(ws, f"F{rr}", num_fmt="#,##0.00", comment=(g["formule"] + " (formule attendue)") if i < 3 else None) | |
| 466 | + lien(ws, f"G{rr}", f"=Données!F{R_T3 + i}", "#,##0.00") | |
| 487 | 467 | rep(ws, f"H{rr}", num_fmt="0.00%", comment="=F16/G16-1" if i == 0 else None) |
| 488 | 468 | ws.row_dimensions[rr].height = 26 |
| 489 | −# ⚠ colonnes : E = formule attendue (texte), F = votre calcul, G = valeur UQO Éval, H = écart → l'énoncé cite F16:F27 et H16:H27 | |
| 490 | −ws.conditional_formatting.add("H16:H27", FormulaRule(formula=['ABS(H16)>0.005'], fill=PatternFill("solid", fgColor="FFC7CE"))) | |
| 491 | −ws.conditional_formatting.add("H16:H27", FormulaRule(formula=['AND(H16<>"",ABS(H16)<=0.005)'], fill=PatternFill("solid", fgColor="C6EFCE"))) | |
| 492 | − | |
| 493 | −titre_section(ws, 30, 2, "Question 3 — Tarification RSMeans des 64 lignes : conversion d'unités (K), quantité RSMeans (L), coût unitaire nu (P), montant (Q), puis totaux et sous-totaux par division", 16) | |
| 494 | −entetes(ws, 31, 2, ["No", "Div.", "Poste — lien", "Détail RSMeans — lien", "Quantité (relevé)", "Unité", "Facteur", "Unité RSMeans", "", "a) Facteur de conversion (RECHERCHEV)", "b) Quantité RSMeans = qté × facteur × conversion", "Matériaux ($/u)", "MO ($/u)", "Équip. ($/u)", "c) Coût unitaire nu ($/u)", "d) Montant ($)"], height=44) | |
| 495 | −ws.merge_cells("I31:J31") | |
| 496 | −for i, L in enumerate(LIGNES): | |
| 497 | − rr = 32 + i | |
| 469 | +R_G1 = 16 + len(GRANDEURS) - 1 # 22 | |
| 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=['AND(H16<>"",ABS(H16)<=0.005)'], fill=PatternFill("solid", fgColor="C6EFCE"))) | |
| 472 | + | |
| 473 | +titre_section(ws, R_C0 - 2, 2, f"Question 3 — Bordereau des 22 composantes : coût unitaire nu (K), montant (L), puis totaux, sous-totaux par division et postes les plus lourds", 11) | |
| 474 | +entetes(ws, R_C0 - 1, 2, ["No", "Div.", "Composante — lien", "Ce qu'elle comprend — lien", "Quantité (relevé)", "Unité", "Matériaux ($/u)", "MO ($/u)", "Équip. ($/u)", "a) Coût unitaire nu ($/u)", "b) Montant ($)"], height=40) | |
| 475 | +for i, L in enumerate(COMPOSANTES): | |
| 476 | + rr = R_C0 + i | |
| 498 | 477 | dr = R_T4 + i |
| 499 | 478 | lien(ws, f"B{rr}", f"=Données!B{dr}"); lien(ws, f"C{rr}", f"=Données!C{dr}") |
| 500 | 479 | lien(ws, f"D{rr}", f"=Données!D{dr}", left=True, font=Font(name="Calibri", size=9, color="333333")) |
| 501 | 480 | lien(ws, f"E{rr}", f"=Données!E{dr}", left=True, font=Font(name="Calibri", size=8, color=GRIS)) |
| 502 | − lien(ws, f"F{rr}", f"=Données!G{dr}", "#,##0.00"); lien(ws, f"G{rr}", f"=Données!H{dr}"); lien(ws, f"H{rr}", f"=Données!I{dr}", "0.00") | |
| 503 | − ws.merge_cells(start_row=rr, start_column=9, end_row=rr, end_column=10); lien(ws, f"I{rr}", f"=Données!J{dr}") | |
| 504 | − rep(ws, f"K{rr}", num_fmt="0.000000", comment=f"=VLOOKUP(G32,Données!$B${R_T5}:$D${R_T5 + 4},3,FALSE) (RECHERCHEV en français : clé = unité du relevé, table 5 de Données)" if i == 0 else None) | |
| 505 | − rep(ws, f"L{rr}", num_fmt="#,##0.00", comment="=F32*H32*K32" if i == 0 else None) | |
| 506 | − lien(ws, f"M{rr}", f"=Données!K{dr}", FMT_N2); lien(ws, f"N{rr}", f"=Données!L{dr}", FMT_N2); lien(ws, f"O{rr}", f"=Données!M{dr}", FMT_N2) | |
| 507 | − rep(ws, f"P{rr}", num_fmt=FMT_N2, comment="=M32+N32+O32" if i == 0 else None) | |
| 508 | − rep(ws, f"Q{rr}", num_fmt=FMT_D2, comment="=L32*P32" if i == 0 else None) | |
| 509 | − ws.row_dimensions[rr].height = 24 | |
| 510 | −R_L0, R_L1 = 32, 32 + len(LIGNES) - 1 # 32..95 | |
| 511 | −etiquette(ws, 96, 4, "e) COÛT DIRECT NU TOTAL ($) — somme des 64 montants", bold=True); ws.merge_cells("D96:P96") | |
| 512 | −rep(ws, "Q96", num_fmt=FMT_D2, comment=f"=SUM(Q{R_L0}:Q{R_L1})") | |
| 513 | −etiquette(ws, 98, 2, "f) Montant total des matériaux ($)", bold=True); ws.merge_cells("B98:D98"); rep(ws, "E98", num_fmt=FMT_D2, comment=f"=SUMPRODUCT(L{R_L0}:L{R_L1},M{R_L0}:M{R_L1}) (SOMMEPROD)") | |
| 514 | −etiquette(ws, 99, 2, "f) Montant total de la main-d'œuvre ($)", bold=True); ws.merge_cells("B99:D99"); rep(ws, "E99", num_fmt=FMT_D2, comment=f"=SUMPRODUCT(L{R_L0}:L{R_L1},N{R_L0}:N{R_L1})") | |
| 515 | −etiquette(ws, 100, 2, "f) Montant total de l'équipement ($)", bold=True); ws.merge_cells("B100:D100"); rep(ws, "E100", num_fmt=FMT_D2, comment=f"=SUMPRODUCT(L{R_L0}:L{R_L1},O{R_L0}:O{R_L1})") | |
| 516 | −etiquette(ws, 101, 2, "f) Part de la main-d'œuvre dans le direct nu (%)", bold=True); ws.merge_cells("B101:D101"); rep(ws, "E101", num_fmt=FMT_P1, comment="=E99/Q96") | |
| 517 | −note(ws, 102, 2, "Contrôle : E98 + E99 + E100 doit redonner Q96 à quelques dollars près (arrondis des quantités).", 10) | |
| 518 | − | |
| 519 | −titre_section(ws, 103, 2, "g) Sous-totaux par division MasterFormat (SOMME.SI / SUMIF sur la colonne C) et part de chaque division ; h) les trois postes les plus lourds", 16) | |
| 520 | −entetes(ws, 104, 2, ["Code — lien", "Division — lien", "", "g) Direct nu de la division ($)", "g) Part (%)", "Révision r1 — lien ($)", "Écart"]) | |
| 521 | −ws.merge_cells("C104:D104") | |
| 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"H{rr}", f"=Données!H{dr}", FMT_N2); lien(ws, f"I{rr}", f"=Données!I{dr}", FMT_N2); lien(ws, f"J{rr}", f"=Données!J{dr}", FMT_N2) | |
| 483 | + rep(ws, f"K{rr}", num_fmt=FMT_N2, comment=f"=H{R_C0}+I{R_C0}+J{R_C0}" if i == 0 else None) | |
| 484 | + rep(ws, f"L{rr}", num_fmt=FMT_D2, comment=f"=F{R_C0}*K{R_C0}" if i == 0 else None) | |
| 485 | + ws.row_dimensions[rr].height = 30 | |
| 486 | +etiquette(ws, R_CT, 4, "c) COÛT DIRECT NU TOTAL ($) — somme des 22 montants", bold=True); ws.merge_cells(f"D{R_CT}:K{R_CT}") | |
| 487 | +rep(ws, f"L{R_CT}", num_fmt=FMT_D2, comment=f"=SUM(L{R_C0}:L{R_C1})") | |
| 488 | +for k, (lbl, cm, fmt) in enumerate([("d) Montant total des matériaux ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},H{R_C0}:H{R_C1}) (SOMMEPROD)", FMT_D2), | |
| 489 | + ("d) Montant total de la main-d'œuvre ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},I{R_C0}:I{R_C1})", FMT_D2), | |
| 490 | + ("d) Montant total de l'équipement ($)", f"=SUMPRODUCT(F{R_C0}:F{R_C1},J{R_C0}:J{R_C1})", FMT_D2), | |
| 491 | + ("d) Part de la main-d'œuvre dans le direct nu (%)", f"=E{R_MAT + 1}/L{R_CT}", FMT_P1)]): | |
| 492 | + rr = R_MAT + k | |
| 493 | + etiquette(ws, rr, 2, lbl, bold=True); ws.merge_cells(f"B{rr}:D{rr}"); rep(ws, f"E{rr}", num_fmt=fmt, comment=cm) | |
| 494 | +note(ws, R_MAT + 4, 2, f"Contrôle : E{R_MAT} + E{R_MAT + 1} + E{R_MAT + 2} doit redonner L{R_CT} à quelques dollars près (arrondis des prix composites).", 10) | |
| 495 | + | |
| 496 | +titre_section(ws, R_DH - 1, 2, "e) Sous-totaux par division MasterFormat (SOMME.SI / SUMIF sur la colonne C) et part de chaque division ; f) les trois composantes les plus lourdes", 11) | |
| 497 | +entetes(ws, R_DH, 2, ["Code — lien", "Division — lien", "", "e) Direct nu de la division ($)", "e) Part (%)", "Révision r1 — lien ($)", "Écart"]) | |
| 498 | +ws.merge_cells(f"C{R_DH}:D{R_DH}") | |
| 522 | 499 | for i, k in enumerate(DIVS): |
| 523 | − rr = 105 + i | |
| 524 | − lien(ws, f"B{rr}", f"=Données!B{R_T6 + i}") | |
| 525 | − 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_T6 + i}", left=True) | |
| 526 | − rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f'=SUMIF($C${R_L0}:$C${R_L1},B105,$Q${R_L0}:$Q${R_L1}) (SOMME.SI ; le code est un texte « 03 »)' if i == 0 else None) | |
| 527 | − rep(ws, f"F{rr}", num_fmt=FMT_P1, comment="=E105/$Q$96" if i == 0 else None) | |
| 528 | − lien(ws, f"G{rr}", f"=Données!D{R_T6 + i}", FMT_D2) | |
| 529 | − lien(ws, f"H{rr}", f'=IF(E{rr}="","—",IF(ABS(E{rr}-G{rr})<=5,"✓","≠"))') | |
| 530 | −R_D0, R_D1 = 105, 105 + len(DIVS) - 1 # 105..117 | |
| 500 | + rr = R_D0 + i | |
| 501 | + 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) | |
| 503 | + rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f'=SUMIF($C${R_C0}:$C${R_C1},B{R_D0},$L${R_C0}:$L${R_C1}) (SOMME.SI ; le code est un texte « 03 »)' if i == 0 else None) | |
| 504 | + rep(ws, f"F{rr}", num_fmt=FMT_P1, comment=f"=E{R_D0}/$L${R_CT}" if i == 0 else None) | |
| 505 | + 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,"✓","≠"))') | |
| 531 | 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)) |
| 532 | 508 | ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="≠"'], fill=PatternFill("solid", fgColor="FFC7CE"))) |
| 533 | 509 | ws.conditional_formatting.add(f"H{R_D0}:H{R_D1}", FormulaRule(formula=[f'H{R_D0}="✓"'], fill=PatternFill("solid", fgColor="C6EFCE"))) |
| 534 | −etiquette(ws, R_D1 + 1, 2, "Total des divisions (contrôle = Q96)", bold=True); ws.merge_cells(start_row=R_D1 + 1, start_column=2, end_row=R_D1 + 1, end_column=4) | |
| 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) | |
| 535 | 511 | lien(ws, f"E{R_D1 + 1}", f"=SUM(E{R_D0}:E{R_D1})", FMT_D2) |
| 536 | −r_top = R_D1 + 3 # 120 | |
| 537 | −entetes(ws, r_top, 2, ["Rang", "h) Poste (INDEX/EQUIV)", "", "h) Montant ($) (GRANDE.VALEUR)"]) | |
| 538 | −ws.merge_cells(start_row=r_top, start_column=3, end_row=r_top, end_column=4) | |
| 512 | +entetes(ws, R_TOP - 1, 2, ["Rang", "f) Composante (INDEX/EQUIV)", "", "f) Montant ($) (GRANDE.VALEUR)"]) | |
| 513 | +ws.merge_cells(start_row=R_TOP - 1, start_column=3, end_row=R_TOP - 1, end_column=4) | |
| 539 | 514 | for i in range(3): |
| 540 | − rr = r_top + 1 + i | |
| 515 | + rr = R_TOP + i | |
| 541 | 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 |
| 542 | 517 | ws.merge_cells(start_row=rr, start_column=3, end_row=rr, end_column=4) |
| 543 | − rep(ws, f"C{rr}", comment=f"=INDEX($D${R_L0}:$D${R_L1},MATCH(E{rr},$Q${R_L0}:$Q${R_L1},0)) (INDEX / EQUIV)" if i == 0 else None) | |
| 544 | − rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f"=LARGE($Q${R_L0}:$Q${R_L1},B{rr}) (GRANDE.VALEUR)" if i == 0 else None) | |
| 545 | −R_TOP = r_top + 1 # 121..123 | |
| 546 | −finir_feuille(ws, OR, zoom=100, titre="Relevé et tarification — questions 1 à 3") | |
| 518 | + rep(ws, f"C{rr}", comment=f"=INDEX($D${R_C0}:$D${R_C1},MATCH(E{rr},$L${R_C0}:$L${R_C1},0)) (INDEX / EQUIV)" if i == 0 else None) | |
| 519 | + rep(ws, f"E{rr}", num_fmt=FMT_D2, comment=f"=LARGE($L${R_C0}:$L${R_C1},B{rr}) (GRANDE.VALEUR)" if i == 0 else None) | |
| 520 | +finir_feuille(ws, OR, zoom=100, titre="Relevé et composantes — questions 1 à 3") | |
| 547 | 521 | |
| 548 | 522 | # ============================================================================== |
| 549 | 523 | # 4. BORDEREAU (Q4–Q8) |
@@ -554,7 +528,7 @@ bandeau(ws, "Bordereau de coût de remplacement neuf — Questions 4 à 8", | ||
| 554 | 528 | "Chaîne complète : directs nus → directs du cours → contingences → indirects réels → profit entrepreneurial → coût total → unités de comparaison. Tout par formule.", ncols=3) |
| 555 | 529 | ws.freeze_panes = "A5" |
| 556 | 530 | pr = lambda k: f"Données!$D${PR[k]}" |
| 557 | −mq = lambda i: f"Données!$D${R_T7 + i}" | |
| 531 | +mq = lambda i: f"Données!$D${R_T6 + i}" | |
| 558 | 532 | |
| 559 | 533 | |
| 560 | 534 | def ligne(r, label, kind, fmt=FMT_D2, bold=False, hint="", formula=None, comment=None): |
@@ -570,8 +544,8 @@ def ligne(r, label, kind, fmt=FMT_D2, bold=False, hint="", formula=None, comment | ||
| 570 | 544 | ws.row_dimensions[r].height = 24 |
| 571 | 545 | |
| 572 | 546 | |
| 573 | −sous_titre(ws, 6, "Question 4 — Des coûts nus du relevé aux coûts directs au sens du cours, puis contingences (lignes 7 à 16)", 2, 4) | |
| 574 | −ligne(7, "Coûts directs nus du relevé RSMeans — lien (Relevé!Q96)", "calc", formula="=Relevé!Q96") | |
| 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) | |
| 548 | +ligne(7, f"Coûts directs nus des 22 composantes — lien (Relevé!L{R_CT})", "calc", formula=f"=Relevé!L{R_CT}") | |
| 575 | 549 | ligne(8, "Ajustement régional Gatineau sur les 3 postes du catalogue UQO Éval — lien", "calc", formula=f"={mq(0)}") |
| 576 | 550 | ligne(9, "a) Coûts directs nus localisés", "rep", comment="=C7+C8") |
| 577 | 551 | ligne(10, "b) Conditions générales du chantier (8 % des directs nus localisés)", "rep", comment=f"=C9*{mq(1)}") |
@@ -581,7 +555,7 @@ ligne(13, "e) COÛTS DIRECTS AU SENS DU COURS (a + b + c + d)", "rep", bold=True | ||
| 581 | 555 | ligne(14, "f) Contingences de construction (5 % des directs nus localisés)", "rep", comment=f"=C9*{mq(4)}") |
| 582 | 556 | ligne(15, "g) DIRECTS + CONTINGENCES", "rep", bold=True, comment="=C13+C14") |
| 583 | 557 | ligne(16, "Contrôle : total de la révision r1 d'UQO Éval — lien", "calc", formula=f"={mq(5)}") |
| 584 | −ck = ws["D16"]; ck.value = '=IF(C15="","",IF(ABS(C15-C16)<=25,"✓ vous retrouvez la révision r1 (± 25 $ d\'arrondi)","≠ revoir la chaîne (ordre des majorations)"))'; ck.font = FONT_H2; ck.alignment = WRAP | |
| 558 | +ck = ws["D16"]; ck.value = '=IF(C15="","",IF(ABS(C15-C16)<=50,"✓ vous retrouvez la révision r1 (± 50 $ d\'arrondi)","≠ revoir la chaîne (ordre des majorations)"))'; ck.font = FONT_H2; ck.alignment = WRAP | |
| 585 | 559 | ws.conditional_formatting.add("D16", FormulaRule(formula=['LEFT($D$16,1)="✓"'], fill=PatternFill("solid", fgColor="C6EFCE"))) |
| 586 | 560 | ws.conditional_formatting.add("D16", FormulaRule(formula=['LEFT($D$16,1)="≠"'], fill=PatternFill("solid", fgColor="FFC7CE"))) |
| 587 | 561 | |
@@ -627,11 +601,13 @@ finir_feuille(ws, OR, zoom=100, landscape=False, titre="Bordereau — questions | ||
| 627 | 601 | ws = wb.create_sheet("Marché") |
| 628 | 602 | preparer_feuille(ws, {"B": 6, "C": 30, "D": 12, "E": 13, "F": 8, "G": 11, "H": 13, "I": 13, "J": 15, "K": 15, "L": 13, "M": 14, "N": 12}) |
| 629 | 603 | bandeau(ws, "Validation par le marché — Question 9", |
| 630 | − "Onze ventes réelles de quadruplex neufs, moteur de coût d'UQO Éval, fourchette Altus · extraction de la valeur implicite du bâtiment et du profit", ncols=13) | |
| 631 | −titre_section(ws, 4, 2, "a) Pour chaque vente : terrain indexé (rôle terrain × 1,257), valeur implicite du bâtiment, $/m² d'aire d'étages, $/logement, ratio prix ÷ rôle total (J6:N16), puis médianes (K17:N17)", 13) | |
| 604 | + f"{NV} ventes réelles de quadruplex neufs, moteur de coût d'UQO Éval, fourchette Altus · extraction de la valeur implicite du bâtiment et du profit", ncols=13) | |
| 605 | +R_V0, R_V1 = 6, 6 + NV - 1 # 6..13 | |
| 606 | +R_MED = R_V1 + 1 # 14 | |
| 607 | +titre_section(ws, 4, 2, f"a) Pour chaque vente : terrain indexé (rôle terrain × 1,257), valeur implicite du bâtiment, $/m² d'aire d'étages, $/logement, ratio prix ÷ rôle total (J{R_V0}:N{R_V1}), puis médianes (K{R_MED}:N{R_MED})", 13) | |
| 632 | 608 | entetes(ws, 5, 2, ["No", "Adresse — lien", "Date", "Prix ($)", "Année", "Aire d'étages (m²)", "Rôle terrain ($)", "Rôle total ($)", "a) Terrain indexé ($)", "a) Bâtiment implicite ($) = prix − terrain", "a) $/m² d'aire d'étages", "a) $/logement (4)", "a) Ratio prix ÷ rôle total"], height=44) |
| 633 | −for i, v in enumerate(VENTES): | |
| 634 | − rr = 6 + i; dr = R_T9 + i | |
| 609 | +for i, v in enumerate(VTP): | |
| 610 | + rr = R_V0 + i; dr = R_T8 + i | |
| 635 | 611 | lien(ws, f"B{rr}", f"=Données!B{dr}"); lien(ws, f"C{rr}", f"=Données!C{dr}", left=True); lien(ws, f"D{rr}", f"=Données!E{dr}") |
| 636 | 612 | lien(ws, f"E{rr}", f"=Données!F{dr}", "#,##0"); lien(ws, f"F{rr}", f"=Données!G{dr}", "0"); lien(ws, f"G{rr}", f"=Données!H{dr}", "0.0") |
| 637 | 613 | lien(ws, f"H{rr}", f"=Données!L{dr}", "#,##0"); lien(ws, f"I{rr}", f"=Données!N{dr}", "#,##0") |
@@ -640,29 +616,25 @@ for i, v in enumerate(VENTES): | ||
| 640 | 616 | rep(ws, f"L{rr}", num_fmt=FMT_PM2, comment="=K6/G6" if i == 0 else None) |
| 641 | 617 | rep(ws, f"M{rr}", num_fmt="#,##0", comment="=K6/4" if i == 0 else None) |
| 642 | 618 | rep(ws, f"N{rr}", num_fmt="0.000", comment="=E6/I6" if i == 0 else None) |
| 643 | −etiquette(ws, 17, 3, "MÉDIANES (fonction MEDIANE / MEDIAN)", bold=True); ws.merge_cells("C17:J17") | |
| 619 | +etiquette(ws, R_MED, 3, "MÉDIANES (fonction MEDIANE / MEDIAN)", bold=True); ws.merge_cells(f"C{R_MED}:J{R_MED}") | |
| 644 | 620 | for col in "KLMN": |
| 645 | − rep(ws, f"{col}17", num_fmt=("#,##0" if col in "KM" else FMT_PM2 if col == "L" else "0.000"), comment="=MEDIAN(K6:K16)" if col == "K" else None) | |
| 646 | −ws.conditional_formatting.add("N6:N16", DataBarRule(start_type="num", start_value=0.8, end_type="num", end_value=1.6, color=OR, showValue=True)) | |
| 647 | − | |
| 648 | −titre_section(ws, 19, 2, "b) Bordereau vs marché, vs moteur de coût d'UQO Éval, vs Altus ; c) profit entrepreneurial extrait du marché (K21:K25)", 13) | |
| 649 | −etiquette(ws, 20, 3, "Coût total de remplacement neuf du bordereau — lien (Bordereau!C38)", bold=True); ws.merge_cells("C20:J20"); lien(ws, "K20", '=IF(Bordereau!C38="","Bordereau à faire",Bordereau!C38)', FMT_D) | |
| 650 | −etiquette(ws, 21, 3, "b) Écart du bordereau par rapport à la valeur implicite médiane du bâtiment (K17) (%)", bold=True); ws.merge_cells("C21:J21"); rep(ws, "K21", num_fmt=FMT_P1, comment="=K20/K17-1") | |
| 651 | −etiquette(ws, 22, 3, "Coût de remplacement neuf du moteur de coût d'UQO Éval — lien (Données, tableau 11)", bold=True); ws.merge_cells("C22:J22"); lien(ws, "K22", f"=Données!D{R_T11}", FMT_D) | |
| 652 | −etiquette(ws, 23, 3, "b) Écart du bordereau par rapport au moteur de coût (%)", bold=True); ws.merge_cells("C23:J23"); rep(ws, "K23", num_fmt=FMT_P1, comment="=K20/K22-1") | |
| 653 | −etiquette(ws, 24, 3, "b) Position du $/pi² hors sol (Bordereau!C39) dans la fourchette Altus 2026 (formule SI : « sous », « dans », « au-dessus »)", bold=True); ws.merge_cells("C24:J24") | |
| 654 | −rep(ws, "K24", comment=f'=IF(Bordereau!C39<{pr("altus_lo")},"sous la fourchette",IF(Bordereau!C39>{pr("altus_hi")},"au-dessus de la fourchette","dans la fourchette Altus 2026"))') | |
| 655 | −etiquette(ws, 25, 3, "c) Profit entrepreneurial EXTRAIT du marché = (bâtiment implicite médian − assiette Bordereau!C36) ÷ assiette (%)", bold=True); ws.merge_cells("C25:J25"); rep(ws, "K25", num_fmt=FMT_P1, comment="=(K17-Bordereau!C36)/Bordereau!C36") | |
| 656 | −# ⚠ zones : les réponses b)-c) sont en colonne K (K21, K23, K24, K25) ; C20:J25 = étiquettes | |
| 657 | −titre_section(ws, 27, 2, "d) Deux quadruplex de 2020 en vigueur (prix DEMANDÉS) : bâtiment implicite et $/logement (F29:G30)", 13) | |
| 658 | −entetes(ws, 28, 2, ["No", "Adresse — lien", "Prix demandé ($)", "Rôle terrain ($)", "d) Bâtiment implicite ($)", "d) $/logement"]) | |
| 659 | −for i, a in enumerate(ANNONCES): | |
| 660 | − rr = 29 + i; dr = R_T10 + i | |
| 661 | − lien(ws, f"B{rr}", f"=Données!B{dr}"); lien(ws, f"C{rr}", f"=Données!C{dr}", left=True); lien(ws, f"D{rr}", f"=Données!E{dr}", "#,##0"); lien(ws, f"E{rr}", f"=Données!K{dr}", "#,##0") | |
| 662 | − rep(ws, f"F{rr}", num_fmt="#,##0", comment=f"=D29-E29*{pr('ratio')}" if i == 0 else None) | |
| 663 | − rep(ws, f"G{rr}", num_fmt="#,##0", comment="=F29/4" if i == 0 else None) | |
| 664 | −titre_section(ws, 32, 2, "e) Lecture (C33) : que signifie l'écart bordereau / marché ? Pourquoi le profit extrait dépasse-t-il la convention de 11 % ? Quelles différences entre le projet et les comparables (logements au rez-de-jardin, qualité, année, terrain indexé, prix demandés ≠ ventes) ? Que retenir pour le promoteur ? (8-12 lignes)", 13) | |
| 665 | −zone(ws, "C33", 6, 11, "Réponse ancrée dans K17, K20:K25, F29:G30 et le tableau 9…") | |
| 621 | + rep(ws, f"{col}{R_MED}", num_fmt=("#,##0" if col in "KM" else FMT_PM2 if col == "L" else "0.000"), comment=f"=MEDIAN(K{R_V0}:K{R_V1})" if col == "K" else None) | |
| 622 | +ws.conditional_formatting.add(f"N{R_V0}:N{R_V1}", DataBarRule(start_type="num", start_value=0.8, end_type="num", end_value=1.6, color=OR, showValue=True)) | |
| 623 | + | |
| 624 | +r0 = R_MED + 2 # 16 | |
| 625 | +titre_section(ws, r0, 2, f"b) Bordereau vs marché, vs moteur de coût d'UQO Éval, vs Altus ; c) profit entrepreneurial extrait du marché (K{r0 + 2}, K{r0 + 4}:K{r0 + 6})", 13) | |
| 626 | +etiquette(ws, r0 + 1, 3, "Coût total de remplacement neuf du bordereau — lien (Bordereau!C38)", bold=True); ws.merge_cells(f"C{r0 + 1}:J{r0 + 1}"); lien(ws, f"K{r0 + 1}", '=IF(Bordereau!C38="","Bordereau à faire",Bordereau!C38)', FMT_D) | |
| 627 | +etiquette(ws, r0 + 2, 3, f"b) Écart du bordereau par rapport à la valeur implicite médiane du bâtiment (K{R_MED}) (%)", bold=True); ws.merge_cells(f"C{r0 + 2}:J{r0 + 2}"); rep(ws, f"K{r0 + 2}", num_fmt=FMT_P1, comment=f"=K{r0 + 1}/K{R_MED}-1") | |
| 628 | +etiquette(ws, r0 + 3, 3, "Coût de remplacement neuf du moteur de coût d'UQO Éval — lien (Données, tableau 10)", bold=True); ws.merge_cells(f"C{r0 + 3}:J{r0 + 3}"); lien(ws, f"K{r0 + 3}", f"=Données!D{R_T10}", FMT_D) | |
| 629 | +etiquette(ws, r0 + 4, 3, "b) Écart du bordereau par rapport au moteur de coût (%)", bold=True); ws.merge_cells(f"C{r0 + 4}:J{r0 + 4}"); rep(ws, f"K{r0 + 4}", num_fmt=FMT_P1, comment=f"=K{r0 + 1}/K{r0 + 3}-1") | |
| 630 | +etiquette(ws, r0 + 5, 3, "b) Position du $/pi² hors sol (Bordereau!C39) dans la fourchette Altus 2026 (formule SI : « sous », « dans », « au-dessus »)", bold=True); ws.merge_cells(f"C{r0 + 5}:J{r0 + 5}") | |
| 631 | +rep(ws, f"K{r0 + 5}", comment=f'=IF(Bordereau!C39<{pr("altus_lo")},"sous la fourchette",IF(Bordereau!C39>{pr("altus_hi")},"au-dessus de la fourchette","dans la fourchette Altus 2026"))') | |
| 632 | +etiquette(ws, r0 + 6, 3, "c) Profit entrepreneurial EXTRAIT du marché = (bâtiment implicite médian − assiette Bordereau!C36) ÷ assiette (%)", bold=True); ws.merge_cells(f"C{r0 + 6}:J{r0 + 6}"); rep(ws, f"K{r0 + 6}", num_fmt=FMT_P1, comment=f"=(K{R_MED}-Bordereau!C36)/Bordereau!C36") | |
| 633 | +R_K = {"total": r0 + 1, "ecart_marche": r0 + 2, "moteur": r0 + 3, "ecart_moteur": r0 + 4, "altus": r0 + 5, "profit_extrait": r0 + 6} | |
| 634 | +r1 = r0 + 8 # 24 | |
| 635 | +titre_section(ws, r1, 2, f"d) Lecture (C{r1 + 1}) : que signifie l'écart bordereau / marché ? Pourquoi le profit extrait dépasse-t-il la convention de 11 % ? Quelles différences entre le projet et les comparables (logements au rez-de-jardin, qualité, année, terrain indexé, Q8, annonces du tableau 9 = prix demandés) ? Que retenir pour le promoteur ? (8-12 lignes)", 13) | |
| 636 | +zone(ws, f"C{r1 + 1}", 6, 11, f"Réponse ancrée dans K{R_MED}, K{r0 + 1}:K{r0 + 6} et les tableaux 8 et 9…") | |
| 637 | +R_LECT = r1 + 1 | |
| 666 | 638 | finir_feuille(ws, EVAL_BLEU, titre="Marché — question 9") |
| 667 | 639 | |
| 668 | 640 | # ============================================================================== |
@@ -679,7 +651,7 @@ kpis = [ | ||
| 679 | 651 | ("TOTAL DES INDIRECTS", "", FMT_D, True, "Bordereau!C32"), |
| 680 | 652 | ("PROFIT ENTREPRENEURIAL", "", FMT_D, True, "Bordereau!C37"), |
| 681 | 653 | ("$/pi² HORS SOL", "", FMT_PSF, True, "Bordereau!C39"), |
| 682 | − ("ÉCART BORDEREAU / MARCHÉ", "", FMT_P1, True, "Marché!K21"), | |
| 654 | + ("ÉCART BORDEREAU / MARCHÉ", "", FMT_P1, True, f"Marché!K{R_K['ecart_marche']}"), | |
| 683 | 655 | ] |
| 684 | 656 | ACCENT = [BLEU_CLAIR, BLEU_CLAIR, OR, OR, EVAL_BLEU, VERT] |
| 685 | 657 | for j, (lbl, formula, fmt, is_student, src) in enumerate(kpis): |
@@ -692,7 +664,7 @@ for j, (lbl, formula, fmt, is_student, src) in enumerate(kpis): | ||
| 692 | 664 | vc.fill = FILL_REPONSE if is_student else PatternFill("solid", fgColor="FFFFFF") |
| 693 | 665 | sc = ws.cell(row=7, column=col, value=src); sc.font = FONT_KPI_SRC; sc.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True) |
| 694 | 666 | sc.fill = FILL_CLAIR if not is_student else FILL_REPONSE; sc.border = Border(left=LIGHT, right=LIGHT, bottom=LIGHT) |
| 695 | −ws["D6"].comment = Comment('Modèle : =IFERROR(Bordereau!C32,"—") — même logique pour E6 (Bordereau!C37), F6 (Bordereau!C39), G6 (Marché!K21)', "UQO Éval · TP2") | |
| 667 | +ws["D6"].comment = Comment(f'Modèle : =IFERROR(Bordereau!C32,"—") — même logique pour E6 (Bordereau!C37), F6 (Bordereau!C39), G6 (Marché!K{R_K["ecart_marche"]})', "UQO Éval · TP2") | |
| 696 | 668 | ws.row_dimensions[5].height = 30; ws.row_dimensions[6].height = 34; ws.row_dimensions[7].height = 22 |
| 697 | 669 | |
| 698 | 670 | lc = ws.cell(row=8, column=2, value="VERDICT →"); lc.font = FONT_H1; lc.alignment = Alignment(horizontal="right", vertical="center") |
@@ -720,7 +692,7 @@ def style_chart(ch): | ||
| 720 | 692 | ch1 = BarChart(); ch1.type = "bar" |
| 721 | 693 | ch1.title = "Coût direct nu par division MasterFormat ($)" |
| 722 | 694 | ch1.height = 7.6; ch1.width = 13 |
| 723 | −ch1.add_data(Reference(releve, min_col=5, min_row=104, max_row=R_D1), titles_from_data=True) | |
| 695 | +ch1.add_data(Reference(releve, min_col=5, min_row=R_DH, max_row=R_D1), titles_from_data=True) | |
| 724 | 696 | ch1.set_categories(Reference(releve, min_col=3, min_row=R_D0, max_row=R_D1)) |
| 725 | 697 | ch1.series[0].graphicalProperties.solidFill = BLEU_CLAIR |
| 726 | 698 | ch1.gapWidth = 50 |
@@ -729,23 +701,23 @@ ws.add_chart(ch1, "B10") | ||
| 729 | 701 | |
| 730 | 702 | for j, h in enumerate(["Indication", "$/logement"]): |
| 731 | 703 | c = ws.cell(row=10, column=13 + j, value=h); c.font = FONT_NOTE; c.border = BORDER_LIGHT; c.fill = FILL_CALCUL |
| 732 | −src2 = [("Bordereau (coût total ÷ 4)", "=IFERROR(Bordereau!C41,0)"), ("Moteur UQO Éval (RCN ÷ 4)", f"=Données!D{R_T11}/4"), | |
| 733 | − ("Marché : bâtiment implicite médian ÷ 4", "=IFERROR(Marché!M17,0)"), ("Annonce A1 (280, Champlain)", "=IFERROR(Marché!G29,0)"), ("Annonce A2 (335, Hippodrome)", "=IFERROR(Marché!G30,0)")] | |
| 704 | +src2 = [("Bordereau (coût total ÷ 4)", "=IFERROR(Bordereau!C41,0)"), ("Moteur UQO Éval (RCN ÷ 4)", f"=Données!D{R_T10}/4"), | |
| 705 | + ("Marché : bâtiment implicite médian ÷ 4", f"=IFERROR(Marché!M{R_MED},0)")] | |
| 734 | 706 | for i, (lbl, f) in enumerate(src2): |
| 735 | 707 | a = ws.cell(row=11 + i, column=13, value=lbl); a.font = FONT_NOTE; a.border = BORDER_LIGHT; a.fill = FILL_CALCUL |
| 736 | 708 | b = ws.cell(row=11 + i, column=14, value=f); b.font = FONT_NOTE; b.border = BORDER_LIGHT; b.fill = FILL_CALCUL; b.number_format = "#,##0" |
| 737 | −note(ws, 16, 13, "Table source du graphique 2 — ne pas modifier.", 2) | |
| 709 | +note(ws, 14, 13, "Table source du graphique 2 — ne pas modifier.", 2) | |
| 738 | 710 | ch2 = BarChart(); ch2.type = "col" |
| 739 | 711 | ch2.title = "Coût du bâtiment par logement : bordereau, moteur, marché" |
| 740 | 712 | ch2.y_axis.title = "$ / logement" |
| 741 | 713 | ch2.height = 7.6; ch2.width = 11 |
| 742 | −ch2.add_data(Reference(ws, min_col=14, min_row=10, max_row=15), titles_from_data=True) | |
| 743 | −ch2.set_categories(Reference(ws, min_col=13, min_row=11, max_row=15)) | |
| 714 | +ch2.add_data(Reference(ws, min_col=14, min_row=10, max_row=13), titles_from_data=True) | |
| 715 | +ch2.set_categories(Reference(ws, min_col=13, min_row=11, max_row=13)) | |
| 744 | 716 | ch2.series[0].graphicalProperties.solidFill = OR |
| 745 | 717 | ch2.gapWidth = 60 |
| 746 | 718 | style_chart(ch2); ch2.legend = None |
| 747 | 719 | ws.add_chart(ch2, "I10") |
| 748 | −titre_section(ws, 26, 2, "Graphique 3 (question 10c) : ajoutez ci-dessous votre graphique — p. ex. matériaux / main-d'œuvre / équipement (Relevé!E98:E100), sensibilité du coût total à la durée du chantier, ou $/m² implicite des 11 ventes (Marché!L6:L16)", 12) | |
| 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) | |
| 749 | 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") |
| 750 | 722 | finir_feuille(ws, TURQUOISE, titre="Dashboard — question 10") |
| 751 | 723 | |
@@ -758,9 +730,9 @@ bandeau(ws, "Note au promoteur — avant la demande de financement", | ||
| 758 | 730 | "Question 10 — une page, ton professionnel, chaque affirmation ancrée dans un chiffre du classeur (citez la cellule).", ncols=2) |
| 759 | 731 | sections = [ |
| 760 | 732 | ("Conclusion : coût total de remplacement neuf, $/pi² (hors sol et chauffé), $/logement, part des indirects et du profit", 2), |
| 761 | − ("Postes les plus sensibles du bordereau (trois postes les plus lourds, division la plus lourde, part de la main-d'œuvre)", 2), | |
| 733 | + ("Postes les plus sensibles du bordereau (trois composantes les plus lourdes, division la plus lourde, part de la main-d'œuvre)", 2), | |
| 762 | 734 | ("Effet chiffré d'un retard de chantier de 6 mois sur les intérêts intercalaires et sur le coût total", 2), |
| 763 | − ("Ce que disent le marché (11 ventes), le moteur de coût d'UQO Éval et Altus : le projet est-il viable ? marge attendue", 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), | |
| 764 | 736 | ("Conventions à déclarer (profit sur directs + indirects, contingences, exclusion des taxes) et ce qui changerait avec l'autre convention", 2), |
| 765 | 737 | ("Limites du travail (plan générique, prix publiés RSMeans, comparables au rez-de-jardin, terrain indexé, prix demandés ≠ ventes)", 2), |
| 766 | 738 | ] |
@@ -779,4 +751,5 @@ if not os.environ.get("TP2_SKIP_SAVE"): # make_IMM1033_TP2_solution.py réutil | ||
| 779 | 751 | os.makedirs(os.path.dirname(OUT), exist_ok=True) |
| 780 | 752 | wb.save(OUT) |
| 781 | 753 | print("OK :", OUT) |
| 782 | − print("Repères Données :", {k: v for k, v in DN.items() if k != "PR"}, "PR", PR, "| Relevé lignes", R_L0, R_L1, "divisions", R_D0, R_D1, "top", R_TOP) | |
| 754 | + 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) | |
modified
IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/make_IMM1033_TP2_solution.py
+64 −69
@@ -1,5 +1,5 @@ | ||
| 1 | 1 | #!/usr/bin/env python3 |
| 2 | −"""Solutionnaire Excel — IMM1033-20 TP2 (RÉSERVÉ À L'ENSEIGNANT) : quadruplex de 2 étages à Gatineau (UQO Éval, RSMeans 2026 T4). | |
| 2 | +"""Solutionnaire Excel — IMM1033-20 TP2 (RÉSERVÉ À L'ENSEIGNANT) : quadruplex de 2 étages à Gatineau (UQO Éval, 22 composantes RSMeans 2026 T4). | |
| 3 | 3 | |
| 4 | 4 | Recharge le gabarit en mémoire (make_IMM1033_TP2.py exécuté avec TP2_SKIP_SAVE=1 : le gabarit distribué n'est pas réécrit), |
| 5 | 5 | puis remplit chaque cellule jaune avec la FORMULE attendue (chaînée à Données), les zones de texte avec les réponses modèles, |
@@ -16,8 +16,9 @@ sys.path.insert(0, HERE) | ||
| 16 | 16 | os.environ["TP2_SKIP_SAVE"] = "1" |
| 17 | 17 | ns = runpy.run_path(os.path.join(HERE, "make_IMM1033_TP2.py")) |
| 18 | 18 | wb = ns["wb"] |
| 19 | −PR, R_T1, R_T5, R_T6, R_T7, R_T9, R_T10, R_T11 = ns["PR"], ns["R_T1"], ns["R_T5"], ns["R_T6"], ns["R_T7"], ns["R_T9"], ns["R_T10"], ns["R_T11"] | |
| 20 | −R_L0, R_L1, R_D0, R_D1, R_TOP = ns["R_L0"], ns["R_L1"], ns["R_D0"], ns["R_D1"], ns["R_TOP"] | |
| 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"] | |
| 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 | 22 | |
| 22 | 23 | from openpyxl.chart import PieChart, Reference # noqa: E402 |
| 23 | 24 | from openpyxl.styles import Alignment, Font, PatternFill # noqa: E402 |
@@ -30,7 +31,8 @@ FONT_SOL = Font(name="Calibri", size=10, color="1E4620") | ||
| 30 | 31 | FONT_SOL_TXT = Font(name="Calibri", size=10, color="1F2A1F") |
| 31 | 32 | FONT_TITRE = Font(name="Calibri", size=18, bold=True, color="FFFFFF") |
| 32 | 33 | pr = lambda k: f"Données!$D${PR[k]}" |
| 33 | −mq = lambda i: f"Données!$D${R_T7 + i}" | |
| 34 | +mq = lambda i: f"Données!$D${R_T6 + i}" | |
| 35 | +D2 = '#,##0.00" $"' | |
| 34 | 36 | |
| 35 | 37 | |
| 36 | 38 | def sol(ws, coord, value, fmt=None): |
@@ -83,39 +85,34 @@ sol(ws, "D8", "Aucun outil d'IA ; valeurs reproduites par tp2_solutions.py ; cas | ||
| 83 | 85 | # ---------------- RELEVÉ ---------------- |
| 84 | 86 | ws = wb["Relevé"] |
| 85 | 87 | txt(ws, "C5", |
| 86 | − "RELEVÉ DES QUANTITÉS : le promoteur dispose de plans cotés et d'une fiche technique ; la méthode du relevé (quantity survey) est la plus précise des quatre (séance 6) " | |
| 87 | − "parce qu'elle part des quantités réelles de chaque composante (m³ de béton, m² de brique, nombre de fenêtres) tarifées à l'unité — c'est la méthode de l'entrepreneur qui soumissionne. " | |
| 88 | − "La méthode COMPARATIVE ($/pi² d'un guide) ne donnerait qu'un ordre de grandeur (Altus 180-330 $/pi²) sans distinguer brique et vinyle, toit plat et bardeaux ; la méthode par COMPOSANTES " | |
| 89 | − "(unités en place, celle du moteur de coût d'UQO Éval, tableau 11) est un bon compromis de contrôle ; la méthode INDEXÉE suppose un coût historique connu, inexistant pour un projet neuf. " | |
| 90 | − "COÛT DE 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 " | |
| 91 | − "redeviendrait pertinente que pour un bâtiment existant à caractéristiques d'époque. LIMITES : plan générique (gabarit UQO Éval, pas les plans d'exécution), prix publiés RSMeans localisés " | |
| 92 | − "Gatineau (pas des soumissions), 55 mesures non vérifiées manuellement, précision attendue ± 5 à 10 % sur les directs.") | |
| 93 | −F = ["=(Données!D11+Données!D13)*(Données!D12+Données!D13)", "=2*(Données!D11+Données!D12)", "=(F16+0.9*F17)*Données!D17", "=F17*0.9*(Données!D17-0.3)", | |
| 94 | − "=F17*Données!D15", "=F17*(Données!D15-Données!D16)", "=F17*Données!D14*Données!D10", "=F22-E12", "=F16*Données!D18*Données!D19", "=G12", "=F23+2*F12", "=F26+G12"] | |
| 95 | −for i, f in enumerate(F): | |
| 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 " | |
| 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 ; " | |
| 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 " | |
| 93 | + "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 à caractéristiques d'époque. " | |
| 94 | + "LIMITES : plan générique (gabarit UQO Éval, pas les plans d'exécution), prix publiés RSMeans localisés Gatineau (pas des soumissions), précision attendue ± 5 à 10 % sur les directs.") | |
| 95 | +for i, g in enumerate(GRANDEURS): | |
| 96 | 96 | rr = 16 + i |
| 97 | − sol(ws, f"F{rr}", f, "#,##0.00"); sol(ws, f"H{rr}", f"=F{rr}/G{rr}-1", "0.00%") | |
| 98 | −for rr in range(R_L0, R_L1 + 1): | |
| 99 | − sol(ws, f"K{rr}", f"=VLOOKUP(G{rr},Données!$B${R_T5}:$D${R_T5 + 4},3,FALSE)", "0.000000") | |
| 100 | − sol(ws, f"L{rr}", f"=F{rr}*H{rr}*K{rr}", "#,##0.00") | |
| 101 | − sol(ws, f"P{rr}", f"=M{rr}+N{rr}+O{rr}", "#,##0.00") | |
| 102 | − sol(ws, f"Q{rr}", f"=L{rr}*P{rr}", '#,##0.00" $"') | |
| 103 | −sol(ws, "Q96", f"=SUM(Q{R_L0}:Q{R_L1})", '#,##0.00" $"') | |
| 104 | −sol(ws, "E98", f"=SUMPRODUCT(L{R_L0}:L{R_L1},M{R_L0}:M{R_L1})", '#,##0.00" $"') | |
| 105 | −sol(ws, "E99", f"=SUMPRODUCT(L{R_L0}:L{R_L1},N{R_L0}:N{R_L1})", '#,##0.00" $"') | |
| 106 | −sol(ws, "E100", f"=SUMPRODUCT(L{R_L0}:L{R_L1},O{R_L0}:O{R_L1})", '#,##0.00" $"') | |
| 107 | −sol(ws, "E101", "=E99/Q96", "0.0%") | |
| 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): | |
| 99 | + sol(ws, f"K{rr}", f"=H{rr}+I{rr}+J{rr}", "#,##0.00") | |
| 100 | + sol(ws, f"L{rr}", f"=F{rr}*K{rr}", D2) | |
| 101 | +sol(ws, f"L{R_CT}", f"=SUM(L{R_C0}:L{R_C1})", D2) | |
| 102 | +sol(ws, f"E{R_MAT}", f"=SUMPRODUCT(F{R_C0}:F{R_C1},H{R_C0}:H{R_C1})", D2) | |
| 103 | +sol(ws, f"E{R_MAT + 1}", f"=SUMPRODUCT(F{R_C0}:F{R_C1},I{R_C0}:I{R_C1})", D2) | |
| 104 | +sol(ws, f"E{R_MAT + 2}", f"=SUMPRODUCT(F{R_C0}:F{R_C1},J{R_C0}:J{R_C1})", D2) | |
| 105 | +sol(ws, f"E{R_MAT + 3}", f"=E{R_MAT + 1}/L{R_CT}", "0.0%") | |
| 108 | 106 | for rr in range(R_D0, R_D1 + 1): |
| 109 | − sol(ws, f"E{rr}", f"=SUMIF($C${R_L0}:$C${R_L1},B{rr},$Q${R_L0}:$Q${R_L1})", '#,##0.00" $"') | |
| 110 | − sol(ws, f"F{rr}", f"=E{rr}/$Q$96", "0.0%") | |
| 107 | + sol(ws, f"E{rr}", f"=SUMIF($C${R_C0}:$C${R_C1},B{rr},$L${R_C0}:$L${R_C1})", D2) | |
| 108 | + sol(ws, f"F{rr}", f"=E{rr}/$L${R_CT}", "0.0%") | |
| 111 | 109 | for i in range(3): |
| 112 | 110 | rr = R_TOP + i |
| 113 | − sol(ws, f"E{rr}", f"=LARGE($Q${R_L0}:$Q${R_L1},B{rr})", '#,##0.00" $"') | |
| 114 | − sol(ws, f"C{rr}", f"=INDEX($D${R_L0}:$D${R_L1},MATCH(E{rr},$Q${R_L0}:$Q${R_L1},0))") | |
| 111 | + sol(ws, f"E{rr}", f"=LARGE($L${R_C0}:$L${R_C1},B{rr})", D2) | |
| 112 | + sol(ws, f"C{rr}", f"=INDEX($D${R_C0}:$D${R_C1},MATCH(E{rr},$L${R_C0}:$L${R_C1},0))") | |
| 115 | 113 | |
| 116 | 114 | # ---------------- BORDEREAU ---------------- |
| 117 | 115 | ws = wb["Bordereau"] |
| 118 | −D2 = '#,##0.00" $"' | |
| 119 | 116 | for coord, f, fmt in [("C9", "=C7+C8", D2), ("C10", f"=C9*{mq(1)}", D2), ("C11", f"=(C9+C10)*{mq(2)}", D2), ("C12", f"=(C9+C10+C11)*{mq(3)}", D2), |
| 120 | 117 | ("C13", "=SUM(C9:C12)", D2), ("C14", f"=C9*{mq(4)}", D2), ("C15", "=C13+C14", D2), |
| 121 | 118 | ("C19", f"=MAX({pr('permis')}/1000*C15,{pr('permis_min')}*Données!$D${R_T1['log']})", D2), ("C20", f"=Données!$D${R_T1['log']}*{pr('gcr')}", D2), |
@@ -127,49 +124,47 @@ for coord, f, fmt in [("C9", "=C7+C8", D2), ("C10", f"=C9*{mq(1)}", D2), ("C11", | ||
| 127 | 124 | sol(ws, coord, f, fmt) |
| 128 | 125 | txt(ws, "C25", |
| 129 | 126 | "Le prêt de construction est tiré AU RYTHME DES TRAVAUX (décaissements progressifs à chaque certificat d'avancement) : l'encours moyen sur les 12 mois vaut environ la moitié du coût final, " |
| 130 | − "d'où I = (D + C) × i × T × ½ — on ne paie pas 6,75 % sur 611 812 $ pendant un an, mais sur un encours qui croît de 0 à 611 812 $. Le facteur ½ est TROP OPTIMISTE si les décaissements sont " | |
| 127 | + "d'où I = (D + C) × i × T × ½ — on ne paie pas 6,75 % sur 611 843 $ pendant un an, mais sur un encours qui croît de 0 à 611 843 $. Le facteur ½ est TROP OPTIMISTE si les décaissements sont " | |
| 131 | 128 | "concentrés tôt (terrain déjà financé par le même prêt, acomptes aux fournisseurs, structure et enveloppe payées dans les premiers mois) ou si le chantier s'étire après la fin des tirages : " |
| 132 | 129 | "l'encours moyen dépasse alors 50 %.") |
| 133 | 130 | txt(ws, "C44", |
| 134 | − "Deux conventions coexistent (séance 8) : profit sur (directs + contingences + indirects) — celle du cours, 75 228 $ — ou sur les directs seuls, 64 707 $, soit 10 521 $ de moins (−1,4 % du coût " | |
| 131 | + "Deux conventions coexistent (séance 8) : profit sur (directs + contingences + indirects) — celle du cours, 75 231 $ — ou sur les directs seuls, 64 710 $, soit 10 521 $ de moins (−1,4 % du coût " | |
| 135 | 132 | "total). Comme le pourcentage est identique mais l'assiette différente, deux évaluateurs honnêtes arrivent à deux coûts neufs différents : l'évaluateur doit ÉNONCER sa convention pour que " |
| 136 | 133 | "le lecteur puisse répliquer le calcul et comparer des bordereaux entre eux (normes OEAQ : hypothèses et méthodes explicites). Pour un promoteur, la base la plus défendable est " |
| 137 | 134 | "l'investissement total à risque (directs + indirects, intercalaires inclus) : c'est sur ce capital qu'il exige un rendement, pas seulement sur les matériaux et la main-d'œuvre.") |
| 138 | 135 | |
| 139 | 136 | # ---------------- MARCHÉ ---------------- |
| 140 | 137 | ws = wb["Marché"] |
| 141 | −for rr in range(6, 17): | |
| 138 | +for rr in range(R_V0, R_V1 + 1): | |
| 142 | 139 | sol(ws, f"J{rr}", f"=H{rr}*{pr('ratio')}", "#,##0"); sol(ws, f"K{rr}", f"=E{rr}-J{rr}", "#,##0"); sol(ws, f"L{rr}", f"=K{rr}/G{rr}", '#,##0" $/m²"') |
| 143 | 140 | sol(ws, f"M{rr}", f"=K{rr}/4", "#,##0"); sol(ws, f"N{rr}", f"=E{rr}/I{rr}", "0.000") |
| 144 | −sol(ws, "K17", "=MEDIAN(K6:K16)", "#,##0"); sol(ws, "L17", "=MEDIAN(L6:L16)", '#,##0" $/m²"'); sol(ws, "M17", "=MEDIAN(M6:M16)", "#,##0"); sol(ws, "N17", "=MEDIAN(N6:N16)", "0.000") | |
| 145 | −sol(ws, "K21", "=K20/K17-1", "0.0%"); sol(ws, "K23", "=K20/K22-1", "0.0%") | |
| 146 | −sol(ws, "K24", f'=IF(Bordereau!C39<{pr("altus_lo")},"sous la fourchette",IF(Bordereau!C39>{pr("altus_hi")},"au-dessus de la fourchette","dans la fourchette Altus 2026"))') | |
| 147 | −sol(ws, "K25", "=(K17-Bordereau!C36)/Bordereau!C36", "0.0%") | |
| 148 | −for rr in (29, 30): | |
| 149 | − sol(ws, f"F{rr}", f"=D{rr}-E{rr}*{pr('ratio')}", "#,##0"); sol(ws, f"G{rr}", f"=F{rr}/4", "#,##0") | |
| 150 | −txt(ws, "C33", | |
| 151 | − "MARCHÉ : les 11 ventes réelles (2024-2025) de quadruplex neufs se concluent entre 849 411 $ et 1 300 000 $ (médiane 1 165 000 $) ; une fois le terrain retiré (rôle terrain × 1,257), la valeur " | |
| 152 | − "implicite médiane du bâtiment est de 879 896 $ (K17), soit 219 974 $ par logement (M17) et 4 300 $/m² d'aire d'étages (L17). Le bordereau (759 115 $, K20) est 13,7 % SOUS cette valeur (K21) " | |
| 153 | − "et 8,3 % sous le moteur de coût d'UQO Éval (827 445 $, K23) ; à 177 $/pi² hors sol il est juste sous la borne Altus de 180 $ (K24) mais à 200 $/pi² chauffé il est dedans. " | |
| 154 | − "PROFIT EXTRAIT : (879 896 − 683 887) ÷ 683 887 = 28,7 % (K25), bien au-dessus de la convention de 11 % — le marché 2025 paie les quadruplex neufs plus cher que leur coût de création, " | |
| 155 | − "ce qui attire les promoteurs (séance 8 : extraction du profit). PRUDENCE : (1) les comparables ont deux logements au rez-de-jardin (sous-sol fini) et parfois trois étages, donc plus de " | |
| 156 | − "finition que notre sous-sol non fini ; (2) la qualité (24, Sacré-Cœur : 3 étages, Hull) et l'année varient ; (3) le terrain indexé par le ratio des terrains vacants (1,257) est une " | |
| 157 | − "approximation — un ratio de 1,10 relèverait la valeur implicite du bâtiment ; (4) les ratios prix ÷ rôle de 0,94 à 1,47 (N6:N16) montrent la dispersion ; (5) Q11 (849 411 $ en 2024) " | |
| 158 | − "est une vente de livraison atypique qui tire la médiane vers le bas ; (6) les annonces A1-A2 (≈ 256 500 $/logement, F29:G30) sont des prix DEMANDÉS de bâtiments de 2020, pas des ventes. " | |
| 159 | − "POUR LE PROMOTEUR : le projet est viable — coût de création ≈ 759 000 $ + terrain contre une valeur de marché ≈ 880 000 $ + terrain ; la marge réelle dépendra des soumissions, " | |
| 160 | − "de la durée du chantier (intercalaires) et du niveau de finition retenu.") | |
| 141 | +sol(ws, f"K{R_MED}", f"=MEDIAN(K{R_V0}:K{R_V1})", "#,##0"); sol(ws, f"L{R_MED}", f"=MEDIAN(L{R_V0}:L{R_V1})", '#,##0" $/m²"') | |
| 142 | +sol(ws, f"M{R_MED}", f"=MEDIAN(M{R_V0}:M{R_V1})", "#,##0"); sol(ws, f"N{R_MED}", f"=MEDIAN(N{R_V0}:N{R_V1})", "0.000") | |
| 143 | +sol(ws, f"K{R_K['ecart_marche']}", f"=K{R_K['total']}/K{R_MED}-1", "0.0%"); sol(ws, f"K{R_K['ecart_moteur']}", f"=K{R_K['total']}/K{R_K['moteur']}-1", "0.0%") | |
| 144 | +sol(ws, f"K{R_K['altus']}", f'=IF(Bordereau!C39<{pr("altus_lo")},"sous la fourchette",IF(Bordereau!C39>{pr("altus_hi")},"au-dessus de la fourchette","dans la fourchette Altus 2026"))') | |
| 145 | +sol(ws, f"K{R_K['profit_extrait']}", f"=(K{R_MED}-Bordereau!C36)/Bordereau!C36", "0.0%") | |
| 146 | +txt(ws, f"C{R_LECT}", | |
| 147 | + "MARCHÉ : les 8 ventes réelles (2024-2025) de quadruplex neufs de 2 étages se concluent entre 849 411 $ et 1 205 276 $ (médiane 1 142 500 $) ; une fois le terrain retiré (rôle terrain × 1,257), " | |
| 148 | + f"la valeur implicite médiane du bâtiment est de 866 833 $ (K{R_MED}), soit 216 708 $ par logement (M{R_MED}) et 4 389 $/m² d'aire d'étages (L{R_MED}). Le bordereau (759 152 $, K{R_K['total']}) est 12,4 % SOUS cette " | |
| 149 | + f"valeur (K{R_K['ecart_marche']}) et 8,3 % sous le moteur de coût d'UQO Éval (827 445 $, K{R_K['ecart_moteur']}) ; à 177 $/pi² hors sol il est juste sous la borne Altus de 180 $ (K{R_K['altus']}) mais à 200 $/pi² chauffé il est dedans. " | |
| 150 | + f"PROFIT EXTRAIT : (866 833 − 683 920) ÷ 683 920 = 26,7 % (K{R_K['profit_extrait']}), bien au-dessus de la convention de 11 % — le marché 2025 paie les quadruplex neufs plus cher que leur coût de création, " | |
| 151 | + "ce qui attire les promoteurs (séance 8 : extraction du profit). PRUDENCE : (1) les comparables ont deux logements au rez-de-jardin (sous-sol fini), donc plus de finition que notre sous-sol " | |
| 152 | + "non fini ; (2) la qualité et l'année varient ; (3) le terrain indexé par le ratio des terrains vacants (1,257) est une approximation — un ratio de 1,10 relèverait la valeur implicite du " | |
| 153 | + f"bâtiment ; (4) les ratios prix ÷ rôle de 0,94 à 1,47 (N{R_V0}:N{R_V1}) montrent la dispersion ; (5) Q8 (849 411 $ en 2024) est une vente de livraison atypique qui tire la médiane vers le bas ; " | |
| 154 | + "(6) les annonces A1-A2 du tableau 9 (≈ 1,3 M$ demandés pour des quadruplex de 2020 à 3 étages) sont des prix DEMANDÉS, pas des ventes. POUR LE PROMOTEUR : le projet est viable — coût de " | |
| 155 | + "création ≈ 759 000 $ + terrain contre une valeur de marché ≈ 867 000 $ + terrain ; la marge réelle dépendra des soumissions, de la durée du chantier (intercalaires) et du niveau de finition.") | |
| 161 | 156 | |
| 162 | 157 | # ---------------- DASHBOARD ---------------- |
| 163 | 158 | ws = wb["Dashboard"] |
| 164 | 159 | sol(ws, "D6", '=IFERROR(Bordereau!C32,"—")', '#,##0" $"'); sol(ws, "E6", '=IFERROR(Bordereau!C37,"—")', '#,##0" $"') |
| 165 | −sol(ws, "F6", '=IFERROR(Bordereau!C39,"—")', '0.00" $/pi²"'); sol(ws, "G6", '=IFERROR(Marché!K21,"—")', "0.0%") | |
| 160 | +sol(ws, "F6", '=IFERROR(Bordereau!C39,"—")', '0.00" $/pi²"'); sol(ws, "G6", f'=IFERROR(Marché!K{R_K["ecart_marche"]},"—")', "0.0%") | |
| 166 | 161 | for col in "DEFG": |
| 167 | 162 | ws[f"{col}6"].font = Font(name="Calibri", size=20, bold=True, color="1E4620"); ws[f"{col}7"].fill = FILL_SOL |
| 168 | 163 | sol(ws, "C8", "Coût sous la valeur de marché — projet viable (marge > 11 %)") |
| 169 | 164 | ws["C8"].font = Font(name="Calibri", size=14, bold=True, color="1E4620"); ws["C8"].alignment = Alignment(horizontal="center", vertical="center") |
| 170 | −ws["B27"].value = "Graphique 3 (solution) : matériaux / main-d'œuvre / équipement du direct nu (Relevé!E98:E100)" | |
| 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})" | |
| 171 | 166 | ws["B27"].font = Font(name="Calibri", size=11, bold=True, color="1E4620") |
| 172 | −for i, (lbl, f) in enumerate([("Matériaux", "=Relevé!E98"), ("Main-d'œuvre", "=Relevé!E99"), ("Équipement", "=Relevé!E100")]): | |
| 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}")]): | |
| 173 | 168 | a = ws.cell(row=28 + i, column=13, value=lbl); a.fill = FILL_SOL |
| 174 | 169 | b = ws.cell(row=28 + i, column=14, value=f); b.fill = FILL_SOL; b.number_format = "#,##0" |
| 175 | 170 | pie = PieChart(); pie.title = "Direct nu : matériaux, main-d'œuvre, équipement"; pie.height = 7; pie.width = 10 |
@@ -178,24 +173,24 @@ ws.add_chart(pie, "B28") | ||
| 178 | 173 | |
| 179 | 174 | ws = wb["Note"] |
| 180 | 175 | NOTE = [ |
| 181 | − "Le coût de remplacement neuf du quadruplex (18,6 × 10,7 m, 2 étages, 4 logements, sous-sol non fini) s'établit à 759 115 $ hors taxes (Bordereau!C38) : 588 245 $ de coûts directs au sens du " | |
| 182 | − "cours (C13), 23 567 $ de contingences (C14), 72 075 $ d'indirects (C32, 12,3 % des directs) et 75 228 $ de profit entrepreneurial (C37, 11 %). Cela représente 177,18 $/pi² d'aire brute hors sol " | |
| 183 | − "(4 284 pi², C39), 199,89 $/pi² d'aire chauffée (3 798 pi², C40) et 189 779 $ par logement (C41). Indirects + profit = 19,4 % du coût total.", | |
| 184 | − "Trois postes pèsent 30 % du direct nu : le placage de brique (77 533 $, 16,5 %), les armoires et comptoirs des 4 cuisines (42 103 $) et les murs de fondation coffrés (23 260 $) " | |
| 185 | − "(Relevé!C121:E123). Par division, l'enveloppe (07) domine avec 106 069 $ (22,5 %), devant les finitions (09, 16,7 %), les cuisines (11, 11,7 %) et le bois (06, 10,5 %) (Relevé!E105:F117). " | |
| 186 | − "La main-d'œuvre ne représente que 27,4 % du direct nu (E101) : le bordereau est surtout sensible aux prix des matériaux (brique, armoires, fenêtres).", | |
| 187 | − "Les intérêts intercalaires valent 20 649 $ 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 812 × 6,75 % × 1,5 × ½ = 30 973 $, " | |
| 188 | − "soit +10 324 $ (+50 % du poste). Répercuté dans l'assiette du profit (+11 %), le coût total passerait à ≈ 770 575 $ (+11 460 $, +1,5 %) : à provisionner et à couvrir par une clause de pénalité " | |
| 176 | + "Le coût de remplacement neuf du quadruplex (18,6 × 10,7 m, 2 étages, 4 logements, sous-sol non fini) s'établit à 759 152 $ hors taxes (Bordereau!C38) : 588 275 $ de coûts directs au sens du " | |
| 177 | + "cours (C13), 23 568 $ de contingences (C14), 72 078 $ d'indirects (C32, 12,3 % des directs) et 75 231 $ de profit entrepreneurial (C37, 11 %). Cela représente 177,19 $/pi² d'aire brute hors sol " | |
| 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}). " | |
| 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).", | |
| 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é " | |
| 189 | 184 | "de retard dans le contrat de l'entrepreneur.", |
| 190 | − "Le marché confirme la viabilité : sur 11 ventes réelles de quadruplex neufs (2024-2025), la valeur implicite médiane du bâtiment est de 879 896 $ (Marché!K17), 219 974 $/logement, soit 13,7 % " | |
| 191 | − "au-dessus du bordereau (K21) ; le moteur de coût d'UQO Éval donne 827 445 $ (fourchette 763 109 – 891 781 $, K22), 8,3 % au-dessus (K23). Le profit extrait du marché atteint 28,7 % (K25) " | |
| 192 | − "contre 11 % de convention : la marge attendue est confortable, même si les comparables (logements au rez-de-jardin finis, trois étages pour certains) sont un peu plus finis que le projet.", | |
| 193 | − "Conventions déclarées : profit entrepreneurial de 11 % sur (directs + contingences + indirects) — sur les directs seuls il serait de 64 707 $ (−10 521 $, Bordereau!C43) ; contingences de 5 % " | |
| 194 | − "des directs nus ; honoraires de 4 % des directs ; intercalaires avec facteur ½ ; TPS et TVQ (113 677 $, C48:C49) exclues du coût de remplacement d'un immeuble locatif pour rester comparable " | |
| 185 | + f"Le marché confirme la viabilité : sur 8 ventes réelles de quadruplex neufs de 2 étages (2024-2025), la valeur implicite médiane du bâtiment est de 866 833 $ (Marché!K{R_MED}), 216 708 $/logement, soit 12,4 % " | |
| 186 | + f"au-dessus du bordereau (K{R_K['ecart_marche']}) ; le moteur de coût d'UQO Éval donne 827 445 $ (fourchette 763 109 – 891 781 $, K{R_K['moteur']}), 8,3 % au-dessus (K{R_K['ecart_moteur']}). Le profit extrait du marché atteint 26,7 % (K{R_K['profit_extrait']}) " | |
| 187 | + "contre 11 % de convention : la marge attendue est confortable, même si les comparables (logements au rez-de-jardin finis) sont un peu plus finis que le projet.", | |
| 188 | + "Conventions déclarées : profit entrepreneurial de 11 % sur (directs + contingences + indirects) — sur les directs seuls il serait de 64 710 $ (−10 521 $, Bordereau!C43) ; contingences de 5 % " | |
| 189 | + "des directs nus ; honoraires de 4 % des directs ; intercalaires avec facteur ½ ; TPS et TVQ (113 683 $, C48:C49) exclues du coût de remplacement d'un immeuble locatif pour rester comparable " | |
| 195 | 190 | "aux prix observés — elles restent un décaissement réel du promoteur, récupérable en partie (remboursement pour immeubles locatifs neufs).", |
| 196 | − "Limites : plan générique (gabarit du module Quantity Survey, pas les plans d'exécution) ; prix publiés RSMeans 2026 T4 localisés Gatineau, main-d'œuvre syndiquée — pas des soumissions ; " | |
| 197 | − "55 mesures du relevé non vérifiées manuellement ; comparables aux logements de rez-de-jardin et terrain indexé par le ratio des terrains vacants (1,257) ; les annonces A1-A2 sont des prix " | |
| 198 | − "demandés ; aucune provision pour l'aménagement extérieur (stationnements, paysagement) ni pour les balcons et escaliers extérieurs des logements de l'étage — à ajouter au devis définitif.", | |
| 191 | + "Limites : plan générique (gabarit du module Quantity Survey, pas les plans d'exécution) ; prix composites dérivés de prix publiés RSMeans 2026 T4 localisés Gatineau, main-d'œuvre syndiquée — pas " | |
| 192 | + "des soumissions ; comparables aux logements de rez-de-jardin et terrain indexé par le ratio des terrains vacants (1,257) ; les annonces A1-A2 sont des prix demandés ; aucune provision pour " | |
| 193 | + "l'aménagement extérieur (stationnements, paysagement) ni pour les balcons et escaliers extérieurs des logements de l'étage — à ajouter au devis définitif.", | |
| 199 | 194 | ] |
| 200 | 195 | r = 5 |
| 201 | 196 | for t in NOTE: |
modified
IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/tp2_donnees.py
+373 −0
Large diff (391 lines) is not loaded by default to keep the page fast.Load diff
modified
IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/tp2_solutions.py
+10 −20
Large diff (62 lines) is not loaded by default to keep the page fast.Load diff
modified
IMM1033-20_Methodes_du_cout/05_Ressources/scripts_gabarits_excel/verif_attendus_tp2.py
+18 −20
Large diff (43 lines) is not loaded by default to keep the page fast.Load diff