Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro pour mettre texte à la ligne dans cellule

  • Initiateur de la discussion Initiateur de la discussion C@thy
  • 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 !

C@thy

XLDnaute Barbatruc
Hello world,

dans une même cellule d'excel j'ai par ex. ceci :
1) toto 2) tata 3) titi 4) tutu 5) toutou ... et plus si affinités
le but est de faire un retour à la ligne dans la même cellule pour obtenir ceci :
1) toto
2) tata
3) titi
4) tutu
5) toutou

par conséquent il faut rechercher un chiffre suivi d'une parenthèse fermante et couper avant.

Est-ce possible?

NB : le texte est beaucoup plus long que toto titi (salut Marc!!) évidemment... et peut comporter des années et des () par ex. 1) toto 1985 (blabla) 2)titi 1991 tralala (blingbling) etc...

J'ai cherché sur le forum mais n'ai pas trouvé de discussion similaire..😱

Merci à vous pour vos lumières... au fait, c'est la fête des lumières à Lyon...😉

Bises

C@thy
 
Re : macro pour mettre texte à la ligne dans cellule

Bonjour C@thy 🙂

Peut-être cette fonction macro :

Code:
Function RETOURLIGNE(t As String) As String
Dim i As Integer
For i = 1 To 99 '999 si pas suffisant...
  t = Replace(t, i & ")", vbLf & i & ")", , 1)
Next
RETOURLIGNE = Mid(t, 2)
End Function
Pour le 1 dans Replace voir l'aide VBA sur cette fonction.

Fichier joint.

Edit : colonne B avec le format "Renvoyer à la ligne automatiquement", bien sûr.

A+
 

Pièces jointes

Dernière édition:
Re : macro pour mettre texte à la ligne dans cellule

Bonjour
Cette macro devrait faire l'affaire :
VB:
Sub Macro1()
Dim T() As String, Cel As Range, Z As String, N As Long, P As Long
For Each Cel In Selection
   T = Split(Cel.Value, ")")
   If UBound(T) >= 0 Then Z = T(0) Else Z = ""
   For N = 1 To UBound(T)
      For P = Len(Z) To 1 Step -1
         If InStr("0123456789", Mid$(Z, P, 1)) = 0 Then Exit For
         Next P
      If P = Len(Z) Or P = 0 Then
         Z = Z & ")" & T(N)
      ElseIf Mid$(Z, P, 1) = " " Then
         Z = Left$(Z, P - 1) & vbLf & Mid$(Z, P + 1) & ")" & T(N)
      Else
         Z = Left$(Z, P) & vbLf & Mid$(Z, P + 1) & ")" & T(N)
         End If
      Next N
   Cel.Value = Z
   Next Cel
End Sub
À +

Edit: Bonjour Job75. Largement doublé moi, par une solution plus courte, bravo.
 
Dernière édition:
Re : macro pour mettre texte à la ligne dans cellule

Re, salut Bernard 🙂

Mon idée était bonne mais insuffisante, manquait l'espace :

Code:
Function RETOURLIGNE(t As String) As String
Dim i As Integer
For i = 1 To 99 '999 si pas suffisant...
  t = Replace(t, " " & i & ")", vbLf & i & ")")
Next
RETOURLIGNE = t
End Function
Fichier (2).

Edit : du coup le 1 dans Replace n'est plus nécessaire !

A+
 

Pièces jointes

Dernière édition:
Re : macro pour mettre texte à la ligne dans cellule

Bravo, vous êtes des chefs tous les deux.

Dans un cas j'ai une ligne qui espace et pas dans l'autre,
je n'ai plus qu'à choisir, les deux étant super!

Un grand MERCI à vous

Bises 😉

Edit : pardonne ma question de profane, Gérard, mais je ne vois pas la différence, au niveau du résultat entre tes deux (bonnes) versions...

Edit2 Ah oui, j'ai compris, l'espace avant la parenthèse!🙄

Bizz

C@thy
 
Dernière édition:
Re : macro pour mettre texte à la ligne dans cellule

Si, contrairement à ce que j'avais supposé, le 1er chiffre d'un nombre devançant ")" est toujours précédé d'un espace, la dernière solution de Job75 est parfaite. Sinon, à sa 1ère solution, il y a insuffisance et danger, mais qui pourrait se lever en bouclant Step -1 et en prévoyant les 2 Replace avec et sans " " devant, le 1er VbLf devant être supppri... ma solution serait à préférer dans ce cas je crois.
Cordialement.
 
Re : macro pour mettre texte à la ligne dans cellule

Je ne sais pas pourquoi, Danreb, la 1ère fois j'ai eu une ligne
d'espace entre chaque retour mais plus maintenant...
Zarbi...

Bises

C@thy
 
Re : macro pour mettre texte à la ligne dans cellule

Ah... Il se pourrait que la cellule avait déjà été traitée.
Il serait avantageux, pour que ça ne gène pas, de modifier le début de ma boucle comme suit:
VB:
For Each Cel In Selection
   T = Split(Replace(Cel.Value, vbLf, " "), ")")

P.S. Pour respecter des retours préexistants étrangers à la règle on pourrait aussi remplacer :
ElseIf Mid$(Z, P, 1) = " " Then · · · plus bas par :
ElseIf Mid$(Z, P, 1) <= " " Then


Bisou
 
Dernière édition:
- 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

G
Réponses
2
Affichages
1 K
GENON Pascal
G
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…