---
suivi: 1731
date: 2026-09-28
sujet: Export Excel et pagination de la liste des parcelles
chantier: module-foncier
type: feature
statut: poussé
hash:
fichiers:
  - app/Services/Foncier/ParcelleProspectionQuery.php
  - app/Services/Foncier/ProprietaireListeQuery.php
  - app/Services/Foncier/ProspectionListeExportService.php
  - app/Http/Controllers/Foncier/ProspectionController.php
  - app/Models/User.php
  - resources/js/Pages/Foncier/Prospection/Index.vue
  - routes/web.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - tests/Unit/ParcelleExportPagination1731SourceTest.php
  - public/build/manifest.json
  - docs/suivi/SUIVI_1731_export_excel_pagination_parcelles.md
---

# SUIVI #1731 — export Excel et pagination des parcelles

Sur Parcelles, Exporter en Excel reprend la liste courante (filtres, tri, mode, habilitation) sur toutes les pages. Le nombre de lignes se choisit parmi 50 (défaut), 100 et 200, et ce choix est conservé. Départ `85310eed` (prérequis #1729 `89e9c7ef`).

## PROMPT ENVOYÉ

Export Excel de la liste courante, toutes pages, colonnes visibles, surface en nombre, référence cadastrale en texte. Pagination 50 / 100 / 200 mémorisée. Une seule construction de requête pour la liste et l'export. Librairie Excel déjà présente.

## FICHES LUES

- **#1729** — le filtre Référent est ignoré sans vue complète. L'export reprend `filtresParcelle`, qui appelle `referentsFiltres`.
- **#1633** — pas de JOIN sur la liste. Le tri et les pastilles restent dans `ParcelleProspectionQuery`. Le départage par `parcelles.id` est ajouté aussi au tri par défaut, pour que l'ordre des pages et celui de l'export coïncident.

## SYNTHÈSE

`requeteListe()` (filtres + eager + tri) sert à la page et à l'export du mode parcelle. Les autres modes réutilisent `ProprietaireListeQuery::requeteListe` et `lignesCommune`. Excel : PhpOffice\PhpSpreadsheet, déjà utilisé par `AvisImpositionExportService` et `GrillePrixExportService`. Référence en texte, surface et valorisation en nombre. Fichier `parcelles_AAAA-MM-JJ.xlsx`.

La mesure du parcours complet n'a pas pu être faite : MySQL local a refusé la connexion (`SQLSTATE[HY000] [2002]`). Pas de durée inventée, pas d'estimation au-delà de 60 s.

## DÉPLOIEMENT

git pull origin main
php artisan view:clear
php artisan route:clear
php artisan journal:sync

## LEÇON

La page et l'export doivent appeler la même fonction de requête. Un second filtre, même recopié, diverge dès le lot suivant. `chunk()` respecte l'ORDER BY existant : le départage par id doit être dans cette requête, y compris pour le tri par défaut.
