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
| Private Sub Worksheet_Change(ByVal Target As Range)
Dim n%, P As Range, r As Range, s1, i%, s2, x$, t$, j%
n = 20 'nombre maximum de caractères par ligne, paramétrable
Set P = Range("B6:B" & Rows.Count) 'à adapter
Set r = Intersect(Target, P, Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False = False
Application.EnableEvents = False 'désactive les événements
For Each r In r 'si entrées multiples (copier-coller)
s1 = Split(r, vbLf) 'tableau des paragraphes
For i = 0 To UBound(s1)
s2 = Split(RTrim(s1(i))) 'tableau des mots
x = "": t = ""
For j = 0 To UBound(s2)
x = t & IIf(j, " ", "") & Left(s2(j), n)
t = t & vbLf & Left(s2(j), n)
t = IIf(Len(x) - InStrRev(x, vbLf) > n, t, x)
Next j
s1(i) = t
Next i
r = Join(s1, vbLf)
Next r
'---ajustement des lignes et colonnes---
P.WrapText = False
P.RowHeight = 10
P.ColumnWidth = 255
P.WrapText = True
P.Rows.AutoFit
P.Columns.AutoFit
Application.EnableEvents = True 'réactive les événements
End Sub |
Partager