Macro créant une copie d'une colonne, avec traitement des données

Bonjour,

Je souhaite créer une macro qui, à partir d'une colonne sélectionnée (à la main), crée une nouvelle colonne avec un traitement des données de la colonne d'origine.

Exemple de 4 données sur la colonne d'origine

toto/tata/titi/tutu/tyty

momo/mama/meme/mymy/moimoi/miumiu

lolo/lala

kiki

Je souhaite, comme résultat les seuls 3 premiers niveau de donnée, et dans une nouvelle colonne à droite de celle qui est sélectionnée

Résultat attendu dans la nouvelle colonne:

toto/tata/titi

momo/mama/meme

lolo/lala

kiki

Si vous avez quelques pistes à m'offrir, ce serait sympa.

Jean-Robert.

J'ai réalisé (grâce en partie à la fonction enregistrer une macro) un code qui, après avoir sélectionné une colonne, crée autant de nouvelles colonnes qu'il y a de niveau hiérarchique entre les (/), mais je sèche sur ce nouveau besoin.

Le code en question, pouvant servir un peu à ce nouveau besoin:

Sub ajoutcolonnes()

MsgBox "Merci d'avoir sélectionné une colonne en entier avant de continuer, sinon, annulez et sélectionnez votre colonne"
nom = InputBox("Nom ?", "Nom des champs à créer")
Dim i As Integer
i = 1

While Cells(1, i) <> ""
i = i + 1
Wend

' Columns("D:D").Select
Application.CutCopyMode = False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Cells(1, i), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _
1), Array(6, 1), Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True


Cells(1, i).Select
ActiveCell.FormulaR1C1 = nom + "_01"
Cells(1, i + 1).Select
ActiveCell.FormulaR1C1 = nom + "_02"
Cells(1, i + 2).Select
ActiveCell.FormulaR1C1 = nom + "_03"
Cells(1, i + 3).Select
ActiveCell.FormulaR1C1 = nom + "_04"
Cells(1, i + 3).Select
ActiveCell.FormulaR1C1 = nom + "_04"
Cells(1, i + 4).Select
ActiveCell.FormulaR1C1 = nom + "_05"
Cells(1, i + 5).Select
ActiveCell.FormulaR1C1 = nom + "_06"
Cells(1, i + 6).Select
ActiveCell.FormulaR1C1 = nom + "_07"
Cells(1, i + 7).Select
ActiveCell.FormulaR1C1 = nom + "_08"
Cells(1, i + 8).Select
ActiveCell.FormulaR1C1 = nom + "_09"

End Sub

J'ai une piste, avec le générateur du site. Je vais approfondir le code proposé.

https://www.excel-pratique.com/fr/utilitaires/formule-extraction

=REGEXEXTRACT(A1;"[a-z]+/[a-z]+/[a-z]+")

Salut, si je comprends bien tu as en colonne A

Toto/tata/titi/Trotro/

Et tu voudrais avoir uniquement les trous premières occurrences dans une autre colonne ?

Si c'est le cas utilise "données" puis "convertir" puis tu coches "délimité" puis tu coches "autre" et tu inclu "/" dans la case a côté et tu laisse coché "standard"

excel te créera alors les différentes colonnes avec les mot seuls dans chacune des colonnes.

ensuite tu utilise une formule type

=A1&"/"&B1&"/"&C1

ce qui permet de regrouper uniquement les 3 premiers

Il y a peut être plus simple mais c'est une solution...

Merci Rékiss pour le temps pris pour ta réponse.

C'est effectivement une solution à laquelle j'ai pensé pour ma macro, mais qui implique, une fois fait la compil des 3 colonnes avec le / ,de supprimer les 3 colonnes générées pour permettre la concaténation.

Je vais m'orienter vers cela si pas d'autres possibilités.

Je n'ai pas trouvé de fonction (ou macro) récupérant tout le texte à gauche du troisième / , ainsi que si pas de troisième / trouvé, récupérer le tout.

Rechercher des sujets similaires à "macro creant copie colonne traitement donnees"