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