Chercher le contenue d'une cellule dans une autre chaîne de car

Résolu/Fermé
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017 - 4 juin 2015 à 13:13
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017 - 7 juin 2015 à 17:17
Bonsoir,
Lorsque je veux chercher la valeur d'une cellule dans une autre colonnes ou plus ; j'utilise tout simplement la méthode VLOOKUP ;

soit par exemple :
=VLOOKUP(A2;B:B;1;FALSE) c'est à dire que je fais une recherche verticale du contenu de la cellule A2 ; dans les données trouvé dans la colonne et j'affiche le resulat trouvé dans la cellule issue de la colonne B ; en se basant sur une correspondance exact .

mais maintenant , j'ai un problème où le contenue de la cellule A2 n'est qu'une parti d'une autre cellule trouvé dans la colonne B ;

Que dois je faire ?
A voir également:

3 réponses

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
4 juin 2015 à 13:23
bonjour,

mais maintenant , j'ai un problème où le contenue de la cellule A2 n'est qu'une parti d'une autre cellule trouvé dans la colonne B ;

Et en fin de compte vous cherchez quoi ?????
0
via55 Messages postés 14496 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 22 novembre 2024 2 735
4 juin 2015 à 13:39
Bonjour

Tu peux utiliser une fonction personnalisée composée avec une macro
Exemple, à adapter à ton fichier :
http://www.cjoint.com/c/EFelMsVsgbh

Cdlmnt
Via
0
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
4 juin 2015 à 14:40
Merci à tous ,
via55 , j'ai vu que vous avez une formule ==> cherchermot() mais si c'est possible pouvez vous me donner la meme fonction en anglais , car mes fonctions prédefinie sont en anglais
0
via55 Messages postés 14496 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 22 novembre 2024 2 735 > 0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
4 juin 2015 à 15:01
Pas besoin de correspondance cherchermot n'existe pas dans les fonctions prédéfiniées, c' est le nom que j'ai donné à ma fonction personnalisée, c'est le nom de la macro (tu n'a pas fais ALT+F11 comme suggéré pour voir la macro ?)
Quant à la macro elle est en langage VBA donc en anglais et lisible par tout Excel
0
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
4 juin 2015 à 15:09
Merci,
toute à l'heure j'ai appuyé sur ctr+F11 à la place de alt+F11
excusez moi et merci une autre fois
0
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
5 juin 2015 à 21:37
Rebonsoir,

via55

Dans votre cas , vous avez fait une recherche dans une seule colonne, mais moi dans mon exemple je veux faire une recherche dans plusieurs colonnes ,
alors j'ai voulu remplacer la ligne de votre code:

- chaine = Range("D" & n).Value par chaine = Range("B:AE" & n).Value.

anisi que : If Tableau(i) = mot Then rep = Range("D" & n).Value par If Tableau(i) = mot Then rep = Range("B:AE" & n).Value.
et ça n'a pas marché par ce que ça l'aire faux , pour cela j'ai besoin une autre fois de votre aide .

Merci encore une fois .
0
via55 Messages postés 14496 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 22 novembre 2024 2 735
5 juin 2015 à 23:00
Re,

Macro à transformer ainsi (il faut faire une boucle sur toutes les colonnes)
Function cherchemot(mot As String)
Dim Tableau() As String
    trouve = 0
    rep = "Non trouvé"
    ' boucle sur les colonnes 2 à 31
    For y = 2 To 31
    ' boucle sur les 10 lignes de la colonne y - augmenter le nombre si nécessaire
    For n = 1 To 10
    ' extrait la chaine et découpe la chaine en fonction des espaces " "
    'le résultat de la fonction Split est stocké dans un tableau
    chaine = Cells(n, y).Value
    Tableau = Split(chaine, " ")
    'boucle sur le tableau
    For i = 0 To UBound(Tableau)
     'si mot est trouvé dans le tableau la variable rep prend la valeur de la ligne
    If Tableau(i) = mot Then rep = Cells(n, y).Value
    Next i
    Next n
    Next y
    ' on renvoie le resultat
    cherchemot = rep
End Function


Cdlmnt
Via
0
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
5 juin 2015 à 23:54
Merci infiniment,
juste une dernière question , comment faire pour créer une méthode?

moi , avant je clique sur (vieux , macro , record j'écris le nom , puis je clique sur view , edit et j'aurai l'interface dédié au développeur ) j'ai utilisé votre méthode et j'ai fait ctr+s . ==> j'ai eu le résultat que j'ai voulu , quand j'ai mis =cherchemot(A1).
Mais , quand j'ai voulu que cette méthode marche pour les autre ligne . j'ai cliqué sur la fin de la case et j'ai eu le même résultat qui est affiché dans la première ligne ;
Donc je me ss dis que forcement , il y'a une autre façon de le faire .

Merci
0
via55 Messages postés 14496 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 22 novembre 2024 2 735 > 0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
6 juin 2015 à 00:22
Re

Je ne comprends pas trop ce que tu me dis
Une fois la macro Function mise dans un module de l'éditeur VBA tu utilises la fonction comme toute autre fonction,
soit si tu recherches par exemple le mot livre, dans une cellule tu mets =cherchemot("livre")
soit tu recherches le mot qui est en A1 et en B1 par exemple tu mets =cherchemot(A1)
si tu as plusieurs mots en A1, A2 etc tu étires la formule de B1 en B2 etc

Cdlmnt
Via
0
0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
Modifié par 0548 le 7/06/2015 à 15:12
Re ,
je suis désolé pour le retard , mon ordinateur s'est planté , lorsque j'ai voulu exécuter votre code pour 100425 lignes et dans ceulle il y'a un texte ecrit de ce genre :
- #index 942885/#n Mark Gershon/#a Temple Univ., Philadelphia, PA/#pc 1/#cn 0/#hi 0/#pi 0.0000/#upi 0.0000/#t multiobjective dynamic programming;regional natural resource management .

et moi je veux chercher seulement l'index : exemple #index 942885.

j'ai mis la macro Function dans un module de l'éditeur VBA et j'ai utilisé la fonction en tapant "=cherchemot(A2)" ; j'ai eu le résultat d'une manière très vite.
Mais , quand j'ai voulu excuter la meme fonction 'cherchermot() pour les autres lignes . ça fait 2 jours que le programe tourne ; et il n'a exécuté que 6% du fichier .
y'a t'il une autre facon de le faire ?
Ps: j'ai voulu mettre le fichier à l'aide du site Cjoint.com mais la taille de mon fichier est grande.
Merci D'avance.
0
via55 Messages postés 14496 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 22 novembre 2024 2 735 > 0548 Messages postés 73 Date d'inscription samedi 21 mars 2015 Statut Membre Dernière intervention 19 janvier 2017
7 juin 2015 à 16:19
Bonjour

100 000 lignes et des longues chaines , pas étonnant que ça plante
Tu aurais pu donner toutes les précisions dès le départ , ça change tout, notamment le fait qu'il faut extraire qu'une partie du résultat trouvé

En procédant autrement, sans découpage des chaines mais avec une recherche par colonne, ce devrait être plus rapide. A la fin on extrait de la chaine les caractères à gauche du premier / trouvé (il faut que toutes les références dans les cellule soient présentées ainsi; sinon l'extraction n'est pas possible)
Un exemple, à adapter à tes besoins :
http://www.cjoint.com/c/EFhopJR4KrL

Cdlmnt
Via
0