patricktoulon
XLDnaute Barbatruc
bonjour a tous
je reviens un peu sur une curiosité
j'ai une chaine de mots
quelque soit la longueur je souhaite couper cette chaîne par lignes de X caractères (OU MOINS!!) sans couper les mots
dans la boucle je fait donc des jump en avant avec instr ou je reviens en arrière si la longueur dépasse X
tout du moins c'est ce que je pensais mais visiblement je rate quelque chose
pour ce faire j'utilise soit une boucle do/loop soir une for/next avec jumping par le instr
modele do/loop
modele for/next
mais ou donc je rate le coche ?
je reviens un peu sur une curiosité
j'ai une chaine de mots
quelque soit la longueur je souhaite couper cette chaîne par lignes de X caractères (OU MOINS!!) sans couper les mots
dans la boucle je fait donc des jump en avant avec instr ou je reviens en arrière si la longueur dépasse X
tout du moins c'est ce que je pensais mais visiblement je rate quelque chose
pour ce faire j'utilise soit une boucle do/loop soir une for/next avec jumping par le instr
modele do/loop
VB:
Sub test()
Dim x&, y&, oldpos, a&
t = "aaaa bbbb cccc dddd ee fff ggg hhhhhh iiii jj kkkk lll mmmmm nnn oo ppp qqqqq rrrrr ssssss tttt uuuuu vv www x yy zzz"
x = 0: y = 0
Do While x < Len(t)
x = InStr(y + 1, t, " ", vbTextCompare)
If x = 0 Then Exit Do
y = y + x
a = x
If (y - oldpos) > 30 Then x = InStrRev(Mid(t, 1, y), " ")
oldpos = y = y - a + x
Mid$(t, x, 1) = "*"
Loop
MsgBox t & vbCrLf & "----------------------" & vbCrLf & Replace(t, "*", vbCrLf)
End Sub
modele for/next
Code:
Sub test2()
Dim oldpos&, i&, t$
t = "aaaa bbbb cccc dddd ee fff ggg hhhhhh iiii jj kkkk lll mmmmm nnn oo ppp qqqqq rrrrr ssssss tttt uuuuu vv www x yy zzz"
oldpos = 0
For i = 1 To Len(t)
i = InStr(oldpos + 1, t, " ", vbTextCompare) 'jump en avant
If i = 0 Then Exit For 'sortie après la dernière occurrence de " "
If i - oldpos > 30 Then i = InStrRev(Mid(t, 1, i), " ") 'jump en arriere
oldpos = i 'memo old position
Mid$(t, i, 1) = "*"
Next
MsgBox t & vbCrLf & "----------------------" & vbCrLf & Replace(t, "*", vbCrLf)
End Sub