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

  • Initiateur de la discussion Initiateur de la discussion Shinpi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 🙂
 
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
 
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 😕 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 🙂
 
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

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 🙂
 
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

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

Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
588
Retour