XL 2021 Extraire valeurs après caractère spécial ou numérique

sum01

XLDnaute Occasionnel
Bonsoir le forum,

Dans ce petite problème dont je ne parviens pas à trouver la formule/solution. Je cherche à extraire la première valeur qui vient juste après une valeur numérique ou un caractère spécial ("%"). Et si la cellule ne contient aucun des deux alors je prends la première valeur.
Les valeurs en A ne sont pas toujours structurée proprement et je n'ai pas la main sur ces données. Parfois, les valeurs peuvent être séparées par un espace et parfois non.

Je joins le fichier qui, je l'espère, illustre mieux le sujet.

Un grand merci pour votre aide

Belle soirée
 

Pièces jointes

  • Extraction.xlsx
    8.7 KB · Affichages: 17
Dernière édition:
Solution
Bonsoir à @sum01:), R@chid ;),

Une autre pour le fun et pour toutes les versions de Excel. Formule à valider matriciellement (avec la combinaison des 3 touches Ctrl+Maj+Entrée) pour les anciennes version d'Excel :
=SUPPRESPACE(GAUCHE(SUBSTITUE(STXT(A2;EQUIV(FAUX;EXACT(MINUSCULE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2);1));1));MAJUSCULE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2);1));1)));0);255);" ";REPT(" ";255));255))

nota : en fait, on extrait à partir de la première lettre quels que soient les caractères avant cette première lettre.

R@chid

XLDnaute Barbatruc
Supporter XLD
Bonsoir @ tous,
en B2:
VB:
=LET(Fnc;SUPPRESPACE(SI(ESTNUM(CHERCHE("%";A2));STXT(A2;EQUIV("%";STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1);0)+1;99);SIERREUR(STXT(A2;EQUIV(9^9;--STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1))+1;99);GAUCHE(A2;TROUVE(" ";A2)-1))));SIERREUR(GAUCHE(Fnc;TROUVE(" ";Fnc)-1);Fnc))
@ tirer vers le bas

Cordialement
 

mapomme

XLDnaute Barbatruc
Bonsoir à @sum01:), R@chid ;),

Une autre pour le fun et pour toutes les versions de Excel. Formule à valider matriciellement (avec la combinaison des 3 touches Ctrl+Maj+Entrée) pour les anciennes version d'Excel :
=SUPPRESPACE(GAUCHE(SUBSTITUE(STXT(A2;EQUIV(FAUX;EXACT(MINUSCULE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2);1));1));MAJUSCULE(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2);1));1)));0);255);" ";REPT(" ";255));255))

nota : en fait, on extrait à partir de la première lettre quels que soient les caractères avant cette première lettre.
 

Pièces jointes

  • sum01- Extraction- v1.xlsx
    9.7 KB · Affichages: 16
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour sum01, R@chid, mapomme, le forum,

Extraction de lettres avec cette fonction VBA :
VB:
Function Lettres$(x$)
Dim liste$, i%, deb%
liste = "abcdefghijklmnopqrstuvwxyzàáâãäåòóôõöøèéêëìíîïùúûüÿñç"
x = x & " "
For i = 1 To Len(x)
    If deb = 0 Then If InStr(liste, LCase(Mid(x, i, 1))) Then deb = i
    If deb Then If InStr(liste, LCase(Mid(x, i, 1))) = 0 Then Lettres = Mid(x, deb, i - deb): Exit For
Next
End Function
Edit : ajouté x = x & " " pour border le texte.

A+
 

Pièces jointes

  • Extraction.xlsm
    15.5 KB · Affichages: 2
Dernière édition:

mapomme

XLDnaute Barbatruc
re @patricktoulon ;),

J'ai détaillé dans le classeur joint tous les termes de la formule.
C'est sans doute "trop détaillé" pour toi mais je l'ai fait en pensant à tous les autres aussi (si ça les intéresse).

La formule est basée sur le principe énoncé dans le cadre en gris.
Les cellules orangées et en gras sont le résultat d'une formule dans ces cellules.

Si ce n'est pas clair, me solliciter...
 

RyuAutodidacte

XLDnaute Impliqué
Bonjour à tous

Autre solution sans formules ni VBA => avec Remplissage instantané => le raccourci Ctrl E :
CTRLE.gif
 

job75

XLDnaute Barbatruc
Autre solution VBA avec la méthode majuscule-minuscule utilisée par mapomme :
VB:
Function Lettres$(x$)
Dim i%, deb%, y$
x = x & " "
For i = 1 To Len(x)
    If deb = 0 Then y = Mid(x, i, 1): If LCase(y) <> UCase(y) Then deb = i
    If deb Then y = Mid(x, i, 1): If LCase(y) = UCase(y) Then Lettres = Mid(x, deb, i - deb): Exit For
Next
End Function
Pour tester j'ai recopié la plage A2:B6 sur 100 000 lignes et comparé les durées du recalcul.

Eh bien pour les 3 fichiers des posts #3 #4 et #15 cette durée est la même 1,1 seconde.
 

Pièces jointes

  • Extraction(1).xlsm
    15.5 KB · Affichages: 5

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
315 127
Messages
2 116 534
Membres
112 771
dernier inscrit
mikadu49