[RESOLU] Copier à la ligne la valeur qui précède une ponctuation

teecaf

XLDnaute Nouveau
Bonsoir le forum,

J'ai une une nouvelle problématique (du moins pour moi) à vous soumettre.

Voilà, je voudrais par VBA copier toute valeur précédée d'une ponctuation (. , ; -) à la ligne automatiquement en cliquant sur un bouton qui déclencherait la procédure.

Je vous joins un classeur avec un exemple de phrase (recette de cuisine) et ce que j'aimerai que cela fasse.
Il faudrait extraire la liste des ingrédients dans une seule phrase et je souhaiterai qu'a chaque ingrédient on passe directement à la ligne et on copie le mot qui précède le signe de ponctuation (ex: poivre, oeuf, ).

poivre
oeuf

Merci pour votre aide.

Cordialement.

Teecaf
 

Pièces jointes

  • Copier à la ligne une valeur à chaque ponctuation.xlsx
    9.3 KB · Affichages: 22
Dernière édition:

teecaf

XLDnaute Nouveau
Re : Copier à la ligne la valeur qui précède une ponctuation

Bonjour Pierre Jean,

Chapeau bas!! Merci pour le temps accordé à résoudre ma problématique.
je suis sauvé et je n'ai plus à me taper tous les copier/coller.

Merci.

Teecaf
 

job75

XLDnaute Barbatruc
Re : [RESOLU] Copier à la ligne la valeur qui précède une ponctuation

Bonsoir teecaf, Pierre,

Autre solution :

Code:
Private Sub CommandButton1_Click()
MettreEnLignes [A4], [A12] 'paramètres à adapter
End Sub

Sub MettreEnLignes(source$, dest As Range)
Dim p, s
For Each p In Array(":", ".", ",", ";")
  source = Replace(source, p, Chr(1))
Next
s = Split(source, Chr(1))
For p = 0 To UBound(s)
  s(p) = Trim(s(p))
Next
If p Then dest.Resize(p, 1) = Application.Transpose(s)
dest(p + 1).Resize(Rows.Count - dest.Row - p + 1, 1) = ""
End Sub
Fichier joint.

Edit : devant "courgette" il y a un espace insécable de code 160, il n'est donc pas supprimé...

A+
 

Pièces jointes

  • Mettre en lignes(1).xls
    53.5 KB · Affichages: 17
Dernière édition:

job75

XLDnaute Barbatruc
Re : [RESOLU] Copier à la ligne la valeur qui précède une ponctuation

Re,

S'il y a plusieurs textes à mettre en lignes :

Code:
Private Sub CommandButton1_Click()
Dim c As Range
[A7:A65536].Clear 'RAZ
For Each c In [A4:A6] 'plage à adapter
  MettreEnLignes c.Value, Range("A" & Rows.Count).End(xlUp)(3)
Next
End Sub

Sub MettreEnLignes(source$, dest As Range)
Dim p, s
For Each p In Array(":", ".", ",", ";")
  source = Replace(source, p, Chr(1))
Next
s = Split(source, Chr(1))
For p = 0 To UBound(s)
  s(p) = Trim(s(p))
Next
If p Then
  dest.Font.Bold = True 'gras
  dest.Font.ColorIndex = 3 'rouge
  dest.Resize(p) = Application.Transpose(s)
End If
End Sub
Fichier (2).

Bonne nuit.
 

Pièces jointes

  • Mettre en lignes(2).xls
    55 KB · Affichages: 27
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 613
Messages
2 090 232
Membres
104 455
dernier inscrit
alix