XL 2016 Extraire une chaine de caractère (aléatoire) jusqu'à une occurence

VincentA

XLDnaute Nouveau
Bonjour,

J'ai un fichier avec dans une colonne (A) les titres de film et le (ou les réalisateurs associés). Je souhaiterai scinder cette colonne en deux :
Colonne A les films
Colonne B les réalisateurs
Je n'arrive pas à trouver la bonne formule, j'ai pioché à droite et à gauche dans le forum mais rien ne fonctionne.

Pourriez-vous m'aider s'il vous plait ?

Vincent
 

Pièces jointes

  • exemple.xlsx
    8.4 KB · Affichages: 19
Solution
Re,
En fait l'espace après le "de" du réalisateur est un CAR(160) et non un CAR(32) donc on différencie bien le " de " du titre et celui du réalisateur. par contre pour le d' pas de solution.

Voir pj à base de substitue ou j'ai copié collé le " de " du réalisateur

Cordialement

VincentA

XLDnaute Nouveau
Bonjour,
Le problème est de trouver le séparateur film/réalisateur. On peut faire avec de et d' mais cela demandera une correction manuelle si il y a de ou d' dans le titre du film
Cordialement
Effectivement, la formule que j'utilisais fonctionne bien s'il n'y a pas d'autres "de" que celui devant le réalisateur, sinon cela renvoie une chaine de caractères derrière le premier "de" rencontré.
=DROITE(A4;NBCAR(A4)-TROUVE("de";A4)-2)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Vincent, Dugenou,
Avec plusieurs "de" dans la phrase plus à choisir entre "de" et "d'", une fonction perso semble plus adaptée :
VB:
Function Scinde(Chaine, T)
N = Len(Chaine)
For i = N - 1 To 1 Step -1
    If Mid(Chaine, i, 2) = "de" Or Mid(Chaine, i, 2) = "d'" Then
        If T = 1 Then
            Scinde = Mid(Chaine, 1, i - 2)
        Else
            Scinde = Mid(Chaine, i + 3)
        End If
        Exit Function
    End If
Next i
End Function
La syntaxe est Scinde(Titre;0) pour le réalisateur et Scinde(Titre,1) pour le titre.
 

Pièces jointes

  • exemple (38).xlsm
    13.9 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Vincent, Dugenou, Roblochon,
Après réflexion, il me semble que vous trouverez toujours un exemple qui ne marche pas.
J'ai essayé ce film :

De Athos à d' Artagnan de François de Dumont d' Urville

Le VBA se mélange les pinceaux car trop d’occurrences.
N'ayant pas Power Query, pourriez vous tester ce titre ?
 

Dugenou

XLDnaute Barbatruc
Re,
En fait l'espace après le "de" du réalisateur est un CAR(160) et non un CAR(32) donc on différencie bien le " de " du titre et celui du réalisateur. par contre pour le d' pas de solution.

Voir pj à base de substitue ou j'ai copié collé le " de " du réalisateur

Cordialement
 

Pièces jointes

  • Vincent A.xlsx
    9.2 KB · Affichages: 6

VincentA

XLDnaute Nouveau
Re,
En fait l'espace après le "de" du réalisateur est un CAR(160) et non un CAR(32) donc on différencie bien le " de " du titre et celui du réalisateur. par contre pour le d' pas de solution.

Voir pj à base de substitue ou j'ai copié collé le " de " du réalisateur

Cordialement
Bonjour Dugenou,

J'ai testé ta fonction et je ne sais pas pourquoi, mais elle renvoie dans certaines cellules des #VALEUR! (cf fichier joint)
Cordialement, Vincent
 

Pièces jointes

  • test-texte.xlsx
    21.1 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
Bonjour
de toute facon tu ne pourra avoir un résultat 100% c'est impossible
vba ne fait la différence entre le "de la chose " et le "corde "
au mieux tu prévois un espace logique avant et après mais même là tu n'aura pas de 100%

et je ne parle même pas d'un éventuel" de " dans le titre ou même plusieurs dans la partie réalisateur
 

yfik

XLDnaute Nouveau
Bonjour
autre solution, tu mets un point juste après le nom du film, ensuite vas dans l'onglet convertir, clic sur delimité, coche la case "autre" et mais un point dans la petite case et sur suivant. cela va te séparer le non du film et du réalisateur
 

Pièces jointes

  • exemple bis.xlsx
    9.1 KB · Affichages: 4

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16