Concaténation avec contrainte Espace / Nb de caractères

Vince.G

XLDnaute Nouveau
Bonjour,

Je me permets d'ouvrir une discussion, car me voici bloqué dans un problème, que je pense assez simple pour des pro comme vous (Je ne tartine pas, j'ai déjà eu à faire à ce forum, et le résultat fut...impressionnant!)

Voici mon problème :
Je dois diviser des colonnes de texte en deux voir trois en fonction du nb de caractère ET des espaces. Si le nb de caractères est = 35, alors coupe, sauf si un mot est coupé dans l'opération. Alors l'idée est de prendre les caractères uniquement jusqu'à la fin du mot précédent.

Un petit fichier pour une idée toute simple :)

Je vous remercie par avance !

Vince.
 

Pièces jointes

  • Exemple Excel Concaténation avec contrainte VG.xlsx
    11.6 KB · Affichages: 51

Grand Chaman Excel

XLDnaute Impliqué
Re : Concaténation avec contrainte Espace / Nb de caractères

Bonjour,
Solution par macro à essayer :

VB:
Sub Test()
   Dim ar, ar2(0 To 100), i As Integer, n As Integer
   ar = Split(ActiveCell, " ")
   n = 0
   ar2(0) = ar(0)
   For i = 1 To UBound(ar)
      If Len(ar2(n) & " " & ar(i)) > 35 Then
         n = n + 1
         ar2(n) = ar(i)
      Else
         ar2(n) = ar2(n) & " " & ar(i)
      End If        
   Next i
   ActiveCell.Offset(0, 1).Resize(, n + 1) = ar2
End Sub

A+
 

pierrejean

XLDnaute Barbatruc
Re : Concaténation avec contrainte Espace / Nb de caractères

Bonjour Vince.G

Vois si cela te convient

Edit : Salut Grand Chaman
 

Pièces jointes

  • Exemple Excel Concaténation avec contrainte VG.xlsm
    23.4 KB · Affichages: 42
  • Exemple Excel Concaténation avec contrainte VG.xlsm
    23.4 KB · Affichages: 46
  • Exemple Excel Concaténation avec contrainte VG.xlsm
    23.4 KB · Affichages: 51

job75

XLDnaute Barbatruc
Re : Concaténation avec contrainte Espace / Nb de caractères

Bonjour Vince.G, Grand Chaman Excel, pierrejean,

Avec cette fonction VBA :

Code:
Function SEPAR(t$, n%)
Dim i%, j%, p%
While i < Len(t)
  i = i + 1
  j = j + 1
  If Mid(t, i, 1) = " " Then p = i
  If j = n Then
    t = Application.Replace(t, p, 0, Chr(1))
    j = 0
  End If
Wend
SEPAR = Split(t, Chr(1))
End Function
Formule en B8 à tirer à droite et vers le bas :

- sur Excel 2007 et versions suivantes :

Code:
=SIERREUR(INDEX(SEPAR($A8;35);COLONNES($B8:B8));"")
- sur Excel 2003 et versions antérieures :

Code:
=SI(OU($A8="";COLONNES($B8:B8)>NBVAL(SEPAR($A8;35)));"";INDEX(SEPAR($A8;35);COLONNES($B8:B8)))
Fichiers .xlsm et .xls joints.

Edit : bien noter que tous les espaces sont conservés et que la coupure se fait avant l'espace.

A+
 

Pièces jointes

  • Exemple Excel Concaténation avec contrainte VG(1).xlsm
    17.7 KB · Affichages: 24
  • Exemple Excel Concaténation avec contrainte VG(1).xls
    36 KB · Affichages: 26
Dernière édition:

job75

XLDnaute Barbatruc
Re : Concaténation avec contrainte Espace / Nb de caractères

Re,

Vous nous induisez en erreur avec votre exemple Vince.G.

En effet les cellules D4 et D10 contenaient plus de 35 caractères...

En fait le comptage des 35 caractères doit reprendre à partir de l'espace avec j = i - p :

Code:
Function SEPAR(t$, n%)
Dim i%, j%, p%
While i < Len(t)
  i = i + 1
  j = j + 1
  If Mid(t, i, 1) = " " Then p = i
  If j = n + 1 Then
    t = Application.Replace(t, p, 0, Chr(1))
    j = i - p 'comptage à partir de l'espace
  End If
Wend
SEPAR = Split(t, Chr(1))
End Function
Edit : il faut aussi écrire If j = n +1 Then

Fichiers (2).

A+
 

Pièces jointes

  • Exemple Excel Concaténation avec contrainte VG(2).xls
    40 KB · Affichages: 28
  • Exemple Excel Concaténation avec contrainte VG(2).xlsm
    17.8 KB · Affichages: 23
Dernière édition:

job75

XLDnaute Barbatruc
Re : Concaténation avec contrainte Espace / Nb de caractères

Bonjour à tous,

En utilisant dès le début la fonction Split (comme Grand Chaman) c'est plus simple :

Code:
Function SEPAR(t$, n%)
Dim s, i%, X$(), j%
s = Split(t)
For i = 0 To UBound(s)
  ReDim Preserve X(j)
  t = Trim(X(j) & " " & s(i))
  If Len(t) > n Then i = i - 1: j = j + 1 Else X(j) = t
Next
SEPAR = X
End Function
Deux remarques :

- les espaces après la coupure sont supprimés

- de ce fait la cellule C10 contient exactement 35 caractères.

Fichiers (3).

A+
 

Pièces jointes

  • Exemple Excel Concaténation avec contrainte VG(3).xlsm
    17.9 KB · Affichages: 28
  • Exemple Excel Concaténation avec contrainte VG(3).xls
    35.5 KB · Affichages: 27

pierrejean

XLDnaute Barbatruc
Re : Concaténation avec contrainte Espace / Nb de caractères

Re

Salut Gerard

j'ai enfin compris ou se situait le piège !!!

Version à tester
 

Pièces jointes

  • Exemple Excel Concaténation avec contrainte VG.xlsm
    24 KB · Affichages: 37
  • Exemple Excel Concaténation avec contrainte VG.xlsm
    24 KB · Affichages: 39
  • Exemple Excel Concaténation avec contrainte VG.xlsm
    24 KB · Affichages: 38

job75

XLDnaute Barbatruc
Re : Concaténation avec contrainte Espace / Nb de caractères

Bonjour Pierre,

Tout dépend de ce que l'on veut faire :

- soit conserver tous les espaces : c'est le cas de ma version (2)

- soit supprimer l'espace après chaque coupure : ma version (3).

Si tu veux on peut appeler ça un piège :)

A+
 

Vince.G

XLDnaute Nouveau
Re : Concaténation avec contrainte Espace / Nb de caractères

Bonjour à tous,

Etant parti en week end prolongé, je n'ai pas pu mettre les pieds sur le forum.
Je reviens, et Ô Miracle, il y a profusion de réponses.

Merci beaucoup pour ces solutions qui conviennent parfaitement. Et désolé pour l'erreur dans mon fichier !

Vous êtes miraculeux.

Cordialement,

Vincent.
 

Discussions similaires

Statistiques des forums

Discussions
312 391
Messages
2 087 954
Membres
103 685
dernier inscrit
janguypol