Recherche de plusieurs caractères dans une même cellule

Résolu/Fermé
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 - 5 oct. 2012 à 15:23
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 - 23 oct. 2012 à 14:57
Bonjour,

Sous Excel 2007,

Je cherche à faire une recherche multiple au sein d'une même cellule.
J'éclaircie l'ensemble de mon problème:

Une UNIQUE cellule contient plusieurs informations du type:
"Pierre mange une pomme
Pierre mange une orange"

Chaque information est associée des calories dans un autre tableau:
"Pierre mange une pomme : 70"
"Pierre mange une orange : 50"
"Pierre mange du chocolat : 500"

J'aimerais être capable d'analyser chaque ligne de la cellule pour ressortir le nombre maximum de calories mangées par Pierre.

Mon problème est un peu complexe, mais si vous avez une idée à proposer, je vous en remercie d'avance!!

Pierre


5 réponses

Raymond PENTIER Messages postés 58836 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 janvier 2025 17 276
6 oct. 2012 à 05:08
=SI(NB.SI(A1;"*pomme*")>0;70;"")+SI(NB.SI(A1;"*orange*")>0;50;"")+SI(NB.SI(A1;"*chocolat*")>0;500;"")
0
Raymond PENTIER Messages postés 58836 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 janvier 2025 17 276
7 oct. 2012 à 02:36
Dommage de collectionner les votes négatifs sans qu'il y ait la moindre explication sur l'inutilité ou l'inefficacité de cette formule ...
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 7/10/2012 à 07:11
Salut raymond,

Peut-être parce que si tu as une liste de 300 aliments ça va devenir un peu longuet à saisir non ?
Je précise que je n'ai pas mis -1..

eric
0
Bonjour a tous!
Deja merci de vos réponses et désolé pour le delai!
En effet il s'agit d'une liste assez lourde et qui peut etre amenée à évoluer..
J'ai essayé de simplifier par un exemple simple un probleme au travail
0
Raymond PENTIER Messages postés 58836 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 janvier 2025 17 276
9 oct. 2012 à 01:33
Je n'ai donc aucune honte à avoir de n'avoir pas compris un problème qui n'est pas celui qui était exposé ...
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 6/10/2012 à 09:06
Bonjour,

une proposition avec une fonction personnalisée en vba:
Function add(cellule As Range, plage As Range) As Double  
    Dim phr, lig As Long, pos As Long, i As Long  
    phr = Split(Replace(cellule, vbCrLf, vbLf), vbLf)  
    For i = 0 To UBound(phr)  
        For lig = 1 To plage.Rows.Count  
            pos = InStr(1, plage.Cells(lig, 1), ":")  
            If Left(plage.Cells(lig, 1), pos - 2) = phr(i) Then add = add + CDbl(Mid(plage.Cells(lig, 1), pos + 2))  
        Next lig  
    Next i  
End Function 

Syntaxe :
=add(cellule;plage)
=add(A2;D2:D4)

exemple : https://www.cjoint.com/?BJgjc3HMr5g
Si les cellules de la plage ne respectent pas 1 seul espace de part et d'autre du ":" le résultat sera erroné. Contrôle si tu n'as pas des cas particuliers à traiter.

eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 1
7 oct. 2012 à 10:43
Bonjour eriic,
Je ne suis pas tres familier avec vba. Il s'agit des macro n'est pas?
Je ne comprends pas bien ce que je dois faire de cette fonction.
Comment faites vous pour inserer une piece jointe? J'aimerais vous envoyer l'exemple reel sur lequel je bloque
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
7 oct. 2012 à 11:08
Bonjour,

Une fonction personnalisée s'utilise sur une feuille comme une fonction native d'excel.
Elle doit être copiée dans un module 'standard' de vba (pas un module de feuille).
Faire alt+F11 pour ouvrir l'éditeur VBE et voir le code.
As-tu cliqué sur le lien bleu pour tester ?

Déposer un fichier sur cjoint.com et coller ici le lien fourni.

eric
0
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 5 111
7 oct. 2012 à 07:09
Salut le fil,

Et oui dure réalité de vouloir aider bénévolement. J'ai l'impression que depuis quelques temps se développe un climat de règlement de compte surtout que surpepiot ne se manisfaite nullement
Pour la solidarité un fichier exemple qui traite le problème par formule

https://www.cjoint.com/?BJhhigvym5C
0
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 1
7 oct. 2012 à 10:36
Merci Mike!
Je regarde ca revenu a mon bureau
0
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 1
8 oct. 2012 à 14:40
Bonjour à tous,

Déjà, merci à vous 3 pour vos réponses,
Raymond, en effet, la base de comparaison est trop grosse pour ce type de formule,
Eriic, je ne parviens pas à utiliser ta macro...
Mike, ta proposition ne prend pas en compte les cellules avec plusieurs lignes

Je vous envoie une partie du fichier que je dois traiter, ce sera plus clair.
https://www.cjoint.com/?BJioh33Ax7N

J'ai dans la feuil2 un tableau invariable dans lequel une valeur de gravité est associée à un défaut.

Dans la feuill1, sur laquelle je travaille, je n'ai pour l'instant que la colonne C vert fluo. Le but est de remplir la colonne D en allant chercher dans la feuil2 les correspondances de défauts et y associer la gravité correspondante. (pour info, la feuil2 est un extrait d'un tableau de 900 lignes, donc je ne peut me permettre de chercher par rapport à une base de donnée fixe, comme propose Raymond)

La difficulté réside dans le fait, que dans certaines cellules de la colonne C de la feuil1, il y a plusieurs défauts. Je n'arrive pas à analyser une cellule lorsqu'il y a plusieurs défauts. Je voudrais pour voir faire une recherche sur chaque ligne de la cellule, extraire la gravité associée dans la feuil2, puis écrire dans la colonne D de la Feuil1 la gravité max uniquement.

J'ai écris dans la colonne D Feuil1 la résultat théorique.

J'espère avoir été assez clair et avoir fourni assez de détails.

Pierre
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
Modifié par eriiic le 8/10/2012 à 16:07
Bonjour,

Eriic, je ne parviens pas à utiliser ta macro...
C'est sûr, ton tableau est complètement différent de ce que tu demandes.
Tu mets entre guillemets "Pierre mange une pomme : 70" comme si c'était une seule cellule. Hors c'est réparti sur 2 cellules ce qui n'a plus rien à voir.

Et changer son problème plutôt que de l'exposer directement (sauf si secret d'état) n'amène rien de plus que des incompréhensions :
ressortir le nombre maximum de calories mangées par Pierre
On ne peut comprendre que addition, et non max...

eric

edit : nouvelle fonction
https://www.cjoint.com/?BJiqfcF5b7X
revalide D9 pour voir le message si libellé inconnu.
La plage dess libellés doit être nommées Défauts et utiliser ce nom pour l'écriture de la formule (excel réagit bizarrement si sélection de la plage à la souris)

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 1
23 oct. 2012 à 09:50
Bonjour Eriic,

J'ai mis du temps à répondre ça j'étais parti en déplacement et n'ai malheureusement pas eu le temps de regarder ta macro.
Cela fonctionne parfaitement! Merci beaucoup !

(Pour la cellule D9, le défaut possible en C9 Feuil1 était mal référencé en Feuil2.)

Dernière chose, pour adapter ta macro à mon document entier, je suis allé dans :
Affichage
Macro
Afficher les macros

et aucune ne s'affiche.
Peux tu me dire ou je dois aller la chercher, s'il te plait?

Merci d'avance,

Pierre
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
23 oct. 2012 à 10:22
Bonjour,

Cest une fonction personnalisée, elle n'apparait donc pas dans le menu 'Afficher les macros '.
Par contre elle apparait dans 'insérer / fonctions / fonctions personnalisées'.
Le code est dans Module1.

(Pour la cellule D9, le défaut possible en C9 Feuil1 était mal référencé en Feuil2.)
C'était fait exprès que tu vois le code d'erreur retourné (j'aurais peut-être dû mettre #N/A!).

eric
0
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 1
23 oct. 2012 à 11:11
Bonjour,

Dans l'onglet "Formule", j'ai bien
"insérer une Fonction" puis dans le menu déroulant "personnalisé"
je trouve alors votre fonction gravitéMax, ainsi que les variables de la fonction : gravitéMax(cellule;libellésDéfauts)

Je ne vois alors aucun "Module1".
Je suppose que je ne suis pas au bon endroit, mais ne trouve pas 'insérer'...

Merci,

Pierre
0
superpiot04 Messages postés 13 Date d'inscription vendredi 5 octobre 2012 Statut Membre Dernière intervention 15 février 2015 1
23 oct. 2012 à 11:34
Un Alt+F11 m'a directement renvoyé dans ta fonction !
La variable libellésdéfaut fait vraisemblablement référence à la plage de recherche des défauts.
Mais comment associes-tu la valeur "Défauts" à la colonne de "défaut" de la Feuil2 ?

Merci,

Pierre
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 250
23 oct. 2012 à 11:56
split() découpe ta phrase sur chaque retour à la ligne et recherche pour chaque morceau la gravité.
La gravité maxi rencontrée est retournée.
Pour chaque fonction vba dans le code tu peux faire F1 dessus pour avoir l'aide excel et voir son rôle.

eric
0