Microsoft 365 extraire plusieurs parties de texte dans le contenu d'une cellule

Tidjyphenom

XLDnaute Nouveau
Bonjour,

Je suis confronté à un soucis de taille. Je dispose d'une colonne comprenant d'une texte : Plusieurs urls vers des images et les caractéristiques de l'image. Voici un exemple de texte contenu dans une cellule de ma colonne A :

Code:
http://monsite.com/image-1.jpg ! alt : texte alternatif de l'image 1  ! title : Une très belle image ! desc :  ! caption :  | http://monsite.com/image2.jpg ! alt : texte alternatif de l'image 2 ! title : 2nde belle image ! desc : une description de l'image  ! caption : WoW trop beau

Ce que je souhaite est de pouvoir récupérer toutes les urls de l'image dans une nouvelle colonne et les textes alternatifs dans une autre (pour chaque ligne du coup). Au final le résultat serait d'avoir :

Pour la colonne B :
Code:
http://monsite.com/image-1.jpg, http://monsite.com/image2.jpg

Pour la colonne C :
Code:
texte alternatif de l'image 1, texte alternatif de l'image 2

Bien sûr, les urls et les textes alternatifs doivent être dans le même ordre pour pouvoir manipuler les données aisément par la suite pour garder l'association de l'image et son texte alternatif.

Je n'ai pas la moindre idée sur comment procéder. Mais comme vous pouvez le voir, le symbole pipe " | " permet de séparer le contenu d'informations de chaque image tandis que le point d'exclamation permet de séparer les détails d'une image. S'il y a une formule je suis preneur.

Merci pour votre aide.
 

Tidjyphenom

XLDnaute Nouveau
Bonjour
en utilisant l'outil excel prévu?
données / Convertir / Délimité /autre: Pipe

Ok je vois. Comme ça effectivement chaque colonne = 1 image avec ses informations (alt, title, caption). Mais après je me retrouve avec chaque cellules contenant par exemple :

Code:
http://monsite.com/image-1.jpg ! alt : texte alternatif de l'image 1  ! title : Une très belle image ! desc :  ! caption :

je pourrais encore répété l'opération avec le délimiteur " ! " cette fois ci. Le problème c'est que ma cellule ne contient pas toujours un title ou une desc ou une caption. En revanche au minimum il y a toujours l'url et la desc de l'image. C'est aléatoire donc. Ainsi, en procédant de cette manière, sachant que j'ai 5000 lignes à traiter, ça deviendrait fastidieux pour savoir si une colonne correspond au final à l'alt de l'image, son title, sa desc, etc... Je n'aurai plus de repères.

Je pense que dans l'idéal, après avoir crée mes nouvelles colonnes avec le délimiteur pipe " | ", il faudrait que je puisse supprimé tout le contenu après le 2ème point d'exclamation de chaque cellule. afin de me retrouver uniquement avec

Code:
http://monsite.com/image.jpg ! alt : texte alternatif de l'image

pour l'ensemble de mes cellules et à ce moment là je pourrais utiliser le délimiteur du point d'exclamation pour obtenir les urls et les alts. Même si ça me semble toujours pas optimisé comme process car au final je me retrouverai avec le schéma suivant sur chaque ligne par exemple :

colonne url 1 | colonne alt 1 | colonne url 2 | colonne alt 2 | colonne url 3 | colonne alt 3 | etc...

Et donc faudra recréer une colonne pour concatener les valeur des colonnes des url et une autre colonne pour concaténer les valeurs des alts.

J'imagine qu'il y a plus optimisé pour éviter les erreurs ?

@JHA je vais tester ta proposition voir ce que ça donne.
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Hello Jacky,
Le code PQ un peu condensé
PowerQuery:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    FractPipe = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Essai", Splitter.SplitTextByDelimiter("|", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Essai"),
    FractExcla = Table.SplitColumn(FractPipe, "Essai", Splitter.SplitTextByDelimiter("!", QuoteStyle.Csv), {"Essai.1", "Essai.2", "Essai.3", "Essai.4", "Essai.5"}),
    Rename = Table.RenameColumns(FractExcla,{{"Essai.2", "Alt"}, {"Essai.1", "Lien"}, {"Essai.3", "Title"}, {"Essai.4", "Description"}, {"Essai.5", "Caption"}}),
    Extract = Table.TransformColumns(Rename, {{"Alt", each Text.AfterDelimiter(_, ": "), type text}, {"Title", each Text.AfterDelimiter(_, ": "), type text}, {"Description", each Text.AfterDelimiter(_, ": "), type text}, {"Caption", each Text.AfterDelimiter(_, ": "), type text}})
in
    Extract

@ Tidjy
S'il y a de multiples cas de figures, bien vouloir mettre un fichier avec quelques types différents, pour voir si on peut en extraire les données voulues.
Bonne apm
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 146
Membres
103 130
dernier inscrit
FRCRUNGR