Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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: 7

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") :
 

Pièces jointes

  • cloum1- avant le dernier tiret- v1a.xlsx
    10 KB · Affichages: 5
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
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…