Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1218 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Réduire un champ trop long sans couper les mots ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Réduire un champ trop long sans couper les mots ?

n°1517321
jlgjlg
Posté le 20-02-2007 à 22:50:52  profilanswer
 

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.

mood
Publicité
Posté le 20-02-2007 à 22:50:52  profilanswer
 

n°1517491
tegu
Posté le 21-02-2007 à 11:20:08  profilanswer
 

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.

n°1518343
aprilthe5i​th
Posté le 22-02-2007 à 15:06:44  profilanswer
 

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.

n°1518621
seniorpapo​u
Posté le 22-02-2007 à 21:29:03  profilanswer
 

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


Message édité par seniorpapou le 23-02-2007 à 06:56:32

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Réduire un champ trop long sans couper les mots ?

 

Sujets relatifs
Impact du type de champ sur les perfs d'insertionExtraction de mots d'une chaîne
pbleme pour recuperer valeur d'un champC++ Conversion de string vers long
Ajouter un champ ID auto increment sur une table existante[JS] problème de récupération de value d'un champ texte
index multi champ vs index simple champextraire des mots en fonction de leur mise en forme
[résolu] Problème de mise à jour d'un champ[MySQL]Copie de champ à champ...
Plus de sujets relatifs à : Réduire un champ trop long sans couper les mots ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR