Bonjour a tous
pour un autre sujet Unparia m'a donné une astuce pour gérer le fontweight ou même le fontWidth
j'ai plus ou moins repris l'astuce pour en faire autre chose :un compteur de ligne
en effet c'est un sujet qui est apparu très souvent: comment détecter les sauts de lignes dans une cellules quand il n'y en a pas!!!
mais que la propriété (format cellule/ajuster a la ligne) est activée et donc le texte visuellement sur plusieurs lignes
j'ai donc créé une petite fonction que je viens vous montrer
elle a lair de fonctionner correctement au vues des tests que j'ai fait
cependant je me pose une question au sujet de ce + 9 que l'on trouve dans la fonction on peut aller jusqu'à +7
a quoi est il du ?au fait que le texte dans les cellules a une marge gauche tandis que le label en autosize non ?
ma 2d question c'est aurait il un moyen de simplifier le code bien qu'étant pas très volumineux c'est peu de le dire
voila la fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Function ligne(cel) If cel.Text <> "" Then Set Obj = ActiveSheet.OLEObjects.Add("Forms.Label.1") With Obj: .Object.Font.Size = cel.Font.Size: e = 1 Do DoEvents i = i + 1 .Object.AutoSize = False .Width = 1000: .Object.Caption = Mid(cel.Text, 1, i): .Object.AutoSize = True: a = a + Mid(cel.Text, i, 1) If .Width > (cel.Width - 9) * e Then a = a & vbCrLf: e = e + 1 Loop Until i = Len(cel.Text) .Delete End With ligne = a End If End Function
et la sub de test
si vous avez une autre voie a proposer je prends aussi bien entendu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sub test() Dim texte As String, cel As Range Set cel = ActiveSheet.[b2] texte = cel.Text ar = ligne(cel) MsgBox ar End Sub
merci pour vos retours et participation d'avance
Partager