Autochallenge programmation interfaces VBA
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:
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
Code:
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 |
si vous avez une autre voie a proposer je prends aussi bien entendu
merci pour vos retours et participation d'avance