Réduire un champ trop long sans couper les mots ? - VB/VBA/VBS - Programmation
Marsh Posté le 21-02-2007 à 11:20:08
Si la séparation doit intervenir entre les mots, utilise la fonction Split() qui sépare une chaine en plusieurs sous-chaines en fonction d'un caractère de séparation (ici ce serait l'espace).
À toi de voir comment ensuite regrouper ou dispatcher ces sous-chaines dans les cellules.
Marsh Posté le 22-02-2007 à 15:06:44
Split marche effectivement bien sauf que tu ne peux pas déterminer à quel le longueur couper la chaine de caractère : s'il y a pluieurs "espaces" dans la chaine, par exemple.
En admettant que tes cellules sont toutes en colonne A, j'opterais plutot pour un truc du type :
Sub split()
Dim i As Integer, a As Integer, b As Integer, j As Integer
Dim longueurmax As Integer, cpt As Integer
longueurmax = 50
j = 1
a = 1
b = 1
Do Until IsEmpty(Cells(a, b))
Do While Len(Cells(a, b)) > longueurmax
If InStr(Left(Cells(a, b), longueurmax), " " ) Then
For i = 0 To longueurmax
If Mid(Cells(a, b), longueurmax - i, 1) = " " Then
Cells(a, b + j) = Right(Cells(a, b), Len(Cells(a, b)) - longueurmax + i)
Cells(a, b) = Left(Cells(a, b), longueurmax - i - 1)
b = b + 1
Exit For
End If
Next i
End If
Loop
b = 1
a = a + 1
Loop
End Sub
Voila.
Marsh Posté le 22-02-2007 à 21:29:03
Bonsoir,
l'utilisation de split me semble bonne aussi:
à moins que je me sois planté quelque part, ce qui n'est pas impossible
Sub sspplliitt()
Dim vase As String
longueur = 30
bout = Cells(65527, 1).End(xlUp).Row
avecespace = False ' true pour conserver les espaces en trop si nécessaire
For ligneencours = 1 To bout
sp = split(Cells(ligneencours, 1), " " )
u = UBound(sp)
j = 1
Cells(ligneencours, j) = ""
For i = 0 To u
trisp = Trim(sp(i))
If trisp > "" Or avecespace Then
If Len(Cells(ligneencours, j) & trisp) > longueur Then
j = j + 1
Cells(ligneencours, j) = ""
End If
Cells(ligneencours, j) = Cells(ligneencours, j) & trisp & " "
sp(i)=""
End If
Next
Next
End Sub
Marsh Posté le 20-02-2007 à 22:50:52
Bonjour,
Je cherche en vain depuis plusieurs jours d'automatiser un traitement de fichiers sous Excel/VBA.
L'idée, c'est de séparer le contenue d'une cellule en deux lorsque le champ est trop long.
J'ai essayé avec la fonction NBCAR mais ça coupe les mots en plein milieu.
En faite, il me faudrait l'équivalent de la fonction "retour à la ligne automatique" mais exploitable dans deux cellules séparées au lieu d'un retour chariot dans la cellule.
J'ai trouvé un tuto pour séparer les adresses, villes et code postaux.
Mais les fichiers que je dois traiter sont des noms de personnes ou de sociétés et ça ne marche pas.
Je m'en remets à votre savoir.