XL pour MAC extraire les caractères avant une occurence pas toujours présente

cloum1

XLDnaute Nouveau
Bonjour,
j'ai une tres longue liste du type
AA-BBB-CCCCC-DDDDD-1
AAAA-BBBB-CCCCC-DDD-2
AAAA-BBBB-CCC-DDDDD-EEEE-11
AAAA-BB-CCC-DDD


entre chaque tiret la chaine est de longueur variable
chaque chaine est composé lettres ou chiffres
Il y a 4 ou 5 chaines séparées d'un tiret mais pas toujours le dernier tiret avec un numéro (1 ou 2 caractères de 1 à 19)

Je souhaiterais pouvoir extraire tout ce qu'il y a à gauche du dernier tiret dans le cas ou il y est présent (et dans ce cas garder la cellule intacte
AA-BBB-CCCCC-DDDDD
AAAA-BBBB-CCCCC-DDD
AAAA-BBBB-CCC-DDDDD-EEEE
AAAA-BB-CCC-DDD


Merci
 
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

Avec une formule mais moins facile à mettre en oeuvre
VB:
=GAUCHE($A2;CHERCHE("£";SUBSTITUE(Tableau1[@Données];"-";"£";SOMMEPROD(--((STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))="-"))))-1)

JHA
 

Pièces jointes

  • Cloum1 bis.xlsx
    17.9 KB · Affichages: 4

vgendron

XLDnaute Barbatruc
Hello
une autre solution par fonction personnalisée

VB:
Function SupprimerIndice(textinit As Range) As String

fin = Split(textinit, "-")(UBound(Split(textinit, "-")))
If IsNumeric(fin) Then
    SupprimerIndice = WorksheetFunction.Substitute(textinit, "-" & fin, "")
Else
    SupprimerIndice = textinit
End If
End Function
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Suite remarque de @Cousinhub ;) (que je salue), j'ai modifié la formule.
VB:
=SI(ESTNUM(DROITE(Tableau1[@Données];1)*1);GAUCHE($A2;CHERCHE("£";SUBSTITUE(Tableau1[@Données];"-";"£";SOMMEPROD(--((STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))="-"))))-1);Tableau1[@Données])

JHA
 

Pièces jointes

  • Cloum1 bis.xlsx
    18 KB · Affichages: 6

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous ,

Oups ! J'avais oublié le fait que le texte pouvait ne pas finir par un chiffre...

Voici la formule corrigée :
Une petite formule matricielle en B1 à recopier vers le bas :
VB:
=SI(A1="";"";SI(ESTNUM(--DROITE(A1;1));GAUCHE(A1;MAX(SI(STXT(A1;LIGNE($1:$99);1)="-";LIGNE($1:$99)-1;"")));A1))

Remarque : 99 doit un nombre supérieur à la longueur maximum des chaines en colonne A. On pourrait le paramétrer mais ça alourdit la formule.

Formule matricielle (sur Apple, la touche contrôle doit correspondre à la touche "pomme") :
ValidMatric.png
 

Pièces jointes

  • cloum1- avant le dernier tiret- v1a.xlsx
    10 KB · Affichages: 4
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Test OK sur Office 365 (mais sur Windows)
(avec le jeu de données du message#1)
=JOINDRE.TEXTE("-";VRAI;TRANSPOSE(FILTRE.XML("<t><s>"&SUBSTITUE(A1;"-";"</s><s>")&"</s></t>";"//s[last()]/preceding::*")))
Avec les données en colonne A, saisir la formule ci-dessus en B1 puis recopier vers le bas
Occurences.png