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

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
 

Pièces jointes

  • extract fin.xlsx
    8.6 KB · Affichages: 19

Dugenou

XLDnaute Barbatruc
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 Barbatruc
Inactif
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
 

Pièces jointes

  • extract fin.xlsm
    15.2 KB · Affichages: 6

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

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

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…