Découper une phrase sans couper les mots

  • Initiateur de la discussion Initiateur de la discussion kaki31
  • 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 !

kaki31

XLDnaute Occasionnel
Bonsoir tout le monde;

Y'a t'il un moyen pour découper une phrase en deux lignes avec nombres de caractères déterminé, 40 caractères en B2 et le reste en B3 sans couper les mots.

Merci 🙂
 
Re : Découper une phrase sans couper les mots

Bonsoir kaki31,

Un premier essai en admettant que l'espace est le séparateur de mot.
La phrase est en B1.
En B2, saisir la formule matricielle:
Code:
=GAUCHE(B1;MAX(SI(STXT(B1;LIGNE(INDIRECT("1:40"));1)=" ";LIGNE(INDIRECT("1:40"));"")))

En B3, saisir la formule:
Code:
=SUBSTITUE(B1;B2;"";1)

Formule matricielle: Elle doit être validée par la combinaison des touches Ctrl+Maj+Entrée au lieu de la seule touche Entrée comme une formule classique.
Si la validation matricielle est correcte, alors Excel entoure la formule d'accolades {=.......}.
Chaque fois que cette formule sera modifiée, la validation devra se faire par Ctrl+Maj+Entrée. Les accolades apparaissent à la validation et ne doivent pas être saisies au clavier.
 
Re : Découper une phrase sans couper les mots

Salut Kaki, MaPomme,

J'en n'étais pas loin, mon texte est saisi en C2 et ma formule matricielle est la suivante :

Code:
=GAUCHE(C2;MAX(SI(ESTERREUR(CHERCHE(" ";GAUCHE(C2;40);LIGNE(DECALER(INDIRECT("1:40");;;NBCAR(C2)))));0;CHERCHE(" ";GAUCHE(C2;40);LIGNE(DECALER(INDIRECT("1:40");;;NBCAR(C2)))))))

pour la suite j'utilisais le même code que MaPomme :

Code:
=SUBSTITUE(C2;C11;"";1)

@++
David
 
Re : Découper une phrase sans couper les mots

Bonsoir à tous


Comme il n'y en a pas encore, une fonction personnalisée :​
VB:
Function coupe(s$)
Dim l%, i%, v$, w$, x
    Application.Volatile 'Facultatif
    If Len(s) Then
        l = 40
        x = Split(s)
        v = x(0)
        For i = 1 To UBound(x)
            w = v & " " & x(i)
            If Len(w) <= l Then v = w Else Exit For
        Next
        w = ""
        For i = i To UBound(x)
            w = w & " " & x(i)
        Next
        If Len(w) Then w = Right$(w, Len(w) - 1)
    End If
    coupe = Array(Array(v, w), Array(w, ""))
End Function
Mode d'emploi :
Le texte à traiter étant en A1, sélectionner deux cellules contigües (en colonne ou en ligne), saisir
Code:
=coupe(A1)
et valider par Ctrl Maj Entrée.​


ROGER2327
#5890


Jeudi 5 Merdre 139 (Saint Crouducul, troupier - fête Suprême Quarte)
3 Prairial An CCXX, 9,5682h - trèfle
2012-W21-2T22:57:49Z
 
Re : Découper une phrase sans couper les mots

Bonsoir tout le monde;

Toujours sur le même sujet: comment ajouter des " * " pour compléter le nbre de caractères (40 & 80) si le nombre de caractère est inférieur a 40 dans la 1ère ligne et inférieur a 80 dans la 2eme ligne.

Merci 🙂
 
Re : Découper une phrase sans couper les mots

Bonjour à tous.

Merci à Roger pour l'utilisation du Array imbriqué que je ne connaissais pas.
Sur le même principe avec l'ajout d'un caractère qui complète la chaine.

Matricielle personnalisée.


Code:
Function Decoupe(r$, cr)
Application.Volatile: t = 40: c = Left(r, t)
Do While Mid(c, t, 1) <> Space(1): c = Left(c, t - 1) & cr & Mid(c, t + 1, 40 - t): t = t - 1: Loop
c = Left(c, t - 1) & cr & Mid(c, t + 1, 40 - t + 1)
Dim v(1): v(0) = c: v(1) = Left(Trim(Replace(r, Replace(c, cr, Space(0)), Space(0))) & WorksheetFunction.Rept(cr, 80), 80)
Decoupe = Array(v, Array(v(1), Space(0)))
End Function

Code:
=DECOUPE(A1;"*")
* qui peut être remplacé par n'importe quel autre caractère.
 
Dernière édition:
Re : Découper une phrase sans couper les mots

Re...


Bonsoir Patrick.
j'ai oublier de mentionner que si j'ai un complément de "*" sur la 1ère ligne donc la 2eme ligne sera automatiquement complétée de 80 "*" .

code modifié :
VB:
Function coupe(s$, Optional r$ = "*")
Dim l%, i%, v$, w$, x
    Application.Volatile 'Facultatif
    If Len(s) Then
        l = 40
        x = Split(s)
        v = x(0)
        For i = 1 To UBound(x)
            w = v & " " & x(i)
            If Len(w) <= l Then v = w Else Exit For
        Next
        w = ""
        For i = i To UBound(x)
            w = w & " " & x(i)
        Next
        If Len(w) Then w = Right$(w, Len(w) - 1)
    End If
    On Error Resume Next
    If Len(v) Then v = v & String(40 - Len(v), r): w = w & String(80 - Len(w), r)
    On Error GoTo 0
    coupe = Array(Array(v, w), Array(w, ""))
End Function



ROGER2327
#5893


Samedi 7 Merdre 139 (Nativité de Monsieur Plume, propriétaire - fête Suprême Quarte)
5 Prairial An CCXX, 0,2304h - canard
2012-W21-4T00:33:11Z
 
Re : Découper une phrase sans couper les mots

Bonjour,
un essai à améliorer via une fonction utilisant une expression rationnelle :
Code:
Function ScinderChaine(chaine As String, Optional l As Double = 40, Optional c As String = "*")
Dim oRegExp As Object, Matches As Object, i As Byte, sep As Byte, T()
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
    .Global = True
    .MultiLine = True
    .Pattern = "\s"
    If .test(chaine) = True Then
        Set Matches = .Execute(chaine)
        For i = 0 To Matches.Count - 1
            If Matches.Item(i).firstindex > l Then
                ReDim T(1)
                sep = Matches.Item(i - 1).firstindex
                T(0) = Left(chaine, sep)
                If Len(T(0)) < l Then T(0) = T(0) & _
                Application.WorksheetFunction.Rept(c, l - Len(T(0)))
                T(1) = Trim(Right(chaine, Len(chaine) - sep))
                If Len(T(1)) < l * 2 Then T(1) = T(1) & _
                Application.WorksheetFunction.Rept(c, l * 2 - Len(T(1)))
                Exit For
             End If
        Next i
    End If
    ScinderChaine = Application.Transpose(T)
End With
End Function
Chaîne de caractères en A1. Sélectionner B1:B2, rentrer la formule et valider en matriciel:
Code:
=ScinderChaine(A1)
ou
Code:
=ScinderChaine(A1;40;"!")
.
A+
 
- 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
19
Affichages
692
Réponses
12
Affichages
351
Retour