Voici un code qui marche niquel :
Sub test4()
Dim FL1 As Worksheet, Cell As Range, LC1, LC2
Dim NbC As Byte, HC, HC1, Rat, Plage As Range
Dim ok As Boolean
Application.DisplayAlerts = False
Set FL1 = Worksheets("Feuil1")
FL1.Cells.WrapText = True
Set Plage = FL1.Range("A1:" & FL1.Range("A1").SpecialCells(xlCellTypeLastCell).Address)
For Each Cell In Plage
'La est-elles fusionnée à une autre
If FL1.Range(FL1.Cells(Cell.Row, Cell.Column), _
FL1.Cells(Cell.Row, Cell.Column)).MergeCells Then
NbC = 0
LC1 = 0
ok = Not Cell.Column = 1
'Si /ok on ne fais pas le teste qui suit (Cell.column-1)
If ok Then ok = ok And Not (FL1.Range(FL1.Cells(Cell.Row, Cell.Column - 1), _
FL1.Cells(Cell.Row, Cell.Column - 1)).MergeCells)
'mais si toujours ok, donc cellule de gauche non fusionnée, ou si la
'cellule fusionnée testée se trouve sur la colonne 1
'on traite
'If Cell.Column = 1 Then Stop
If ok Or Cell.Column = 1 Then
HC1 = Cell.Height
'On recherche la largeur totale de la cellule fusionnée
'on peut adapter le nbre limite possible (ici 6) de cellules fusionnées
For i = 0 To 10
If FL1.Range(FL1.Cells(Cell.Row, Cell.Column), _
FL1.Cells(Cell.Row, Cell.Column + i)).MergeCells Then
LC1 = LC1 + FL1.Cells(Cell.Row, Cell.Column + i).Width
'et on compte le nombre de cellules fusionnées
NbC = NbC + 1
End If
Next
'fractionnement de la cellule fusionnée
FL1.Range(FL1.Cells(Cell.Row, Cell.Column), _
FL1.Cells(Cell.Row, Cell.Column)).UnMerge
'On adapte la hauteur de ligne pour la cellule contenant le texte
Rows(Cell.Row).AutoFit
'mesure de la largeur de la cellule contenant le texte
LC2 = FL1.Cells(Cell.Row, Cell.Column).Width
'calcul du rapport entre la largeur des cellules fusionnées
'... et la largeur de la cellule contenant le texte
'Fusion des cellules
FL1.Range(Cells(Cell.Row, Cell.Column), Cells(Cell.Row, Cell.Column + NbC - 1)).Merge
DoEvents
Rat = LC1 / LC2
'Application du ratio pour Calcul de la hauteur de la cellule
HC = Int((Cell.Height / Rat) + 0.5)
'Application de la hauteur de ligne
If HC > HC1 Then
FL1.Rows(Cell.Row & ":" & Cell.Row).RowHeight = HC
Else
FL1.Rows(Cell.Row & ":" & Cell.Row).RowHeight = HC1
End If
End If
End If
Next
End Sub
... mais, car il y a toujours un mais, on a une limite niveau caractères a priori donc si vous avez des infos là-dessus, je suis preneuse.
Merci.