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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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

Dernière édition:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…