Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

ajustement des textes dans des cellules fusionnées

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 !

chaelie2015

XLDnaute Accro
Bonjour forum

Quelqu’un peut m’expliquer comment faire pour ajuster les textes dans des cellules fusionnées

Dans mon exemple ne s’afficher pas complet et quand je mets « aperçu avant l’impression » il s’affiche bien ??????
merci
 

Pièces jointes

Re,

Si l'on veut traiter les cellules dès qu'elles sont modifiées utiliser :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [B:B], Me.UsedRange) 'colonne B
If Target Is Nothing Then Exit Sub
Dim marge#
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With TextBox1
  .Visible = False
  For Each Target In Target 'si entrées multiples(copier-coller)
    .AutoSize = False
    .Font.Name = Target.Font.Name
    .Font.Size = Target.Font.Size
    TextBox1 = ""
    .AutoSize = True
    marge = TextBox1.Width - 1 'on conserve une petite marge de 1 point
    .AutoSize = False
    .Width = 5000
    .Value = Target
    .AutoSize = True
    Target.UnMerge
    While Target.MergeArea.Width < TextBox1.Width - marge
      Range(Target, Target.Offset(, 1)).Merge
    Wend
    If Not Intersect(ActiveCell, Target.MergeArea) Is Nothing Then Target.MergeArea.Select
  Next
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

Re,

Avec ceci la durée d'exécution est de 29 secondes :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, [B:B], Me.UsedRange) 'colonne B
If Target Is Nothing Then Exit Sub
Dim t, marge#, w#, col%
t = Timer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With TextBox1
  .Visible = False
  .AutoSize = False
  TextBox1 = ""
  .AutoSize = True
  marge = TextBox1.Width - 1 'on conserve une petite marge de 1 point
  For Each Target In Target 'si entrées multiples(copier-coller)
    .AutoSize = False
    .Font.Name = Target.Font.Name
    .Font.Size = Target.Font.Size
    .Width = 5000
    .Value = Target
    .AutoSize = True
    w = TextBox1.Width - marge
    Target.UnMerge
    col = 1
    While Target.Resize(, col).Width < w: col = col + 1: Wend
    Target.Resize(, col).Merge
    If Not Intersect(ActiveCell, Target.MergeArea) Is Nothing Then Target.MergeArea.Select
  Next
End With
MsgBox "Durée d'exécution " & Format(Timer - t, "0.0 \s"), , "1000 cellules fusionnées"
End Sub
En fait ce qui prend du temps ce sont les manipulations sur la TextBox.

J'ai vérifié que les marges de la TextBox ne dépendent pas de la police, j'ai donc sorti le calcul de marge de la boucle.

Edit : les opérations de fusion elles-mêmes prennent moins d'une seconde !

Fichier (2).

A+
 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…