Microsoft 365 Extraire toutes les chaines de caractères entre guillemets

Tidjyphenom

XLDnaute Nouveau
Bonjour.

Supposons que j'ai une ligne suivante dans un fichier excel : "salut" comment ça s'est passé "aujourd'hui" ton "travail" à l'école?
Comment pourrais je récupérer via les fonctions Excel toutes les chaines de caractères se trouvant entre guillemets dans une même celulle et dans l'idéal séparées par des virgules pour au final obtenir :

salut,aujourd'hui,travail

Bien évidemment, sur différentes lignes de mon fichier, le nombre de chaines entre guillemets est variable.
 
Solution
Bonjour à tous,
Une proposition à partir de l'excellent travail de R@chid, salutations, :
Code:
=LET(Txt;FRACTIONNER.TEXTE(SUBSTITUE(A1;";";":");A1;":");JOINDRE.TEXTE(",";1;SUBSTITUE(FILTRE(Txt;GAUCHE(Txt)="""");"""";)))
Cordialement

Tidjyphenom

XLDnaute Nouveau
Bonjour,
Texte en A1, la formule en B1 :
VB:
=LET(Txt;FRACTIONNER.TEXTE(A1;" ");JOINDRE.TEXTE(", ";1;SUBSTITUE(FILTRE(Txt;GAUCHE(Txt)="""");"""";)))

Cordialement

Hmmm, ça ne fonctionne pas. Peut être que mon exemple n'était pas assez pertinent. Voici le format exacte de ma ligne :

VB:
a:24:{i:0;s:4:"3468";i:1;s:4:"3469";i:2;s:4:"3470";i:3;s:4:"3471";}

Et donc je dois pouvoir récupérer 3468,3469,3470,3471

Je pense que la fonction fractionner.texte ne fonctionne pas car il n'y a pas d'espaces. My bad, c'est de ma faute avec mon exemple initial.
 

Tidjyphenom

XLDnaute Nouveau
Bonjour à tous,
Une proposition à partir de l'excellent travail de R@chid, salutations, :
Code:
=LET(Txt;FRACTIONNER.TEXTE(SUBSTITUE(A1;";";":");A1;":");JOINDRE.TEXTE(",";1;SUBSTITUE(FILTRE(Txt;GAUCHE(Txt)="""");"""";)))
Cordialement

Great! it works!

Bien vu de remplacer les point-virgules par des double-points pour se servir de ces derniers comme délimiteurs. Merci à tous les 2.
 

R@chid

XLDnaute Barbatruc
Supporter XLD
Bonjour @ tous,
Salut @ALS35

Hmmm, ça ne fonctionne pas.
Je pense que tu as étudié une matière qui s'appelle la philosophie au lycée, et c'est une matière dont le coefficient a changé aux fils des années. Cette matière nous permet de faire la différence entre "Ca ne fonctionne pas" et "Je n'ai pas su l'adapter à mon problème dont je n'ai pas expliqué clairement et donné le bon exemple".

Cordialement
 

job75

XLDnaute Barbatruc
Bonjour Tidjyphenom, R@chid, ALS35,

Une solution simple par fonction VBA pour ceux qui n'ont pas Office 365 :
VB:
Function Joindre_guillemets(x As String, sep As String) As String
Dim s, i%
s = Split(x, """")
If UBound(s) Mod 2 Then Exit Function
For i = 1 To UBound(s) Step 2
    Joindre_guillemets = Joindre_guillemets & sep & s(i)
Next
Joindre_guillemets = Mid(Joindre_guillemets, Len(sep) + 1)
End Function
Si le nombre de guillemets n'est pas pair la fonction renvoie un texte vide.

A+
 

Pièces jointes

  • Joindre guillemets(1).xlsm
    15.7 KB · Affichages: 8

Tidjyphenom

XLDnaute Nouveau
Bonjour @ tous,
Salut @ALS35


Je pense que tu as étudié une matière qui s'appelle la philosophie au lycée, et c'est une matière dont le coefficient a changé aux fils des années. Cette matière nous permet de faire la différence entre "Ca ne fonctionne pas" et "Je n'ai pas su l'adapter à mon problème dont je n'ai pas expliqué clairement et donné le bon exemple".

Cordialement
C'est exactement ce que je disais. D'ailleurs oui, j'aurai mieux fait de poster un fichier exemple ais j'avais pas le fichier sous la main au moment de poster ma demande. En tout cas quand je disais que ça ne fonctionnait pas c'était pas pour dire que c'était ta formule qui n'était pas bonne. Bien entendu que non. Mon exemple n'était pas le bon :)
 

Discussions similaires