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&"/"&C1ce 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.