🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Wrap Text dans Excel — faire tenir un texte long et grandir la ligne avec lui

|

VBA Wrap Text dans Excel — faire tenir un texte long et grandir la ligne avec lui

TL;DRWrapText = True dit à Excel de répartir un texte long sur plusieurs lignes dans la largeur de la colonne au lieu de déborder sur la cellule suivante. Cela remodèle la cellule — mais la ligne ne devient plus haute que si sa hauteur est encore en automatique. Si une macro (ou une cellule fusionnée) a figé un RowHeight explicite, le texte se renvoie de façon invisible et reste tronqué. Pour voir réellement le texte renvoyé, exécutez la chorégraphie en trois temps : fixez une largeur de colonne, activez WrapText, puis appelez Rows.AutoFit pour que la ligne grandisse à la nouvelle forme.

' Le renvoi remodele la cellule ; la hauteur de ligne doit etre libre de grandir pour le montrer.
Columns("C").ColumnWidth = 40      ' 1) donner au texte une largeur fixe contre quoi se renvoyer
Range("C2:C100").WrapText = True   ' 2) repartir le texte long sur plusieurs lignes
Range("C2:C100").EntireRow.AutoFit ' 3) laisser les lignes grandir pour tenir le texte renvoye

' Le desactiver :
Range("C2:C100").WrapText = False

WrapText est le jumeau, en code, du bouton Renvoyer à la ligne automatiquement de l'onglet Accueil. Sans lui, un libellé long file vers la droite, caché dès que la cellule voisine contient quoi que ce soit. Avec lui, le même libellé se plie sur deux ou trois lignes et reste dans sa colonne. Jusque-là, le bouton le montre clairement. Ce que le bouton cache — et ce qui fait trébucher chaque macro qui tente de l'automatiser — c'est que le renvoi est mêlé à la hauteur de ligne, et obtenir un rendu lisible impose de traiter les deux ensemble.

Ce que vous allez apprendre

  • Le modèle mental — WrapText remodèle la cellule ; il ne change pas le texte
  • La seule règle qui compte — le renvoi n'agrandit la ligne que lorsque la hauteur est en automatique
  • La séquence en trois temps qui fait vraiment apparaître le texte renvoyé (largeur, renvoi, AutoFit)
  • WrapText face à un saut de ligne forcé (Chr(10) / Alt+Entrée)
  • Relire WrapText, et pourquoi une plage mixte renvoie Null
  • Quelles colonnes renvoyer et lesquelles laisser tranquilles

Le modèle mental : remodeler la cellule, pas modifier le texte

Activer le renvoi ne touche pas à la valeur de la cellule. "North America regional summary" est la même chaîne avant et après ; ce qui change, c'est la mise en page qu'en fait Excel. Désactivé, la chaîne est dessinée sur une seule ligne qui déborde vers la droite jusqu'à ce qu'un voisin la bloque. Activé, Excel la plie en lignes qui tiennent chacune dans la largeur de la colonne, empilées vers le bas. Voyez WrapText comme un changement de la forme de la boîte où vit le texte — plus étroite et plus haute — pas du texte lui-même.

Ce changement de forme est tout l'enjeu, et il explique la seule chose que les débutants ratent : une boîte qui empile plusieurs lignes a besoin d'une ligne plus haute pour toutes les afficher. Le renvoi et la hauteur de ligne sont les deux moitiés d'une même idée. Vous ne pouvez pas changer l'un en ignorant l'autre et espérer que le résultat ait l'air correct.

La règle qui compte le plus : le renvoi n'agrandit la ligne que si la hauteur est libre

Voici l'erreur derrière presque tous les rapports « j'ai activé WrapText mais rien ne se renvoie ». WrapText = True plie le texte à l'intérieur, mais la ligne ne devient plus haute pour révéler ces lignes supplémentaires que si sa hauteur est en automatique. Si quoi que ce soit a déjà fixé la hauteur, Excel conserve cette hauteur et coupe les lignes renvoyées hors de vue :

Rows(2).RowHeight = 15         ' une macro a fige la hauteur plus tot...
Range("C2").WrapText = True    ' le texte se renvoie a l'interieur, mais la ligne reste a 15pt - tronque

Deux choses figent couramment la hauteur : une macro qui a réglé RowHeight sur un nombre, et — la plus sournoise — une cellule fusionnée, parce que Rows.AutoFit refuse de redimensionner une ligne qui en contient une (voir AutoFit). Le correctif est de laisser la hauteur en automatique et de laisser AutoFit la mesurer, ou, si vous avez vraiment besoin de cellules fusionnées, de calculer et définir le RowHeight vous-même. La règle à retenir : WrapText = True remodèle la cellule, mais il faut encore que quelque chose rende la ligne assez haute pour l'afficher.

La séquence en trois temps qui fonctionne vraiment

Parce que le renvoi et la hauteur sont liés, obtenir un rendu lisible est un enchaînement ordonné en trois temps — et l'ordre compte :

Columns("C").ColumnWidth = 40        ' 1) une largeur FIXE - le texte a besoin de quelque chose contre quoi se renvoyer
Range("C2:C100").WrapText = True     ' 2) activer le renvoi
Range("C2:C100").EntireRow.AutoFit   ' 3) faire grandir les lignes a la nouvelle forme renvoyee

La première étape est celle que les gens sautent. L'AutoFit de ligne ne peut calculer une hauteur qu'une fois la largeur de colonne arrêtée — le texte doit savoir quelle largeur lui est permise avant de pouvoir décider du nombre de lignes qu'il lui faut. Si vous faites l'AutoFit de la largeur de colonne et de la hauteur de ligne, les deux s'affrontent : élargir la colonne laisse le texte tenir sur moins de lignes, ce qui change la hauteur, et vous obtenez un résultat instable. Fixez donc la largeur d'abord (ne l'ajustez pas automatiquement), puis renvoyez, puis faites l'AutoFit de la hauteur. Faites les trois dans cet ordre et le rendu est correct à chaque fois.

WrapText face à un saut de ligne forcé

Il y a deux façons différentes pour un texte de se retrouver sur plusieurs lignes, et les confondre sème le trouble. WrapText est un renvoi souple, piloté par la largeur : Excel décide où couper selon la largeur de la colonne, et les coupures se déplacent si vous redimensionnez la colonne. Un saut de ligne forcé est un caractère que vous placez vous-même dans la chaîne — Chr(10) en VBA, ou Alt+Entrée à la main — qui impose une coupure à cet endroit précis quelle que soit la largeur :

Range("C2").Value = "Line one" & Chr(10) & "Line two"   ' un saut force a l'interieur du texte
Range("C2").WrapText = True                              ' necessaire pour que le saut force SOIT VISIBLE

Le piège : même un saut Chr(10) forcé ne s'affiche sur deux lignes que lorsque WrapText est activé — sinon Excel montre un petit glyphe en forme de carré ou colle tout ensemble. Les deux fonctionnent donc de concert : utilisez Chr(10) quand vous voulez une coupure à un endroit précis (un bloc d'adresse, un libellé au-dessus d'une valeur), et comptez sur WrapText seul quand vous voulez juste qu'un texte long se plie pour tenir.

Relire WrapText, et le Null d'une plage mixte

WrapText est une propriété par cellule. Lisez-la sur une seule cellule et vous obtenez True ou False. Lisez-la sur une plage où certaines cellules se renvoient et d'autres non, et Excel ne peut pas donner une réponse unique, alors il renvoie Null :

Debug.Print Range("C2").WrapText          ' True ou False
Debug.Print Range("C2:C100").WrapText     ' Null si la plage est mixte

Ce Null n'est pas une erreur — c'est Excel qui vous dit que la plage est hétérogène. Si vous devez vérifier qu'une plage est renvoyée de façon uniforme, testez d'abord IsNull(rng.WrapText) ; un résultat non-Null signifie que toutes les cellules s'accordent. En pratique, vous la relisez rarement — vous la définissez sur toute une colonne d'un coup, ce qui garde la plage uniforme et évite complètement la question.

Quelles colonnes renvoyer

Le renvoi mérite sa place sur les colonnes de texte — descriptions, commentaires, adresses, libellés longs — où le pliage garde la colonne étroite et la feuille lisible. Il est généralement malvenu sur les colonnes de nombres : un nombre renvoyé est plus difficile à lire, pas plus facile, et les nombres en ont rarement besoin. L'habitude efficace consiste à définir WrapText sur toute la colonne en une seule instruction (Columns("C").WrapText = True) plutôt que de boucler cellule par cellule, puis à faire l'AutoFit des lignes une seule fois pour tout le bloc. Le définir par cellule dans une boucle est à la fois plus lent et une source fréquente du Null de plage mixte vu plus haut. Décidez par colonne, appliquez une fois, faites l'AutoFit une fois.

Comment ExcelMaster aide

Renvoyer à la ligne est le réglage qui ressemble à une ligne unique puis produit un rendu tronqué que personne ne remarque avant l'impression du rapport — la hauteur de ligne avait été figée plus tôt, la largeur de colonne n'a jamais été fixée si bien qu'AutoFit a mesuré la mauvaise forme, ou le saut Chr(10) forcé ne s'affiche jamais parce que le renvoi était resté désactivé.

ExcelMaster vous laisse décrire le résultat — « renvoie la colonne de description et laisse les lignes grandir », « mets l'adresse sur trois lignes dans cette cellule » — et il écrit les étapes dans le bon ordre : une largeur de colonne fixe d'abord, WrapText sur toute la colonne, puis Rows.AutoFit, avec Chr(10) là où vous avez demandé un saut forcé et le renvoi activé pour qu'il s'affiche. Il signale les cellules fusionnées qui empêcheront la ligne de grandir. Vous gardez le classeur et le code.

Questions fréquentes

Pourquoi mon WrapText VBA ne fonctionne-t-il pas ?

Le texte se renvoie presque certainement — il ne s'affiche simplement pas, parce que la hauteur de ligne est fixe. La hauteur de ligne ne grandit pour révéler les lignes renvoyées que lorsqu'elle est en automatique. Laissez la hauteur tranquille et appelez Rows.AutoFit après avoir mis WrapText = True, et assurez-vous d'abord que la colonne a une largeur fixe pour que le texte ait quelque chose contre quoi se renvoyer. Si la cellule est fusionnée, l'AutoFit de ligne ne la redimensionnera pas du tout — définissez le RowHeight explicitement.

Comment renvoyer le texte et faire l'AutoFit de la hauteur de ligne en VBA ?

Faites trois étapes dans l'ordre : fixez une largeur de colonne (Columns("C").ColumnWidth = 40), activez le renvoi (Range("C2:C100").WrapText = True), puis faites l'AutoFit des lignes (Range("C2:C100").EntireRow.AutoFit). Fixer la largeur d'abord est important — l'AutoFit de ligne ne peut mesurer la hauteur nécessaire qu'une fois que le texte sait quelle largeur lui est permise.

Comment désactiver Renvoyer à la ligne en VBA ?

Mettez la propriété à False : Range("C2:C100").WrapText = False. Si les lignes avaient grandi pour tenir le texte renvoyé, elles ne rétréciront pas d'elles-mêmes — rappelez Rows.AutoFit ensuite, ou définissez un RowHeight explicite, pour les ramener à une hauteur d'une seule ligne.

Quelle est la différence entre WrapText et un saut de ligne Chr(10) ?

WrapText est un renvoi souple, piloté par la largeur — Excel choisit où couper selon la largeur de la colonne, et les coupures se déplacent quand vous redimensionnez. Chr(10) (l'équivalent d'Alt+Entrée) est un saut forcé que vous placez dans la chaîne à un endroit précis. Un saut forcé ne s'affiche sur plusieurs lignes que lorsque WrapText est également activé, les deux sont donc généralement utilisés ensemble.

Pourquoi Range.WrapText renvoie-t-il Null ?

Parce que WrapText est une propriété par cellule et que la plage est mixte — certaines cellules se renvoient et d'autres non, si bien qu'Excel ne peut pas renvoyer un seul True ou False et donne Null à la place. Lisez-la sur une seule cellule pour une réponse nette, ou testez IsNull(rng.WrapText) pour vérifier qu'une plage entière est uniforme. Définir WrapText sur toute la colonne d'un coup la garde cohérente.

Testé dans

Testé dans : Excel 365 (Windows 11), VBA 7.1 — vérifié le 10/09/2026.

Guides connexes : VBA AutoFit · VBA Figer les volets · VBA Largeur de colonne · VBA Fusionner les cellules · VBA Font