Accéder au contenu principalAccéder à la navigationAccéder au pied de page
Page d'accueil IncluddyPage d'accueil Includdy
  • FAQ
  • Blog
  • Glossaire
  • Contact
Includdy

Rendons le web accessible à tous

Produit

  • Scan automatique
  • Correction guidée
  • Collaboration

Ressources

  • FAQ
  • Blog
  • Glossaire
  • Plan du site

Légal

  • CGU
  • CGV
  • Mentions légales
  • Politique de confidentialité

© 2026 Includdy. Tous droits réservés.

  1. Accueil
  2. Glossaire
  3. Tableau de données complexe

Tableau de données complexe


Un tableau de données complexe est un tableau HTML dont certains en-têtes ne couvrent pas toute leur ligne ou colonne, typiquement à cause de cellules fusionnées ou de sous-groupes d'en-têtes. L'attribut scope ne suffit plus : il faut associer chaque cellule à ses en-têtes via les attributs id et headers. Quand c'est possible, scinder le tableau en plusieurs tableaux simples reste la meilleure solution.


Un tableau de ventes par trimestre avec des en-têtes « Semestre 1 » et « Semestre 2 » fusionnés sur deux colonnes chacun. Visuellement, la structure est limpide. Pour un lecteur d'écran, c'est un champ de mines : il ne sait pas quel en-tête s'applique à quelle cellule.

#Quand un tableau devient-il « complexe » ?

Dès que les en-têtes ne se répartissent plus uniquement sur la première ligne et la première colonne. Cellules fusionnées avec colspan ou rowspan, en-têtes imbriqués sur plusieurs niveaux, sous-groupes thématiques au milieu du tableau : autant de cas où l'attribut scope ne peut plus exprimer les relations entre en-têtes et données.

Le RGAA y consacre plusieurs critères dans sa thématique 5. Le mécanisme prévu par les WCAG : poser un id sur chaque <th>, puis lister ces identifiants dans l'attribut headers de chaque <td>.

<table>
  <caption>Ventes trimestrielles par zone</caption>
  <thead>
    <tr>
      <th rowspan="2" id="zone">Zone</th>
      <th colspan="2" id="s1">Semestre 1</th>
      <th colspan="2" id="s2">Semestre 2</th>
    </tr>
    <tr>
      <th id="t1" headers="s1">T1</th>
      <th id="t2" headers="s1">T2</th>
      <th id="t3" headers="s2">T3</th>
      <th id="t4" headers="s2">T4</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th id="nord" headers="zone">Nord</th>
      <td headers="nord s1 t1">120 €</td>
      <td headers="nord s1 t2">145 €</td>
      <td headers="nord s2 t3">98 €</td>
      <td headers="nord s2 t4">110 €</td>
    </tr>
  </tbody>
</table>

Chaque cellule « 120 € » est reliée à ses trois en-têtes : « Nord », « Semestre 1 », « T1 ». Le lecteur d'écran peut annoncer le contexte complet.

#Le piège : id/headers et le support réel

Le mécanisme est propre sur le papier. En pratique, le support par les lecteurs d'écran reste inégal. JAWS le gère correctement, NVDA s'en sort selon les versions, VoiceOver a longtemps ignoré headers. Et chaque cellule doit être indexée manuellement. Une seule erreur d'identifiant casse la chaîne pour toute la ligne.

C'est pourquoi Access42 recommande de toujours se poser la question avant de coder : ce tableau peut-il être scindé en deux ou trois tableaux simples avec scope ? La réponse est souvent oui.

Simplifier un tableau, ce n'est pas un aveu de faiblesse technique. C'est un choix qui profite à tous les utilisateurs, y compris ceux qui voient très bien mais qui peinent à lire des grilles à 15 colonnes sur un écran de téléphone.

#En résumé

Un tableau est « complexe » quand scope ne suffit plus à relier en-têtes et données. Le mécanisme id/headers existe pour ces cas, mais sa maintenance est lourde et son support inégal. La meilleure approche : scinder en tableaux simples chaque fois que le contenu le permet.

Retour au glossaire

Partagez cet article

Partagez cet article

Pour aller plus loin

Tableau de données

Un tableau de données est un élément HTML qui organise des informations en lignes et en colonnes, où chaque cellule entretient une relation logique avec ses en-têtes. Contrairement à un tableau de mise en forme (utilisé pour disposer des éléments visuellement), un tableau de données exige un balisage sémantique (balises <th>, attribut scope, élément <caption>) pour que les lecteurs d'écran restituent le contexte de chaque valeur.

En-tête de colonne ou de ligne

Dans un tableau de données, un en-tête de colonne ou de ligne est la cellule qui sert d'intitulé aux autres cellules de cette colonne ou de cette ligne. En HTML, c'est la balise <th> qui remplit ce rôle. Sans elle, un lecteur d'écran restitue les cellules sans contexte : l'utilisateur entend des valeurs sans savoir à quoi elles correspondent.

Légende

En accessibilité web, une légende est un texte visible qui identifie un contenu groupé. HTML propose trois balises selon le contexte : <caption> pour les tableaux, <figcaption> pour les figures, et <legend> pour les groupes de champs dans un formulaire.