1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| Sub test_255() 'Défense de rire !
Dim FL1 As Worksheet, Cell As Range, LC1, LC2
Dim NbC As Byte, HC, HC1, Rat
Dim ok As Boolean
Dim Plage as range
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 cellule est-elle 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 fait pas le test 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 ok Or Cell.Column = 1 Then
HC1 = Cell.Height
'On recherche la largeur totals de la cellule fusionnée
'on peut adapter le nbre limite possible (ici 6) de cellules fusionnées
For i = 0 To 5
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
'Fusion des cellules
FL1.Range(Cells(Cell.Row, Cell.Column), Cells(Cell.Row, Cell.Column + NbC - 1)).Merge
DoEvents
'calcul du rapport entre la largeur des cellules fusionnées
'... et la largeur de la cellule contenant le texte
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 |
Partager