XL 2016 Extraction texte à partir de la fin d'une chaine de caractère

loulourav

XLDnaute Occasionnel
Bonjour à tous,

J'arrive à extraire une information d'une chaine de caractère à commençant de la gauche vers la droite, mais comment faire pour commencer la recherche de la droite vers la gauche ?
Je cherche à récupérer la dernière valeur de Température (qui correspond dans la réalité à la 1ère prise de T°) dans une chaine de caractère qui contient plusieurs fois (ou pas) cette valeur.
dans l'exemple en PJ, je cherche à récupérer la valeur 38.2 uniquement, et qui se trouve à la fin de ma chaine de caractère ...
je sèche depuis un peu trop longtemps, malgré mes recherches sur le forum je n'ai pas réussi à construire la formule qui va bien ...

merci
 

Fichiers joints

Dugenou

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Une solution "de bourrin" si la température est toujours mesurée 4 fois dans votre texte :
=CHERCHE("(Température,";A5;CHERCHE("(Température,";A5;CHERCHE("(Température,";A5;CHERCHE("(Température,";A5)+1)+1)+1).
Sinon, il faudra passer par du VBA.
Cordialement
 

soan

XLDnaute Accro
Bonjour loulourav, le fil,

Je propose le fichier ci-dessous.
VB:
Option Explicit

Function Température(chn$) As Double
  Dim p1%, p2%
  p1 = InStrRev(chn, "Température,", -1, 1): If p1 = 0 Then Exit Function
  p2 = InStrRev(chn, "C°,", -1, 1): If p2 = 0 Then Exit Function
  p1 = p1 + 12: Température = Val(Mid$(chn, p1, p2 - p1 - 1))
End Function
soan
 

Fichiers joints

loulourav

XLDnaute Occasionnel
Bonjour a tous et merci pour vos contributions
Malheureusement non les constantes ne sont pas prises tjs 4 fois cela peut être 0 comme x fois ...
Il n'existe donc pas de possibilité hors VBA ? La destination du fichier s'oriente vers des non initiés j'aurais préféré un formule ...
 

soan

XLDnaute Accro
Re,

Je ne vois pas de solution sans VBA ; celle que j'ai proposée dans mon post #4
est indépendante du nombre de fois car c'est la dernière Température qui est
prise en compte. :)

soan
 

loulourav

XLDnaute Occasionnel
J'ai étudié vos propositions @soan et @Lolote83 je découvre que l'on peut déclarer des macros en tant que fonction et ca c'est cool ! je suis encore bien trop en retard sur le VBA !
bref en tout cas les 2 solutions fonctionnent, j'aurais tendance à préférer celle de Lolote83 que j'arrive plus facilement à comprendre ^^
histoire de fignoler, le nb de caractère des T° n'est pas toujours le même des fois je vais avoir 38.2 des fois je vais avoir 38 tout court, l'extraction sur 4 caractère ne renvoit donc pas des valeurs très propre :

38.2
38.7
39 C
38.0
38.1
38.9
38.2
38.2
38.1
38 C
38 C
38.2

est possible d'ajuster ?
 

soan

XLDnaute Accro
Tu as écrit : « le nb de caractère des T° n'est pas toujours le même »

ok, mais s'il y a toujours les 3 caractères "C°," après la température,
alors mon code VBA fournit les bons résultats, sans changement.

soan
 

loulourav

XLDnaute Occasionnel
Effectivement elle fonctionne parfaitement !
pourrais tu stp m'expliquer le fonctionnement de : InStrRev et de Val(Mid$(chn, p1, p2 - p1 - 1))
je pense avoir compris mais je ne connais pas du tout ces fonctions ...

merci
 

soan

XLDnaute Accro
chn1 : chaîne de caractères où l'on fait la recherche ; ici : chn$ (le A5 transmis)
chn2 : chaîne de caractères cherchée ; ici : "Température," ; puis "C°,"

InStr() cherche dans chn1, à partir du début, chn2
InStrRev() cherche dans chn1, à partir de la fin, chn2

InStrRev est l'abréviation de InStringReverse : dans la chaîne inversée ; car
effectivement, ça inverse d'abord la chaîne avant d'y faire la recherche.


Mid$() est l'équivalent VBA de la fonction STXT() ; ça retourne une
chaîne de caractères ; d'où le Val() pour convertir en nombre.

soan
 

Lolote83

XLDnaute Accro
Salut LOULOURAV, SOAN,
Afin de corriger dans la macro le fait que l'on ai pas toujours 4 caractères, voici un rectificatif
A remplacer dans le code initial
VB:
Function Coupe(xCell As Range)
    xDecoupe = Split(xCell, "(Température,")
    xValeur = UBound(xDecoupe)
    xDegre = InStr(1, xDecoupe(xValeur), "C°")
    Coupe = Left(xDecoupe(xValeur), xDegre - 2)
End Function
@+ Lolote83
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas