Comment ranger du texte dans une celulle ?

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 !

centurion

XLDnaute Junior
Bonjour,

J'ai importé une liste depuis une base de données au format csv.
Une fois importé dans Excel les noms des occupants des locaux se suivent séparés par un espace (voir fichier annexe l'onglet liste 1).
J'aimerais plutôt les superposer (voir l'onglet liste 2).

Si j'utilise le retour a la ligne dans la cellule, quand j'élargis la colonne les noms se remettent de nouveau en se suivant.

Y a-t-il une façon de le faire, pour qu'ils restent toujours superposés?
Les prénoms sont toujours en minuscules et noms de famille en majuscules, cela peut (peut-être) faciliter.

Par la suite j'aimerais faire le ratio de la surface divisée par le nombre des occupants.

Y a-t-il une façon de compter le nombre de noms qui sont dans une cellule, pour que je puisse diviser la surface par celui-ci.

En vous remerciant par avance
 

Pièces jointes

Dernière édition:
Re : Comment ranger du texte dans une celulle ?

Bonjour centurion, Gareth,

Fonction VBA :

Code:
Function SEP(txt$, Optional n As Byte) As Variant
'n = 0 ou omis => affichage, n = 1 => comptage
Dim s, i%
s = Split(Application.Trim(txt)) 'séparateur l'espace
For i = 0 To UBound(s) - 1
  If UCase(s(i)) = s(i) Then
    If UCase(s(i + 1)) = s(i + 1) Then
      s(i + 1) = s(i) & " " & s(i + 1)
    Else
      If n Then SEP = SEP + 1 Else _
        SEP = SEP & Chr(10) & s(i) & " " & s(i + 1)
    End If
  End If
Next
If n = 0 Then SEP = Mid(SEP, 2)
End Function
L'argument n (optionnel) permet soit d'afficher la liste soit de compter les noms.

Dans le fichier joint cette fonction est utilisée en C2 et E2.

Sélectionner la colonne C => Format cellule => Alignement => Renvoi à la ligne automatique.

Et il faudra peut-être Format ligne => Ajustement automatique.

A+
 

Pièces jointes

Re : Comment ranger du texte dans une celulle ?

Re,

Un complément au cas où le dernier nom (majuscules) ne serait pas suivi par un prénom (minuscules) :

Code:
Function SEP(txt$, Optional n As Byte) As Variant
'n = 0 ou omis => affichage, n = 1 => comptage
Dim s, i%
s = Split(Application.Trim(txt)) 'séparateur l'espace
For i = 0 To UBound(s) - 1
  If UCase(s(i)) = s(i) Then
    If UCase(s(i + 1)) = s(i + 1) Then
      s(i + 1) = s(i) & " " & s(i + 1)
    Else
      If n Then SEP = SEP + 1 Else _
        SEP = SEP & vbLf & s(i) & " " & s(i + 1)
    End If
  End If
Next
If UBound(s) >= 0 Then
  If UCase(s(i)) = s(i) Then 'dernier nom sans prénom
    If n Then SEP = SEP + 1 Else _
      SEP = SEP & vbLf & s(i)
  End If
End If
If n = 0 Then SEP = Mid(SEP, 2)
End Function
Fichier (2), j'ai modifié les formules en colonne E.

A+
 

Pièces jointes

Dernière édition:
Re : Comment ranger du texte dans une celulle ?

Re,

On peut aussi éviter les formules dans la feuille en exécutant cette macro :

Code:
Sub Ranger()
Dim r As Range, t$
Set r = Range("B2", [B65536].End(xlUp))
If r.Row = 1 Then Exit Sub 'sécurité
Application.ScreenUpdating = False
r.Replace vbLf, " ", xlPart
[D2].Resize(Rows.Count - 1).ClearContents 'RAZ
For Each r In r
  t = r
  r = SEP(t)
  If r <> "" Then r.Offset(, 2) = r.Offset(, 1) / SEP(t, 1)
Next
Rows.AutoFit 'ajustement hauteur lignes
End Sub
La macro se sert bien sûr de la fonction SEP sous ses 2 formes.

Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : Comment ranger du texte dans une celulle ?

Re,

Dans le fichier du post #1 il y a une colonne "Initials" dont je ne me suis pas occupé.

Si l'on veut la renseigner on peut utiliser cette fonction INI :

Code:
Function INI$(txt$)
Dim s, i%
s = Split(Application.Trim(txt)) 'séparateur l'espace
For i = 0 To UBound(s) - 1
  If UCase(s(i)) = s(i) Then
    If UCase(s(i + 1)) = s(i + 1) Then
      s(i + 1) = s(i)
    Else
      INI = INI & vbLf & Left(s(i), 2) & Left(s(i + 1), 1)
    End If
  End If
Next
If UBound(s) >= 0 Then If UCase(s(i)) = s(i) Then _
    INI = INI & vbLf & Left(s(i), 2) 'dernier nom sans prénom
INI = Mid(INI, 2)
End Function
Fichiers (2 bis) et (3 bis).

A+
 

Pièces jointes

- 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
7
Affichages
977
Retour