Tronquer avec conditions

Bernard91

XLDnaute Junior
Bonjour le Forum,
Je souhaiterais une aide votre part, j'ai bien entendu effectué au préalable une recherche mais sans succès.
Je souhaite, par macro couper des cellules par paquet de 25 caractères, mais en évitant de couper des mots. les cellules de destination comportant 25 caractères. plus qu'un long discours, un petit exemple joint.
Merci par avance de votre aide
 

Pièces jointes

  • Exempletronqué.xls
    19 KB · Affichages: 74
  • Exempletronqué.xls
    19 KB · Affichages: 80
  • Exempletronqué.xls
    19 KB · Affichages: 79

jp14

XLDnaute Barbatruc
Re : Tronquer avec conditions

Bonsoir

Voici une macro qui devrait répondre au problème posé.
A tester et à modifier en fonction de l'application.

Option Explicit

Dim data2 As String

Dim j1 As Long
Dim j2 As Long
Dim pos1 As Long
Dim pos2 As Long
Dim data1 As String
Dim i As Long

Sub coupemot()
data2 = Sheets("Feuil1").Range("D2").Value
data1 = Sheets("Feuil1").Range("D2").Value
i = 5
While Len(data1) > 25
coupemot1
data1 = data2
Wend
Sheets("Feuil1").Range("D" & i) = data2
End Sub


Private Sub coupemot1()

j1 = Len(data1)
For j2 = 1 To j1
' recherche des espaces
If Mid(data1, j2, 1) = " " Then
pos1 = j2
If j2 < 26 Then pos2 = pos1
If j2 > 27 Then Exit For
End If
Next j2
Sheets("Feuil1").Range("D" & i) = Mid(data1, 1, pos2 - 1)

data2 = Mid(data1, pos2 + 1, (j1 - pos2))
Sheets("Feuil1").Range("E" & i) = data2
i = i + 1
End Sub


JP
 

Bernard91

XLDnaute Junior
Re : Tronquer avec conditions

Bonsoir, bonjour, le forum,
j'ai pu trouver une solution à mon souci exposé lors du précédent post. Cependant il y a un détail que je n'arrive pas à résoudre; ne garder que les lignes entièrement remplies.
Vous aurez un apperçu plus précis de ma demande sur le fichier joint.
Merci de votre aide
 

Pièces jointes

  • Exempletronquév2.xls
    41 KB · Affichages: 78
  • Exempletronquév2.xls
    41 KB · Affichages: 87
  • Exempletronquév2.xls
    41 KB · Affichages: 85

pierrejean

XLDnaute Barbatruc
Re : Tronquer avec conditions

bonjour Bernard91

voila l'adaptation qui permet d'eviter les lignes vides

au passage je remarque que tu as su très bien assimiler le code et l'adapter a tes souhaits ce qui n'est pas si commun (j'ai d'enormes difficultés a integrer un code dont je ne suis pas l'auteur)
A noter egalement que tu etais sur la bonne voie
 

Pièces jointes

  • Exempletronquév2.xls
    34 KB · Affichages: 31
  • Exempletronquév2.xls
    34 KB · Affichages: 33
  • Exempletronquév2.xls
    34 KB · Affichages: 31

Bernard91

XLDnaute Junior
Re : Tronquer avec conditions

Bonjour le Forum,
Pierrejean,
Merci pour cette gentillesse mais en effet je crois que l'on doit capitaliser le savoir par l'apprentissage et c'est ce que j'essaie de faire ici, cependant il y a un gros morceau; c'est la manipulation des tableaux. Je me suis pas encore penché dessus.
En tout cas je te remercie de ton aide, et je vais analyser ton nouveau code.
Bonne journée à toi.
 

Bernard91

XLDnaute Junior
Re : Tronquer avec conditions

Bonjour le Forum,
Je reviens vers vous car j'ai rencontré un bug dans la macro; quand "tot" commence pas des espaces.
Illustration sur le fichier joint
Merci
 

Pièces jointes

  • Exempletronquév4.xls
    43 KB · Affichages: 64
  • Exempletronquév4.xls
    43 KB · Affichages: 59
  • Exempletronquév4.xls
    43 KB · Affichages: 62

pierrejean

XLDnaute Barbatruc
Re : Tronquer avec conditions

bonjour Bernard91

Salut JP14

voila la derniere ligne

de l'interet de la fonction Trim
 

Pièces jointes

  • Exempletronquév4.xls
    43.5 KB · Affichages: 36
  • Exempletronquév4.xls
    43.5 KB · Affichages: 37
  • Exempletronquév4.xls
    43.5 KB · Affichages: 29

Bernard91

XLDnaute Junior
Re : Tronquer avec conditions

Le Forum,
JP,
Merci de ta réponse mais j'avais déjà trouvé une solution.
Et pour conclure, j'espère, ce fil, j'aimerais vous faire partager le résultat.
Merci à pierrejean

Option Explicit
Sub test()
Dim tot As String
Dim colonne As Integer
Dim cell As Range
Dim n As Integer
Dim x, y, z As Integer
Dim unecase As String
Dim LF1, LF2 As Long

LF1 = 2
LF2 = 2

For Each cell In Sheets("source").Range("f2:f" & Sheets("source").Range("f65536").End(xlUp).Row)

tot = Sheets("source").Cells(LF1, 6)
y = Len(tot)

While Len(tot) > 63
unecase = Left(tot, 64)

For n = Len(unecase) To 1 Step -1
If Mid(unecase, n, 1) = " " Then
x = n
Exit For
End If

Next n

If Left(tot, 1) <> " " Then
unecase = Left(tot, x)
Sheets("cible").Cells(LF2, 6) = unecase & String((64 - x), " ")
If Len(Sheets("cible").Cells(LF2, 6)) > 0 Then
For z = 5 To 1 Step -1
Sheets("cible").Cells(LF2, 6).Offset(0, (z - 6)) = Sheets("source").Cells(LF1, z)
Next

End If

End If


tot = Mid(tot, x + 1, Len(tot) - x) & String((64 - x), " ")
y = Len(tot)

If Left(tot, 1) <> " " Then
For z = 1 To 5
Sheets("cible").Cells(LF2, z) = Sheets("source").Cells(LF1, z)
Next

LF2 = LF2 + 1

End If
Wend


If Left(tot, 1) <> " " Then

unecase = Left(tot, x)
Sheets("cible").Cells(LF2, 6) = unecase & String((64 - x), " ")
If Len(Sheets("cible").Cells(LF2, 6)) > 0 Then
For z = 5 To 1 Step -1
Sheets("cible").Cells(LF2, 6).Offset(0, (z - 6)) = Sheets("source").Cells(LF1, z)
Next
End If
End If

If Left(tot, 1) <> " " Then
Sheets("cible").Cells(LF2, 6) = unecase & String((64 - x), " ")
y = Len(tot)
For z = 1 To 5
Sheets("cible").Cells(LF2, z) = Sheets("source").Cells(LF1, z)
Next
End If

LF2 = LF2 + 1
Sheets("cible").Cells(LF2, 6) = tot
LF1 = LF1 + 1
Next
End Sub
Sub effacer()
Sheets("cible").Range("a2:f" & Sheets("cible").Range("f65536").End(xlUp).Row).ClearContents
End Sub
 

Tonio68

XLDnaute Nouveau
Re : Tronquer avec conditions

J'ai un soucis similaire

j'ai un tableau avec plusieurs colonnes et sur une des colonne je veux couper le texte en 3 parties max de x caractères sans tronquer les mots.

Le + serais que je puisse indiquer lors de l'execution de la macro, sur quelle colonne je veux agir et dans quelles colonnes je veux réinjecter le résultat.

Le nombre x doit être paramètrable si possible ou sinon =30.

Voici un fichier pour comprendre
 

Pièces jointes

  • TEXTE_COUPES.xls
    19.5 KB · Affichages: 49
  • TEXTE_COUPES.xls
    19.5 KB · Affichages: 46
  • TEXTE_COUPES.xls
    19.5 KB · Affichages: 52

pierrejean

XLDnaute Barbatruc
Re : Tronquer avec conditions

bonsoir Tonio68

petites questions

est-il imperatif d'avoir 3 colonnes ou peut on en accepter 2 ?

la macro doit-elle traiter toute la colonne specifiée en 1 seule fois

ou ligne par ligne (le nbre x etant notifié a chaque fois)

en gros decrit moi la façon dont tu vois le fonctionnement
imagine bouton, message demandant x ,colonne depart, colonnes arrivées,etc
 

Tonio68

XLDnaute Nouveau
Re : Tronquer avec conditions

Bonjour Pierrejean,
pierrejean à dit:
est-il imperatif d'avoir 3 colonnes ou peut on en accepter 2 ?
Si le commentaire entre sur 2 voire sur 1 colonne cela ne pose pas de problème.

pierrejean à dit:
la macro doit-elle traiter toute la colonne specifiée en 1 seule fois

ou ligne par ligne (le nbre x etant notifié a chaque fois)
Traitement en une seul fois avec saisie d'une seul fois de la variable x

pierrejean à dit:
en gros decrit moi la façon dont tu vois le fonctionnement
imagine bouton, message demandant x ,colonne depart, colonnes arrivées,etc
Je lance la macro
1ère question : quel colonne contient les commentaires à traiter
2ème question : quel colonne contient les adresse AS-i (filtre non vide)
3ème question : En quel colonne mettre "commentaire1" (ou créer un nouveau classeur)
3ème question (et c'est un +) : combien de caractères par commentaire
4ème question : voulez vous un café .... :D :D :D Non je m'égare

Merci d'avance
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 400
Messages
2 088 086
Membres
103 710
dernier inscrit
amin Saadaoui