Coupure après x caractères sans couper le dernier mot

Salut tout le monde,

J'ai besoin de couper des titres à 70 caractères max et d'autres à 128 max etc mais sans couper le dernier mot en plein milieu... mais plutôt supprimer le dernier mot qui dépasse le nombre de caractère souhaité.

Car j'utilise la formule =GAUCHE(A1;70) mais ça coupe net en plein milieu d'un mots...

Exemple pour les 70 caractères:

Smartphone Android 7.1 16Go 4G Empreinte digitale 5.5 pouces 2.5D Verre

doit devenir

Smartphone Android 7.1 16Go 4G Empreinte digitale 5.5 pouces 2.5D

Avez-vous une idée de formule? Ou de VBA?

L’idéale serait d’avoir une case ou l’on peut choisir le nombre de caractères à garder.

J'ai mis un fichier Excel avec 3 titres à tronquer en PJ et le résultat attendu.

Merci d'avance à tous

Bonjour,

Dans un premier temps ... sans macro ...

tu pourrais avoir la main sur le ' bon ' nombre de mots ...

Ci-joint ton fichier test ...

Fais-moi part de tes commentaires ...

bonjour,

un 'tite fonction perso pour ça :

Function PERST$(phrase$, NCarMax%)
Dim a, result$, tmp$, i
If Len(phrase) > NCarMax Then
   a = Split(Left(phrase, NCarMax))
   result = a(i)
   i = 1
   Do While Len(result) <= NCarMax
      tmp = result & " " & a(i)
      If Len(tmp) >= NCarMax Then
         Exit Do
      Else
         result = tmp
         i = i + 1
      End If
   Loop
Else
   result = phrase
End If
PERST = result
End Function

A+

104fper.xlsm (15.11 Ko)

Bien vu galopin01 ... solution parfaite ...

Bonjour

Bonjour galopin

je me suis permis une petite correction pour le cas où la phrase se coupe juste après un mot.

Option Explicit

Function PERST$(phrase$, NCarMax%)
Dim a, result$, tmp$, i
If Len(phrase) > NCarMax Then
   a = Split(Left(phrase, NCarMax + 1))
   result = a(i)
   i = 1
   Do While Len(result) <= NCarMax
      tmp = result & " " & a(i)
      If Len(tmp) > NCarMax Then
         Exit Do
      Else
         result = tmp
         i = i + 1
      End If
   Loop
Else
   result = phrase
End If
PERST = result
End Function

par exemple essayer

Smartphone Android 7.1 16Go 4G Empreinte digitale 5.5 pouces 2.5D Vert Pale

et

Smartphone Android 7.1 16Go 4G Empreinte digitale 5.5 pouces 2.5D Verre opaque

Bonjour à tous,

Pour le fun et à tester...

Et ne me demandez pas pour quelle raison je joins une image...

Cdlt.

snip 20171109094927

Super Bien Vu ... h2so4 ...

Comme quoi ... il n'y a que les tests ... suivis de tests ... qui font avancer ... +1 ....

Bonjour à tous,

ma participation

Function decoup(s As String, l As Long) As String
    If Len(s) <= l Then decoup = s Else decoup = Trim(Left(Left(s, l), InStrRev(Left(s, l), " ") - 1))
End Function

eric

bonjour

un essai par formule matricielle

80yptsba2.xlsx (9.42 Ko)

cordialement

@ Eriiic

BRAVO pour la Très jolie utilisation du Reverse du In String ...

Re,

Pour ma part, je prendrai le temps ce soir pour revoir InStr et inStrRev avant d'aller me coucher.

Merci Eric.

Cdlt.

mais de rien, c'était de bon coeur

Salut à tous, et merci beaucoup pour toutes vos réponses, j'ai testé la macro de h2so4 et ça fonctionne parfaitement.

Pour les autres, finalement ce sont d'autres façon d'obtenir le même résultat? C'est bien ça?

Encore merci

Tout à fait oui.

yptsba a écrit :

Pour les autres, finalement ce sont d'autres façon d'obtenir le même résultat? C'est bien ça?

tout le crédit de "ma" macro est à galopin.

les autres façons sont plus courtes et tout aussi efficaces

D'ailleurs je viens de voir qu'il y restait un left inutile dans ma proposition. Tant quà faire...

Function decoup(s As String, l As Long) As String
    If Len(s) <= l Then decoup = s Else decoup = Trim(Left(s, InStrRev(Left(s, l), " ") - 1))
End Function

eric

Rechercher des sujets similaires à "coupure caracteres couper dernier mot"