[EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Une question pour les formulistes
Dans une feuille, on trouve des données de ce type
Code:
abc   abc ABC 2009123 abc abc
abc abc ABC.2009124   abc abc
abc abc ABC2009125 abc   abc
abc abc A2009126 abc   abc
abc abc A 2009127 abc   abc
abc abc A. 2009128 abc   abc
J'utilise actuellement pour extraire la chaine 2009NNN (ex: 2009121), la formule ci-dessous:
Code:
=STXT(SUBSTITUE(A1;" ";"");CHERCHE("200????";SUBSTITUE(A1;" ";""));7)
formule.jpg

Quelqu'un voit-il une autre possibilité de formule (non matricielle)
Merci d'avance et bon week-end à tous (sous la pluie ici)

PS: n'étant pas l'utilisateur final dans ce cas, pas de vba, de regexp, de formule matricielle car je sais faire mais le final user lui ne sait pas ;)
 

Pièces jointes

  • formule.jpg
    formule.jpg
    35.5 KB · Affichages: 163
  • formule.jpg
    formule.jpg
    35.5 KB · Affichages: 158

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour philippe27

Merci pour ta proposition

Fonctionne mais pas plus courte (75 vs 68 ;) )

Rectification : extrait trop de caractères si par exemple
abc abcabc abc ABC 2009888888123 abc abcabc abc

ta formule renvoie: 2009888888123

la mienne : 2009888
 
Dernière édition:

PMO2

XLDnaute Accro
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour,

On peut faire appel à une fonction personnalisée et on aura donc recours au VBA mais tout cela restera transparent pour
l'utilisateur puisqu'il se contentera de taper une formule.

Copiez le code suivant dans un module standard
Code:
Function EXTRACT(Cellule As Range, Mot_debutant_par As String) As String
Dim R As Range
Dim A$
Dim B$
Dim Deb&
Dim i&
Set R = Cellule.Cells(1, 1)
If Not IsEmpty(R) Then
  A$ = CStr(R)
  Deb& = InStr(1, A$, Mot_debutant_par)
  If Deb& > 0 Then
    Deb& = Deb& + Len(Mot_debutant_par)
    B$ = Mot_debutant_par
    For i& = Deb& To Len(A$)
      If Mid(A$, i&, 1) <> Chr(32) Then
        B$ = B$ & Mid(A$, i&, 1)
      Else
        Exit For
      End If
    Next i&
  End If
  EXTRACT = B$
End If
End Function
FONCTIONNEMENT
Pour obtenir le résultat équivalent au résultat de la fonction
=STXT(SUBSTITUE(A1;" ";"");CHERCHE("200????";SUBSTITUE(A1;" ";""));7)
tapez
=extract(A1;200)


Cordialement.

PMO
Patrick Morange
 

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour PMO2

Merci pour ta fonction mais ...
Personnellement j'utilise regexp pour ce genre d'extraction
(voir le PS de mon message initial )

Mais j'ai eu trop de déboires avec des novices sous Excel
C'est pour cela que j'essaie dans ce cas d'utiliser une formule la plus simple ou courte possible, afin qu'en cas de pépin la personne puisse ressaisir la formule.
 

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Re


J'ai compilé toutes vos propositions et les miennes et le souci reste que les formules renvoient selon des cas particuliers des résultats non satisfaisants

(VBA s'en sort mieux avec regexp mais je ne souhaite pas l'utiliser ici)

Avis donc aux formulistes émérites du forum ;)

Voir la PJ pour mieux appréhender la chose.
 

PMO2

XLDnaute Accro
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour,

Essayez avec la fonction personnalisée qui a été remodelée (voir la pièce jointe).

La formule est simplifiée et est du style =EXTRACT(A1)

Cordialement.

PMO
Patrick Morange
 

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Re


Merci Patrick pour ton feeback

Mais je sais que je ne peux pas utiliser VBA car je connais trop le genre d'incidents qui se produisent avec des users qui voudront aller voir le code VBA etc ....

Je cherche donc une formule la plus simple possible utilisant les fonctions natives d'Excel.

Ainsi en cas de souci, j'enverrai la formule par mail (pour un copier/coller)

(et je n'aurai pas besoin de protéger les feuilles ou le code VBA)


PS: je me suis rendu compte de ma propre incohérence en ouvrant ton classeur 1990 et CHERCHE("200???? :eek:
 

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Re



Voici la dernière formule à laquelle je suis arrivé:

Code:
=SI(ESTERR(CHERCHE("199*";B20))*1=1;STXT(SUBSTITUE(B20;" ";"");CHERCHE("200????";SUBSTITUE(B20;" ";""));7);SI(ESTERR(CHERCHE("200*";B20))*1=1;STXT(SUBSTITUE(B20;" ";"");CHERCHE("199????";SUBSTITUE(B20;" ";""));7)))*1

Si quelqu'un avait une autre approche du problème en beaucoup plus court et par formule


(Désolé pour les vbaistes :eek: )
 

JHA

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour Staple1600, le forum,

j'ai retrouvé une formule de Tibo qui devrait t'aider

=STXT(B3;EQUIV(VRAI;ESTNUM(STXT(SUBSTITUE(B3;" ";"µ");LIGNE(INDIRECT("1:"&NBCAR(B3)));5)*1);0);7)
formule matricielle
cette formule cherche un chiffre de 5 caractères et affiche ensuite 7 caractères.

Edit: Oups! c'est une matricielle et tu n'en veux pas.

JHA
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour JHA
Ce ne n'est pas moi qui n'en veux pas
C'est la situation qui m'oblige à cela.
Disons que je suis las de créer des applicatifs sous Excel (avec VBA + formules + protection basique) et d'avoir des collègues qui m'appellent pour me dire " ca marche plus" et de m'apercevoir que le classeur est déprotégé que les macros ont été désactivés etc ...
Donc maintenant quand il s'agit de fichier dont je ne suis pas l'utilisateur final, j'essaie d'aller au plus simple (pas de vba, pas de matriciel), juste des formules, parfois des MFC.
Si le truc sur lequel je planche, (nous planchons, amis forumeurs) est encore "destroyé" par mes aimables collègues , je vais finir par juste pondre un pdf qui explique comment faire la chose .
Et puis c'est tout comme dirait M. LUCAS.

PS: pour ce qui me concerne, vous pouvez proposer toutes solutions (formules ou vba), elles viendront avec plaisir nourrir ma curiosité excelienne.
Je sais que quelque part trainent dans le forum des fils ou j'ai posté des solutions d'extraction mais malheureusement elles sont matricielles ou VBA.

Mais au final, je dois trouver une formule ultra simple et concise pour qu'enfin mon téléphone cesse de sonner un peu.

PS2: JHA; effectivement ta proposition matricielle fonctionne, mais comment obliger le CTRL+SHIFT+MAJ à l'utilisateur ?
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour à tous


JHA:
Par curiosité, j'ai essayé de traduire ta formule en VBA mais je n'y arrive pas .
La macro ci-dessous plante
Code:
Sub test()
Dim s$, x$
s = "aaa bbb ccc BDC 1245000 eeee fff"
x = Mid(s, InStr(1, s,Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), vbTextCompare) - 1, 7)
MsgBox x
End Sub
Une piste ?


Pour la formule, j'en suis touours à une formule à rallonge avec des si (en utilisant celle de JHA pour les cas simples )
 
Dernière édition:

JHA

XLDnaute Barbatruc
Re : [EXTRACTION Caractères] - cherche autre formule (ou plus courte)

Bonjour Staple 1600, le forum,

La formule donnée le 24/10 ne fonctionne pas, tu as le même résultat avec:

=STXT(B3;CHERCHE(0;B3;1)-1;7) car il y a toujours un "0" au 2 ème chiffre.

Désolé mais en VBA je suis nul de chez nul.
Edit pour trouver le "0" ou le 9 de l'année
=SI(NON(ESTERREUR(STXT(B3;CHERCHE(0;B3;1)-1;7)));STXT(B3;CHERCHE(0;B3;1)-1;7);STXT(B3;CHERCHE(9;B3;2)-1;7))

JHA
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote