Using the vertical spacing v function and grid-in-grid might be easier.
#set page(height: auto, width: auto)
#let hour = 1.5em
#grid(
  columns: (5em,) + (6em,) * 5,
  align: center,
  [],
  ..([Lundi], [Mardi], [Mercredi], [Jeudi], [Vendredi]).map(grid.cell.with(
    stroke: 0.5pt,
    inset: (x: 1em, y: 0.5em),
    fill: rgb("ffffcc"),
  )),
  // Hours
  grid(
    ..range(8, 19).map(n => block(
      fill: rgb("ffffb3"),
      stroke: 0.5pt,
      width: 100%,
      height: hour,
      align(horizon)[#(n)--#(n + 1)],
    ))
  ),
  // Skip easy columns
  [],
  [],
  [],
  // Here's the hard column
  grid(
    block(
      fill: rgb("ffcccc"),
      stroke: 0.5pt,
      width: 100%,
      height: 2 * hour,
      align(center + horizon)[Physique],
    ),
    block(
      fill: rgb("ccccff"),
      stroke: 0.5pt,
      width: 100%,
      height: 2 * hour,
      align(center + horizon)[Maths],
    ),
    v(1.5 * hour), // 👈 Here's an arbitrary vertical spacing
    block(
      fill: white,
      stroke: 0.5pt,
      width: 100%,
      height: 1 * hour,
      align(center + horizon)[Planche],
    ),
  ),
)