Ajustement automatique hauteur de ligne

Bonjour à tous.
Dans la feuille de calcul joint, j'essaie sans succès d'ajuster automatiquement la hauteur d'une ligne via un bouton autofit, afin de montrer tout le contenu de la colonne "Description"

14autofit.xlsm (27.15 Ko)

Le code testé est le suivant :

Option Explicit

Sub cellAutoFit()

Dim cell As Range

Application.ScreenUpdating = False

For Each cell In Range("b24:b200")

    cell.EntireRow.WrapText = True
    cell.EntireRow.AutoFit

    If cell.Value = "newLine" Then Exit Sub 'ou exit For

Next cell

Application.ScreenUpdating = True

End Sub

Aussi, lorsque j'essaie l'ajustement manuel (double clic sur la barre verticale), j'obtiens le même type d'ajustement qu'en automatique.

Merci de m'aider à comprendre d'où vient mon erreur.

Bonjour teddyBear37,

Ce sont les cellules fusionnées qui perturbent le fonctionnement de "Autofit".

Pour une ligne donnée, on sauvegarde la largeur de la colonne B ainsi que la largeur totale de la plage fusionnée. Ensuite on défusionne la cellule de la colonne B, on élargit la colonne B à la largeur totale de l'ex-plage fusionnée. On renvoie automatiquement à la ligne le contenu de la cellule de la colonne B et on ajuste la hauteur de la ligne (Autofit). Ensuite on réaffecte à la colonne B sa largeur initiale et on refusionne l'ex-plage. Le code est dans Module1.

Sub CellAutoFit()
Dim cell As Range, rngMerged As Range, wCell, wMerged, Larg, x As Range
   Application.ScreenUpdating = False
   For Each cell In Range("b24:b200")
      Set rngMerged = cell.MergeArea      ' la plage fusionnée pour la cellule Cell
      wMerged = 0                         ' wmerged : largeur totale de la plage fusionnée
      For Each x In rngMerged.Cells: wMerged = wMerged + x.ColumnWidth: Next
      wCell = cell.ColumnWidth            ' largeur initiale de la colonne de cell
      cell.UnMerge: cell.WrapText = True  ' on défusionne Cell + renvoi à la ligne automatique
      cell.ColumnWidth = wMerged          ' on élargit cell à la largeur de l'ex-plage fusionnée
      cell.EntireRow.AutoFit              ' on ajuste la hauteur de la ligne de cell
      cell.ColumnWidth = wCell            ' on réaffecte à la colonne de cell sa largeur initiale
      rngMerged.Merge                     ' on fusionne à nouveau l'ex-plage fusionnée
      If cell.Value = "newLine" Then Exit Sub
   Next cell
   Application.ScreenUpdating = True
End Sub

Salut Mafraise.

Wow, c'est de l'art ce code ! Merci beaucoup ! Je ne serai jamais aller jusque là ^^

Si je comprends bien, pour pouvoir faire mon "autofit", il faut obligatoirement que toutes les cellules fusionnées d'une même ligne soient defusionnées pour y parvenir ? Donc si j'avais une autre cellule sur la même ligne, il fallait aussi la defusionner ?

Aussi, je ne comprends pas bien que fait cette ligne, peux-tu m'en dire un peu plus stp ? ATTESTATION SANS PRIX.pdf.pdf

Après essai, j'ai un comportement bizarre sur ce fichier, il ne s'ajuste pas nettement au contenu de la cellule, je n'arrive pas du tout à comprendre pourquoi.

18autofit.xlsm (27.66 Ko)

je viens de m'apercevoir de l'erreur :

Aussi, je ne comprends pas bien que fait cette ligne, peux-tu m'en dire un peu plus stp ? For Each x In rngMerged.Cells: wMerged = wMerged + x.ColumnWidth: Next

Bonjour,

Aussi, je ne comprends pas bien que fait cette ligne, peux-tu m'en dire un peu plus stp ? For Each x In rngMerged.Cells: wMerged = wMerged + x.ColumnWidth: Next

Calculer la largeur totale de la cellule fusionnée, en additionnant les largeur de chaque cellule la constituant.

Pour chaque cellule (x) dans la plage des cellules fusionnées (rngMerged), ajouter à la largeur calculée (wMerged) la largeur de la cellule en question (x.ColumnWidth).

On ne peut malheureusement pas calculer la largeur totale d’un groupe de cellule en une étape, c’est ce qu’expliquait mafraise, d’où la boucle.

Merci saboh12617 pour ta réponse, je comprends beaucoup mieux !

Je n'ai toujours pas trouvé pourquoi l'autofit ne fonctionne pas bien lorsque j'utilise le retour à la ligne manuel (alt + entrée), comme sur le dernier excel que j'ai joint...

Avez-vous une explication à cela ?

Bonjour du mercredi teddyBear37 , bonjour saboh12617,

Un nouvel essai pour ajuster la hauteur. Le code est dans le module "modCellAutoFit" (j'ai changé le nom car je n'aime pas avoir des entités de nature différente porter le même nom).

Pouvez-vous tester ? Merci .

Bonjour mafraise. Merci pour ta réponse et ta super bonne humeur

Le nouveau code n'a malheureusement rien changé, j'ai toujours bizarrement beaucoup d'espace autour de la cellule que j'ai rempli de texte...

Ci joint le fichier avec le nouveau code

16autofit.xlsm (27.27 Ko)

Re,

Merci pour ton test.

Après avoir fait des recherches, il semble que ce soit pas forcément simple. Cela dépendrait aussi de la police et/ou de la fixation préalable et manuelle d'une hauteur de ligne.

Si vous modifiez la taille de la police de 11 à 10 puis lancez la macro, que se passe-t-il ?

Si vous restez à une taille de 11 en changeant de police, que se passe-t-il ?

Sur ma bécane, dès qu'on est en taille 11 avec la police calibri, la macro ne fait plus son job !?!!??!!! Avec la taille 10 ou 12, c'est bon.

Si on reste en taille 11 alors avec certaines polices ça marche mais avec d'autres non, allez comprendre.

Moi pas comprendre .

Testé à l'instant, avec taille police 10 ou 12, ça fonctionne parfaitement. Changement de police Arial Narrow, ça fonctionne aussi parfaitement.

Vraiment vicieux ce défaut lol. Reste plus que je choisisse une police différente de calibri pour esperer ne plus avoir ce type de problème.

Merci beaucoup mafraise et saboh12617 pour votre aide.

Au top !

Hello,

Pas de soucis. Je pense que cela vient du fait que XL doit utiliser une valeur codée “en dur” pour la hauteur du texte, qui ne s’adapte pas aux différentes hauteurs de polices. C’est comme ça que j’expliquerai l’erreur.

Rechercher des sujets similaires à "ajustement automatique hauteur ligne"