Avec `\filbreak` avant chaque section, il est peu probable qu'il y ait un saut de page dans une section :
\documentclass{article}
\usepackage{duckuments}
\usepackage{etoolbox}
\preto{\section}{\filbreak}
\preto{\subsection}{\filbreak}
\begin{document}
\section{title}
\blindduck
\subsection{title}
\blindduck
\subsection{title}
\blindduck
\subsection{title}
\blindduck[-3]
\subsection{title}
\blindduck
\subsection{title}
\blindduck
\subsection{title}
\blindduck
\section{title}
\blindduck
\end{document}
Si ça ne marche pas, place chaque section dans une `minipage``minipage`.