Insertion d'un saut de ligne à chaque retour à la ligne automatique

Shinpi

XLDnaute Nouveau
Bonjour,

Pour un travail de rédaction, je suis limité à 65*caractères par ligne. Chaque paragraphe correspond à une cellule. En utilisant une police à chasse fixe (tous les caractères ayant la même largeur), j'ai pu définir la longueur maximale que représentent 65*caractères. L'option «*Renvoyer à la ligne automatiquement*» me permet alors de répartir les mots de mon paragraphes sur plusieurs lignes de 65*caractères max. tout en conservant l'intégrité de chaque mot (aucun mot n'est coupé arbitrairement en deux parce que la limite de 65*caractères tombe en plein milieu).

Du coup, mon paragraphe est parfait, mais si je le copie-colle dans une autre application, les saut de ligne «*virtuels*» disparaissent nécessairement. J'aimerais donc pouvoir insérer un vrai saut de ligne (Alt+010, Alt+Entrée, etc.) là où l'option «*Renvoyer à la ligne automatiquement*» a renvoyé mon texte à la ligne suivante, et ce sur une colonne de plusieurs centaines de cellules.

Je vous ai mis un fichier d'exemple en pièce jointe.

Merci d'avance pour votre aide et si vous avez besoin de renseignements complémentaires, n'hésitez pas*!


AL
 

Pièces jointes

  • AL_Insertion sauts de ligne.xlsx
    9.1 KB · Affichages: 37

DoubleZero

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Bonjour, Shinpi, le Forum,

Comme ceci ?

Code:
Option Explicit
Sub Saut_de_ligne_insérer()
    Dim i As Long
    With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
    For i = Cells(Rows.Count, "a").End(xlUp).Row To 2 Step -1
        Range("a" & i).Value = Range("a" & i).Value & Chr(10)
    Next
    With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
End Sub

A bientôt :)
 

Shinpi

XLDnaute Nouveau
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Bonsoir DoubleZero,

Et merci pour votre réponse. *:)

Malheureusement, ce que j'obtiens avec ce code, c'est l'ajout d'un saut de ligne à la fin du texte de chaque cellule (soit après le dernier mot), et non à la fin de chacune des lignes de chaque cellule. Peut-être ai-je mal formulé ma demande… *:(

Pour vous donner un exemple, dans la cellule A3, j'ai ce paragraphe*:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.

En ayant ajusté la largeur de la colonne pour n'avoir que 65*caractères max. et en activant le retour à la ligne automatique, j'ai un saut de ligne «*virtuel*» (affiché mais non inséré concrètement dans le texte) à la fin de chaque ligne, ce qui fait que mon paragraphe ressemble à ça*:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing
nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas
ligula massa, varius a, semper congue, euismod non, mi. Proin
porttitor, orci nec nonummy molestie, enim est eleifend mi, non
fermentum diam nisl sit amet erat.

Sauf que si je modifie la largeur de ma colonne, les mots du paragraphe sont redistribués pour occuper l'espace de chaque ligne, ou encore si je copie-colle ce paragraphe dans une autre application, j'obtiens toujours une ligne de texte continue et le découpage affiché n'est aucunement conservé.

Ce que je recherche, c'est un moyen d'insérer concrètement un saut de ligne à la fin de chaque ligne pour conserver la répartition du texte obtenue avec le retour automatique à la ligne, et d'avoir donc un caractère de saut de ligne après les mots suivants*: non, adipiscing, Maecenas, Proin et non.

Merci d'avance pour votre aide,


AL
 

DoubleZero

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Re-bonjour,

... Peut-être ai-je mal formulé ma demande…

Peut-être ai-je mal compris :confused: le besoin.

Un autre essai ?

Code:
Option Explicit
Sub Ligne_vide_insérer()
    Dim i As Long
    With Application: .ScreenUpdating = False: .Calculation = xlManual: .EnableEvents = False: End With
    For i = Cells(Rows.Count, "a").End(xlUp).Row To 2 Step -1
        Rows(i).EntireRow.Insert
    Next
    With Application: .EnableEvents = True: .Calculation = xlAutomatic: .ScreenUpdating = True: End With
End Sub

A bientôt :)
 

Shinpi

XLDnaute Nouveau
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Merci encore, j'apprécie vraiment que vous preniez le temps et la peine pour m'aider.*;)

Ce que vous me proposez semble ajouter une ligne entre chacune de mes cellules de texte, ce n'est pas ce que je recherche même si je vois déjà à quoi ça pourrait me servir pour un autre projet…*;)

J'ai ajouté une autre version de mon fichier, cette fois plus détaillé et avec un exemple concret en contexte.

On va y arriver*!*;)


AL
 

Pièces jointes

  • AL_Insertion sauts de ligne_v2.xlsx
    9.8 KB · Affichages: 39

DoubleZero

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Re-bonjour,

Shinpi, je regrette :( de ne pas trouver LA solution.

J'espère que vous obtiendrez un bon résultat parmi les travaux offerts dans cette discussion.

Dans la négative, une autre personne parviendra certainement à vous aider.

Bon courage, bonne version et à bientôt :)
 

ROGER2327

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Bonjour à tous.


Une autre fonction.​
Code:
Function RetourChariot$(Texte$, NCar%)
Dim i%
  Texte = Replace(Texte, vbLf, " ")
  Do
    If Len(Texte) > NCar Then
      For i = NCar + 1 To 1 Step -1
        If Mid$(Texte, i, 1) = " " Or Mid$(Texte, i, 1) = "-" Then Exit For
      Next
      If i = 0 Then If Len(Texte) > NCar Then i = NCar Else i = Len(Texte)
    Else
      i = Len(Texte)
    End If
    RetourChariot = RetourChariot & IIf(RetourChariot = "", "", vbLf) & RTrim(Left$(Texte, i))
    Texte = Right$(Texte, Len(Texte) - i)
  Loop Until Texte = ""
End Function


Bonne journée.


ℝOGER2327
#8009


Jeudi 12 Phalle 142 (Sainte Andouille, amphibologue - fête Suprême Quarte)
5 Fructidor An CCXXIII, 1,3072h - saumon
2015-W34-6T03:08:14Z
 

Pièces jointes

  • Retour chariot.xlsm
    19 KB · Affichages: 59

tototiti2008

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Re, :)

Nouvelle correction suite aux remarques éclairées de Roger, si aucun espace ou tiret j'avais une boucle infinie (c'est mal :))
Merci à Roger :)
 

Pièces jointes

  • AL_Insertion sauts de ligne_v2 (2) (3).xlsm
    16.9 KB · Affichages: 50

job75

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Bonjour Shinpi, DoubleZero, Roger, Marc,

Avec Split ce doit être plus rapide s'il y a beaucoup de cellules à traiter :

Code:
Function RetourChariot$(txt$, L%)
Dim s, deb%, i%, t$
s = Split(Replace(Replace(txt, "-", ""), vbLf, " "))
deb = 1
For i = 0 To UBound(s)
  If Len(LTrim(Mid(t & s(i), deb))) + 1 > L Then
    deb = Len(t) + 2
    t = t & vbLf & s(i)
  Else
    t = t & " " & s(i)
  End If
Next
RetourChariot = LTrim(t)
End Function
Fichier joint.

A+
 

Pièces jointes

  • AL_Insertion sauts de ligne(1).xlsm
    18 KB · Affichages: 42
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Insertion d'un saut de ligne à chaque retour à la ligne automatique

Re...


Re,

Et bien non, ma solution avec Split prend 3 à 4 fois plus de temps, oubliez...

A+
Et même huit à dix fois plus de temps que celle-la :​
Code:
Function RetourChariot$(Texte$, NCar%)
Dim i&, j&, d As Boolean
  If Texte <> "" Then
    Do While Len(Texte) > NCar
      i = InStrRev(Texte, " ", NCar + 1)
      j = InStrRev(Texte, "-", NCar + 1)
      d = i < j
      If d Then i = j
      If i = 0 Then i = NCar
      RetourChariot = RetourChariot & Left$(Texte, i + Not d) & vbLf
      Texte = Right$(Texte, Len(Texte) - i)
    Loop
    If Len(Texte) Then
      RetourChariot = RetourChariot & Texte
    Else
      RetourChariot = Left$(RetourChariot, Len(RetourChariot) - 1)
    End If
  End If
End Function
(Merci à tototiti2008 pour m'avoir remis en mémoire la fonction InStrRev.)​


Bonne nuit.


ℝOGER2327
#8011


Vendredi 13 Phalle 142 (Sainte Bitre, ouvreuse et Saint Étalon, couvreur - fête Suprême Quarte)
6 Fructidor An CCXXIII, 9,0852h - tubéreuse
2015-W34-7T21:48:16Z
 

Discussions similaires

Réponses
9
Affichages
453

Statistiques des forums

Discussions
311 740
Messages
2 082 049
Membres
101 882
dernier inscrit
XaK_