Extraction avant ou après une chaîne de caractères [Résolu/Fermé]

Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
- - Dernière réponse : Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
- 4 avril 2017 à 11:34
Bonjour,
je possède une liste d'albums sous Excel qui se présente ainsi :
artiste - année - album

exemples :
Alice in Chains - 1994 - Jar of Flies
Amy Winehouse - 2006 - Back to Black

A l'aide de formules, j'aimerais créer 3 colonnes différentes :
- une colonne artiste
- une colonne année
- une colonne album

J'ai essayé d'extraire les données avant ou après la chaîne de caractères " - " en jouant avec les fonctions GAUCHE, DROITE ou STXT, mais je n'y arrive pas.
Merci d'avance pour toute aide de votre part.
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
2286
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
29 novembre 2019
761
1
Merci
Bonjour à tous,
L'avis du candide:
Si l'année a toujours 4 chiffres encadrés par des "espace tiret espace" et que cette combinaison de 3 caractères ne se trouve pas ailleurs, les formules de Vaucluse au #1 et de via55 au #2 fonctionnent après adaptation.
Artiste
=GAUCHE(A2;TROUVE(" - ";A2)-1) ou =STXT(A2;1;TROUVE(" - ";A2)-1)
Année
=STXT(A2;TROUVE(" - ";A2)+3;4)
Album
=DROITE(A2;NBCAR(A2)-TROUVE(C2;A2)-6) ou =STXT(A2;TROUVE("!!!";SUBSTITUE(A2;" - ";"!!!";2))+3;50) attention au nombre de !

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64282 internautes nous ont dit merci ce mois-ci

Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
-
Bonjour tontong,
tout d'abord, merci.
Vos formules sont presque parfaites.
Le seul souci que je rencontre concerne la troisième colonne. Certains titres d'albums dépassent les 50 caractères, et ils ne sont pas retranscrits de manière complète dans la dernière colonne. Puis-je changer le nombre 50 par 80 ou 100 sans que cela n'affecte la formule ?
Cela donnerait par exemple ceci : =STXT(A2;TROUVE("!!!";SUBSTITUE(A2;" - ";"!!!";2))+3;80)

Cdmt
Messages postés
24733
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
4911
1
Merci
Re
celles ci devrait fonctionner tous types, sauf si vous avez un chiffre 19 ou 20 dans le texte avant la date ou sauf, ce qui devrait être peu probable, si vous avez une année qui ne commence pas par 19 ou par 20

1° partie
=STXT($A$1;1;TROUVE("!!";SUBSTITUE(SUBSTITUE($A$1;19;"!!");20;"!!"))-3)

année:
=STXT($A$1;TROUVE("!!";SUBSTITUE(SUBSTITUE($A$1;19;"!!");20;"!!"));4)

fin:
=STXT(A1;TROUVE("!!";SUBSTITUE(SUBSTITUE($A$1;19;"!!");20;"!!"))+5;50)

crdlmnt

La qualité de la réponse dépend surtout de la clarté de la question, merci!

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 64282 internautes nous ont dit merci ce mois-ci

Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
-
Re,
tout d'abord, désolé de ne pas avoir répondu plus tôt. Je n'ai plus reçu de notifications par e-mail après les 2 premières réponses, et je ne pensais pas qu'il y avait de nouvelles suggestions.
Alors, je viens de tester vos formules, et pour les 2 premières colonnes, c'est parfait.
Par contre, pour la troisième, je me retrouve avec la chaîne "- " avant chaque titre d'album.

Merci pour le temps que vous avez consacré à ce problème, c'est très gentil.

cordialement
Vaucluse
Messages postés
24733
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
4911 > Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
-
Bonjour
pour la dernière, remplacer +5 par +7 s'il y a un blanc entre le tiret et le texte (sinon +6)
crdlmnt
Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
> Vaucluse
Messages postés
24733
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
-
Merci !
Ca marche avec +7.
Par contre, tout comme je le disais à tontong, certains albums ont un titre qui dépasse les 50 caractères, et ils apparaissent ainsi tronqués dans la colonne "albums".
J'ai donc remplacé la valeur 50 par 80.
cdmt
Messages postés
24733
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
4911
0
Merci
Bonjour
sélectionnez votre colonne
Ruban / données / convertir
"délimité"
/suivant
"autres" et dans la case entrez un tiret
"terminer"
et ça devrait être fait pour la colonne

ou si vous y tenez par formule:
début:
=STXT(A1;1;TROUVE("-";A1)-1)
année
=STXT(A1;TROUVE("-";A1)+1;4)
fin:
=STXT(A1;TROUVE("!!!";SUBSTITUE(A1;"-";"!!!!";2))+1;50)

dans cette dernière formule, les !!! sont là pour éviter la confusion avec une ponctuation existante dans le texte et les 50 sont à augmenter si votre fin de texte peut avoir plus de >50 caractères

crdlmnt

La qualité de la réponse dépend surtout de la clarté de la question, merci!
Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
> via55
Messages postés
11440
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 décembre 2019
-
Bonsoir via55,
même si mon problème a été résolu par tontong et Vaucluse, j'ai tout de même testé vos nouvelles formules, et elles fonctionnent pour des milliers d'albums... sauf un ! :)
Black Sabbath - 2013 - 13

Je ne vais pas vous embêter plus longtemps, mais je tenais tout de même à vous le signaler, puisque vous êtes un expert d'Excel.
Bonne soirée.
via55
Messages postés
11440
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 décembre 2019
1539 > Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
-
Bonsoir Nicolas

OK c'est normal et les solutions de Vaucluse et de tontong, que je saluent tous les deux au passage, sont meilleures; celle de Vaucluse qui prend en compte 19 et 20 est plus efficace que la mienne qui ne prend en compte que le 1 ou le 2 d''où le problème avec le 13 ! il suffirait dans les miennes de remplacer 1 par 19 et 2 par 20 pour obtenir le même résultat

Bonne suite
Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
> via55
Messages postés
11440
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 décembre 2019
-
Merci pour ce retour, qui m'aide à y voir plus clair dans ces formules.
Vaucluse
Messages postés
24733
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
4911 -
Alors on varie en supposant qu'il n'y ait qu'un blanc entre le nom et le prénom:
mais ça ne couvrira probablement pas tout non plus selon les espaces:
début en B1:
=STXT(A1;1;TROUVE("!!!";SUBSTITUE(A1;" ";"!!!";2)))
année:
=STXT(A1;NBCAR(B1)+3;4)
fin:
=STXT(A1;NBCAR(D1)+8;50)

be fonctionnera pas si vous avez plusieurs blancs successifs dans la même ligne. Vous pouvez remédier à cette éventualité comme suit:
sélectionnez la colonne

touche ctrl + touche h
"remplacez" > taper deux blancs
"par" > taper un blanc et
"remplacer tout"

crdlmnt
Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
> Vaucluse
Messages postés
24733
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
3 décembre 2019
-
@Vaucluse : re-bonjour,
j'ai utilisé vos 2 formules postées dans votre message n°9 de 17h27 pour les colonnes B & C.
Pour la colonne D, j'ai essayé votre formule, mais il y avait un problème de référence circulaire.

cdmt.
Messages postés
11440
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
5 décembre 2019
1539
0
Merci
Bonjour

Avec la donnée brute en A2 :
- en B2 =GAUCHE(A2;TROUVE("-";A2)-2) pour extraire l'artiste
-en C2 =STXT(A2;TROUVE("-";A2)+2;4) pour extraire l'année
- et en D2 =DROITE(A2;NBCAR(A2)-TROUVE(C2;A2)-6) pour extraire l'album

Cdlmnt
Via
Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
-
Merci. Globalement, cela fonctionne, même si comme pour la réponse de Vaucluse, je me retrouve avec des erreurs dès que le nom de l'artiste possède un tiret ou un caractère spécial tel que le &.
ex : Delaney & Bonnie & Friends - 1972 - D&B Together

La chaîne qui revient sans cesse dans mes données brutes est " - ", et je vois que vous avez travaillé sur une chaîne sans les espaces ("-"). J'ai essayé de modifier votre formule, sans succès.

Cordialement.
0
Merci
Bonjour
avec du VBA on peux aussi le faire

Sub Decoupe2()
DebLig = 1
FinLig = Range("A" & Rows.Count).End(xlUp).Row
   For L = DebLig To FinLig
      Tableau = Split(Range("A" & L), " - ")
         For C = 0 To UBound(Tableau)
            Cells(L, C + 2).Value = Tableau(C)
         Next
   Next
End Sub

A+
Maurice
Nicolas2937
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
-
@momo : je vous remercie, mais je n'ai pas la moindre idée de comment on utilise du VBA.
Je crois avoir trouvé une solution grâce à d'autres membres, mais merci du temps que vous avez consacré à mon problème.
Messages postés
20
Date d'inscription
samedi 1 avril 2017
Statut
Membre
Dernière intervention
4 avril 2017
0
Merci
Tout d'abord, merci à tous ceux qui ont participé à ce fil de discussion.
J'ai trouvé 2 solutions qui fonctionnent parfaitement.

La première est signée tontong :
pour une valeur initiale située en A1, j'ai donc ceci :
B1=STXT(A1;1;TROUVE(" - ";A1)-1)
C1=STXT(A1;TROUVE(" - ";A1)+3;4)
D1=DROITE(A1;NBCAR(A1)-TROUVE(C1;A1)-6)

La seconde est signée Vaucluse :
B1=STXT(A1;1;TROUVE("!!";SUBSTITUE(SUBSTITUE(A1;19;"!!");20;"!!"))-3)
C1=STXT(A1;TROUVE("!!";SUBSTITUE(SUBSTITUE(A1;19;"!!");20;"!!"));4)
D1=STXT(A1;TROUVE("!!";SUBSTITUE(SUBSTITUE(A1;19;"!!");20;"!!"))+7;80)

Un immense merci pour ces formules qui me sont très utiles.