Rechercher deux mot dans une phrase + ID avec ordre Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
A
Allanhub
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 17 février 2016
Version d'Excel : 2010

Message par Allanhub » 31 août 2016, 11:30

Bonjour à tous,

Je viens vers vous car je cherche depuis un moment avec les fonction "TROUVE" etc mais je n'y parviens pas...

Mon problème :

Ma phrase se trouve dans la cellule B à chaque fois.

1ère Manip : J'aimerai identifier les 2 animaux présents dans la phrase suivant le petit tableau "animaux possibles". J'aimerai recopier suivant l'ordre de lecture de la phrase, les deux animaux respectivement dans les cases jaunes "Anim1" et "Anim2".

2ème Manip : Pour le ratio j'aimerai identifier le ratio dans la phrase. Il est toujours du même format et s'écrit : ".../..." => les 3points sont automatiquement des nombres. Et ainsi les recopier respectivement dans les cases jaunes Ratio 1 et Ratio 2 selon l'ordre de lecture de la phrase.

J'ai laissé le résultat que j'aimerai obtenir dans le tableau afin de faciliter votre compréhension.

J'espère avoir suffisamment détaillé le problème et je suis dispo pour toutes vos questions. N'hésitez pas à me dire si le problème est trop compliqué.

Agréable journée et un grand merci d'avance.

AllanHub
Aide for.xlsx
(11.58 Kio) Téléchargé 7 fois
A
Allanhub
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 17 février 2016
Version d'Excel : 2010

Message par Allanhub » 31 août 2016, 14:42

Petit UP ?

Je continue à chercher mais je ne trouve pas peut-être que ce n'est pas possible ? Ou alors faut-il passer par le VBA ?
A
Amadéus
Modérateur
Modérateur
Messages : 17'691
Appréciations reçues : 78
Inscrit le : 7 mai 2006
Version d'Excel : Office Excel 2003 FR et 2013FR

Message par Amadéus » 31 août 2016, 15:17

Bonjour
Formule en E3, incrémentée vers le bas
=STXT(B3;1;CHERCHE("/";B3;1)-1)
Dormule en F3, incrémentée vers le bas (Matricielle à valider avec les 3 touches Ctrl+Maj+Entrée)
=INDEX($K$1:$K$9;SOMME(ESTNUM(CHERCHE(SI($K$6:$K$9<>"";$K$6:$K$9);SUBSTITUE($B3;E3;"")))*LIGNE($K$6:$K$9)))
Cordialement
Aide for.xlsx
(12.13 Kio) Téléchargé 7 fois
Amadéus vous informe que, pour cause de saturation, il ne peut plus répondre aux messages privés non sollicités.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 447
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 31 août 2016, 15:42

Bonjour,

Voilà une fonction personnalisée matricielle qu'il m'a fallu un certain temps pour lui faire prendre en compte presque toutes les irrégularités de tes chaînes (multiplication de slash, espaces en début ou fin, ou accolés au slash...).
Elle s'utilise sur les 4 colonnes résultats de la ligne (à sélectionner avant d'insérer la fonction et de la valider matriciellement.
Les arguments sont la chaîne et la liste de référence.

Quand elle renvoie N/A, c'est qu'il y a une espace intempestive qui ne peut être géré individuellement... Il ne te reste qu'à l'éliminer manuellement (et la fonction renverra alors le résultat). :mrgreen:
Function LISTERCOUPLES(tx As String, liste)
    Dim T, tt, el, i%, n%, anim As Boolean
    Application.Volatile
    T = Replace(Replace(tx, " /", "/"), "/ ", "/")
    T = Split(T)
    For i = 0 To UBound(T)
        If InStr(T(i), "/") Then
            tt = Replace(Replace(T(i), "/", "|", 1, 1), "/", "")
            tt = Split(tt, "|")
            If anim Then
                T(i) = Join(tt, "|")
            Else
                For Each el In liste
                    If InStr(tt(0), Trim(el)) Then
                        tt(0) = Trim(el): n = n + 1
                        If n = 2 Then Exit For
                    End If
                    If InStr(tt(1), Trim(el)) Then
                        tt(1) = Trim(el): n = n + 1
                        If n = 2 Then Exit For
                    End If
                Next el
                If n = 2 Then
                    T(i) = Join(tt, "|") & "|": anim = True
                Else
                    T(i) = ""
                End If
            End If
            n = 0
        Else
            T(i) = ""
        End If
    Next i
    T = Replace(Join(T), " ", "")
    If T <> "" Then
        LISTERCOUPLES = Split(T, "|")
    Else
        LISTERCOUPLES = CVErr(xlErrNA)
    End If
End Function
:D
allanhub_Aide for.xlsm
(18.68 Kio) Téléchargé 11 fois
A
Allanhub
Membre habitué
Membre habitué
Messages : 71
Inscrit le : 17 février 2016
Version d'Excel : 2010

Message par Allanhub » 31 août 2016, 16:10

Re,

Les Deux solutions pour les animaux fonctionnent à merveille ::o ! Merci pour la solution de plus MFerrand pour les Ratio !

Oui comme je l'ai expliqué par message la colonne B provient d'une extraction et je devais me débrouiller pour en extraire les info utiles malgré le bruit engendré par d'autre écriture dans la même phrase !

Vous avez répondu à ma demande et c'est super sympa, et je ne peux qu'être impressionné :roll:

Je vous en suis très reconnaissant ! Je vous tiens au courant pour l'application que je réussi à en faire sur mon fichier réel

Cordialement.

AllanHub
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message