XL 2021 VBA - Comment ajuster la largeur d'une colonne sur une cellule qui contient des retours à la ligne

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Solution
Bonjour,

En VBA, je n'arrive pas à "AutoFiter" une colonne sur la base de la largeur d'une cellule qui contient un ou des vbLf.
Dans ta macro, avant de faire l'autofit tu diminues la largeur de la colonne au minimum, alors qu'à mon avis il faudrait faire comme quand on le fait manuellement, c'est-à-dire augmenter au maximum la largeur de ladite colonne.

VB:
Sub a()
    With [F10]
        ' Force la plus grande largeur
        .ColumnWidth = 255
        
        ' Affecte la valeur
        .Value = "Bonjour" & vbCrLf & "à tous les XLDnautes"
        
        ' Ajuste la largeur
        ActiveSheet.Columns(.Column).EntireColumn.AutoFit
    End With
End Sub
Bonjour,
pourquoi 2 autofit ?

VB:
Sub AutoFitAvecLF()
    Const Texte = "Bonjour" & vbLf & "à tous les XLDnautes"
    Dim c As Range
    
    Set c = [F10]
    With c.Worksheet.Cells(1, Columns.Count)
        .Value = Replace(Texte, vbLf, "")
        .WrapText = False
        .EntireColumn.AutoFit
        c.EntireColumn.ColumnWidth = .ColumnWidth
        .Clear
    End With
    c.Value = Texte
    c.WrapText = True
End Sub

A voir
Nicolas
 
bonjour
et surtout la méthode contraint tout le reste de cette colonne à la même largeur (testé je me disais aussi 😉)
alors que l'autofit est sensé justement auto dimensionner la largeur en fonction du texte et des mots pour de pas les casser si ils sont raisonnablement pas trop longs et donc la ligne la plus longue (entre deux #10 ) se trouvant dans une des cellules de la colonne
avec ta méthode tu force excel a couper une phrase (voir un mot) en 2 voir 3
il te suffit de tester dans la cellule en dessous un texte avec un mot plus long de façon à observer le phénomène
et c'est sans compter les #10 qu'excel met dans une cellule qui n'en a pas si la cellule n'est pas assez large
 
Bonjour,

En VBA, je n'arrive pas à "AutoFiter" une colonne sur la base de la largeur d'une cellule qui contient un ou des vbLf.
Dans ta macro, avant de faire l'autofit tu diminues la largeur de la colonne au minimum, alors qu'à mon avis il faudrait faire comme quand on le fait manuellement, c'est-à-dire augmenter au maximum la largeur de ladite colonne.

VB:
Sub a()
    With [F10]
        ' Force la plus grande largeur
        .ColumnWidth = 255
        
        ' Affecte la valeur
        .Value = "Bonjour" & vbCrLf & "à tous les XLDnautes"
        
        ' Ajuste la largeur
        ActiveSheet.Columns(.Column).EntireColumn.AutoFit
    End With
End Sub
 
Bonjour à tous, 🙂
vous allez comprendre pourquoi je parlais de #10 dynamiques

Pour le fun, une procédure générique qui adapte la largeur d'une colonne et/ou la hauteur d'une ligne en fonction d'une unique cellule.
Le code est dans module1. Pour tester la procédure, sélectionner une cellule de la plage A5:A12.

VB:
Sub AdapterLargHautPlier(maCellule As Range, enLargeur As Boolean, enHauteur As Boolean, Replier As Boolean)
' --- considère une cellule : maCellule
' --- adapte (ou non) la largeur de toute la colonne à la largeur (autofit) de maCellule  : enLargeur
' --- adapte (ou non) la hauteur de toute la ligne à la hauteur (autofit) de maCellule    : enHauteur
' --- renvoie automatiquement (ou non) le texte de maCellule à la ligne                   : Replier

Dim LigVide&, ColVide&, Vide As Range
   Application.ScreenUpdating = False
   On Error GoTo MENAGE
   LigVide = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count
   ColVide = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count
   Set Vide = Cells(LigVide, ColVide)
   maCellule.Copy Vide
   Vide.RowHeight = 1
   Vide.ColumnWidth = 255
   Vide.WrapText = (Replier = True)
   Vide.EntireRow.AutoFit
   Vide.EntireColumn.AutoFit
   maCellule.WrapText = (Replier = True)
   If enLargeur Then maCellule.ColumnWidth = Vide.ColumnWidth
   If enHauteur Then maCellule.RowHeight = Vide.RowHeight
MENAGE:   Vide.EntireRow.Delete
End Sub
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
99
Réponses
7
Affichages
249
  • Résolu(e)
Microsoft 365 DateDif()
Réponses
5
Affichages
167
Retour