Autres changer l'ordre des mots dans une cellule

coline741

XLDnaute Junior
Bonjour aux héros de la programmation VBA​
Je travaille sur des bases de données musicales et souhaiterais effectuer l'action suivante:​
…présentation originale​
Woody Shaw ‎– The Complete Muse Sessions Label: Mosaic Records MD7-255​
Woody Shaw ‎– Blackstone Legacy Label: Contemporary Records S7627/8
Woody Shaw ‎– Song Of Songs Label: Contemporary Records S7632
Art Blakey And The Jazz Messengers ‎– Anthenagin Label: Prestige P-10076
…présentation souhaitée
Mosaic Records MD7-255 Woody Shaw ‎– The Complete Muse Sessions​
Contemporary Records S7627/8 Woody Shaw ‎– Blackstone Legacy​
Contemporary Records S7632 Woody Shaw ‎– Song Of Songs​
Prestige P-10076 Art Blakey And The Jazz Messengers ‎– Anthenagin​
Actuellement j'utilise cette formule qui fonctionne bien​
=DROITE(E52;NBCAR(E52)-CHERCHE("Label: ";E52)-6)&" "&(GAUCHE(E52;CHERCHE("Label: ";E52)-2))​
Mais il faut la copier sur la cellule adjacente, couper, et collage spécial…et ce des centaines de fois car cette information discographique se situe à la fin de chaque cession​
Une macro VBA concoctée par une ou un spécialiste m'aiderait bien​
D'avance merci​
 

Pièces jointes

  • changer l'ordre des mots dans une cellule.xls
    18.5 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
re
bonjour
avec un peu de reflection tu te rendra compte que comme tes chaines n'ont pas la même structure il te sera impossible de faire quelque chose de 100% fonctionnel
tu a des chaine
blablabla-blablabla-blablabla
blablabla-blablabla:blablabla
et peut être a l'avenir l’intrus(":") faisant parti d'une éventuelle chaîne a garder
conclusion
en l’état fait un replace":" par le "-" et applique ta formule

mais voila ou la limite de l’intuitivité d'excel s’arrête
la moindre non concordance avec ce principe et c'est mort
 

coline741

XLDnaute Junior
re
bonjour
avec un peu de reflection tu te rendra compte que comme tes chaines n'ont pas la même structure il te sera impossible de faire quelque chose de 100% fonctionnel
tu a des chaine
blablabla-blablabla-blablabla
blablabla-blablabla:blablabla
et peut être a l'avenir l’intrus(":") faisant parti d'une éventuelle chaîne a garder
conclusion
en l’état fait un replace":" par le "-" et applique ta formule

mais voila ou la limite de l’intuitivité d'excel s’arrête
la moindre non concordance avec ce principe et c'est mort
Si ça fonctionne avec les fonctions d'excel, ça fonctionnera avec un macro VBA
 

patricktoulon

XLDnaute Barbatruc
re
oui avec vba tu a plus de liberté quand a la formulation
c'est ce que je voulais dire par limite de l'intuitivité d'excel
après en vba 3 ligne de code suffisent en l’état

tablo=split(texte,"-")
morceau1=tablo(0)
morceau(2)=split(tablo(1),"Label")(0)
morceau(3)=split(tablo(1),"Label")(1)

texte étant le texte de ta cellule
 

patricktoulon

XLDnaute Barbatruc
re
voici une fonction vba que tu peux utiliser en formule
VB:
Function reversetexte(cel As String) As String
   Dim T1, T2, T3
   If cel <> "" Then
        tablo = Split(cel, "–")
        T1 = tablo(0)
        T2 = Split(tablo(1), "Label:")(0)
        T3 = Split(tablo(1), "Label:")(1)
         reversetexte = T3 & " " & T1 & " " & T2
    Else
        reversetexte = ""
    End If
End Function
demo
demo3.gif
 

coline741

XLDnaute Junior
re
voici une fonction vba que tu peux utiliser en formule
VB:
Function reversetexte(cel As String) As String
   Dim T1, T2, T3
   If cel <> "" Then
        tablo = Split(cel, "–")
        T1 = tablo(0)
        T2 = Split(tablo(1), "Label:")(0)
        T3 = Split(tablo(1), "Label:")(1)
         reversetexte = T3 & " " & T1 & " " & T2
    Else
        reversetexte = ""
    End If
End Function
demo
Regarde la pièce jointe 1056253
Un premier merci. La présentation approche le résultat souhaité. Je vais tenter de bidouiller pour conserver le tiret – et les 3 espaces entre la référence discographique et le titre proprement dit.
Je retourne à mes migraines et vous tiendrez au courant.
 

patricktoulon

XLDnaute Barbatruc
re
VB:
Function reversetexte(cel As String) As String
   Dim T1, T2, T3
   If cel <> "" Then
        tablo = Split(cel, "–")
        T1 = tablo(0)&"-"
        T2 = Split(tablo(1), "Label:")(0) &" Label"
        T3 = Split(tablo(1), "Label:")(1)&"   "
         reversetexte = T3 & " " & T1 & " " & T2
    Else
        reversetexte = ""
    End If
End Function
 

patricktoulon

XLDnaute Barbatruc
re
de rien bien que j'aurais pu faire plus simple
j'entends pas là faire l'arrangement dans le concat
et surtout ajouter un jump out function
pour les cas ou la chaîne ne serait pas du bon format (@@@@@-@@@@@@Label: @@@@@@)
VB:
Function reversetexte(cel As String) As String
   Dim T1, T2, T3
   If cel <> "" Then
      if not cel like"*-*" or not cel like"*Label*" then reversetexte="#Invalid Chain!!":exit function
       tablo = Split(cel, "–")
        T1 = tablo(0)
        T2 = Split(tablo(1), "Label:")(0)
        T3 = Split(tablo(1), "Label:")(1)
         reversetexte = T3 & "    " & T1 & "-" & T2 &" Label"
    Else

        reversetexte = ""

    End If

End Function
;)
 

CISCO

XLDnaute Barbatruc
Bonjour

Chaque session représente une dizaine de lignes ou plus, donc…
Merci quand même

Si tu as ton texte dans la colonne E, à partir de la ligne 52, et par exemple, jusqu'à la ligne 2000, sans cellule vide entre les deux. Tu colles ta formule dans F52. Tu double-cliques sur la croix en bas à droite de la cellule F52, et hop, automatiquement, tu auras la formule dans toutes les cellules en dessous de la ligne 52, jusqu'à la ligne 2000. Disons, 4 ou 5 secondes de travail...

Si tu dois le faire une centaine de fois, le problème, ce n'est pas de faire cela, c'est d'ouvrir les 100 fichiers contenant ces textes... Dans ce cas, une macro serait effectivement intéressante pour aller chercher ces textes dans ces divers fichiers, et, dans la foulée, pour les transformer...

@ plus

@ plus
 

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS