Recherche d'une chaine de caracteres dans une liste et renvoi d'une valeur

Résolu
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008 - 25 mars 2006 à 14:24
MAXIMO71 Messages postés 46 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 7 juin 2007 - 29 mars 2006 à 19:15
Bonjour

Voila j'explique mon probleme dont je ne sais pas par quel bout prendre:



dans un fichier excel sur une feuille2, j'ai la liste suivante





sur une feuille1, j'ai une cellule de saisie (A1) dans laquelle je vais saisir un bout de texte



si je ne saisis rien en A1, A2 et A3 seront vides ainsi que B2:Z3

si je saisis "angelo" en A1, A2= "angelo" et A3= 0.59 et B2:Z3 seront vides

si je saisis "ngel" en A1, A2= "angelo" et A3= 0.59 et B2:Z3 seront vides

si je saisis "christian" en A1, A2= "christian" et A3= 0.54 et B2:Z3 seront vides

si je saisis "hrist" en A1, A2= "christian" et A3= 0.54



B2= "christophe" et B3= 1.2



C2=
"christine" et C3= 0.88 et D2:Z3 seront vides



voila mon probleme, si vous n'avez pas tout saisi, n'hesitez pas à me demander cet oubli de ma part...



merci beaucoup d'avance car la je suis bloqué

a+

14 réponses

MAXIMO71 Messages postés 46 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 7 juin 2007
29 mars 2006 à 19:15
Ok Merci pour la précision, j'en tiendrais compte pour mes prochains codes.

Bonne soirée

MAXIMO71
3
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
25 mars 2006 à 14:29
bon a priori mon image représentant ma liste n'a pas fonctionné et je
n'ai pas trouvé la fonction "éditer" alors je la poste ici:
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
25 mars 2006 à 15:10
Salut,

Bon, et bien je le dis alors : je n'ai rien compris. Où est ton problème ?

Qu'est ce qui ne fonctionne pas ?
As-tu un code qui crache une erreur ?



"Si je saisis [...] alors les cases [...] seront vides"

Il est où le problème ? Elles ne devraient pas l'être ?


Manu
0
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
25 mars 2006 à 15:21
en effet lol, je me suis mal exprimé

je voulais dire , j'aimerais obtenir:

si je ne saisis rien en A1, A2 et A3 seront vides ainsi que B2:Z3
si je saisis "angelo" en A1, A2= "angelo" et A3= 0.59 et B2:Z3 seront vides
si je saisis "ngel" en A1, A2= "angelo" et A3= 0.59 et B2:Z3 seront vides
si je saisis "christian" en A1, A2= "christian" et A3= 0.54 et B2:Z3 seront vides
si je saisis "hrist" en A1, A2= "christian" et A3= 0.54
B2= "christophe" et B3= 1.2
C2= "christine" et C3= 0.88 et D2:Z3 seront vides

car la j'ai rien pour l'instant puisque je n'ai rien développé, ne sachant pas par ou démarrer
0

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

Posez votre question
TomIlliev Messages postés 86 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 13 octobre 2016 2
25 mars 2006 à 16:48
Vous pouvez répeter la question ?!?!
0
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
25 mars 2006 à 19:59
qu'est ce que tu ne comprend pas?

en fait j'aimerais , à partir d'une chaine de caracteres que je tape dans une cellule que j'appellerai "saisie" et qui se trouve en "A1" dans mon exemple, obtenir tous les noms dans une liste incluant la chaine de caractere saisie en "A2" et la valeur qui se trouve à coté du nom dans la liste, qui se renvoyée en "A3"....

mais est-ce si compliqué....? , je mets les exemples que je veux obtenir pour plus de sîmplicité:
liste sur Feuille2:

1er exemple je tape angelo en "A1" et j'obtiens en A2 et A3:

2eme exemple je tape ngel en "A1" et j'obtiens en A2 et A3:

3eme exemple je tape christian en "A1" et j'obtiens en A2 et A3:

4eme exemple je tape hrist en "A1" et j'obtiens en A2 et A3, B2 et B3 et C2 et C3 car "hrist" est inclus dans christian, christophe et christine:

Voila j'espere que je suis un peu plus clair..., quel code dois je utiliser pour obtenir ceci
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
26 mars 2006 à 12:22
Il me semble qu'on sur vbfrance et non pas sur "excelfrance" !

Redman
0
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
26 mars 2006 à 12:32
ben je sais pas, mais je demande du code en VBA (puisque l'on est dans le forum VBA ) et non une macro....
0
OneHacker Messages postés 1447 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 23 septembre 2007 2
26 mars 2006 à 12:34
Ah bon, ok.

Redman
0
MAXIMO71 Messages postés 46 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 7 juin 2007
26 mars 2006 à 16:15
Je te livr mon code j'espère qu'il te sera utile.



Sub Recherche_De_Chaine()

'

Dim lig As Integer

Dim compt As Integer

Dim FinR As Integer







'Selection de la cellule de saisie

Achercher = Worksheets("Recherche").Cells(1, 1).Value



'Denombrement du nombre de charactères dans la cellule de saisie

LongChaineARechercher = Selection.Characters.Count



'Recherche simple



'Si l'ordre de te liste de référence n'est pas importante, je te propose de la trier

For Each c In Worksheets("Recherche").Range("b1: c1000")

c.Value = ""

Next c

lig = 0

For Each c In Worksheets("Tableau de référence").Range("A1: A1000")

If c.Value = "" Then

Worksheets("Tableau de référence").Select

Range("A1:B" & lig).Select

Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Range("A1").Select

Worksheets("Recherche").Select

Range("A1").Select

Exit For



End If

lig = lig + 1

Next c



'La premiere recherche consiste à vérifier que le mot en Worksheets("Recherche").Range("A1")

'existe dans ton tableau de référence Worksheets("Tableau de référence").Range("A1: A1000")

'Je ne suis certain que cela soit utile mais bon je te le laisse



compt = 0

lig = 0

For Each c In Worksheets("Tableau de référence").Range("A1: A1000")

lig = lig + 1

If c.Value = Worksheets("Recherche").Range("A1").Value Then

compt = compt + 1

Worksheets("Recherche").Range("B" & compt).Value = c.Value


Worksheets("Recherche").Range("C" & compt).Value =
Worksheets("Tableau de référence").Range("B" & lig).Value

Else

If c.Value = "" Then

Exit For

End If

End If

Next c



'Si cela ne fonctionne pas c'est le moment de passer aux choses sérieuses

'La subtilité consiste à utiliser les propriétés de l'objet Characters



compt = 0

lig = 0



For Each c In Worksheets("Tableau de référence").Range("A1: A1000")

lig = lig + 1

LongRecherche = c.Characters.Count



'Cette condition doit être vraie car autrement la boucle simple aurait donner des résultats

If LongChaineARechercher < LongRecherche Then



'Si tu recherche une chaine de 6 caractères dans une chaine de 10 il faut tester seulement

'les 5 premiers caractères c'est l'histoire des poteaux et des intervalles

FinR = LongRecherche - LongChaineARechercher + 1

For i = 1 To FinR

test2 = c.Characters(i, LongChaineARechercher).Text

If test2 = Achercher Then

compt = compt + 1


Worksheets("Recherche").Range("B" & compt).Value = c.Value


Worksheets("Recherche").Range("C" & compt).Value =
Worksheets("Tableau de référence").Range("B" & lig).Value

Exit For

End If

Next i

End If

Next c



End Sub


MAXIMO71
0
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
26 mars 2006 à 20:10
je teste ca dés que je peux et je te tiens au courant...
en tout cas merci beaucoup pour ta contribution...
0
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
26 mars 2006 à 20:23
ton programme fonctionne bien, impressionnant, par contre ce qui est étrange si je fais une recherche, elle s'avère convaincante et renvoit les valeurs demandées, ensuite si je vide ma cellule de saisie et je relance la machine, ce qui est étrange, il faudra 2 lancements de la macro pour que celle-ci fonctionne; le 1er lancement ne donne rien et le 2eme lancement fonctionne

mais je t'avoue que cela ne me gène pas

merci beaucoup
0
MAXIMO71 Messages postés 46 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 7 juin 2007
26 mars 2006 à 20:59
J'ai vu le pb je regarde ce que je peux faire mais je ne comprend pas en revanche tu peux remplacer
Achercher = Worksheets("Recherche").Cells(1, 1).Value

par

Achercher =LCase( Worksheets("Recherche").Cells(1, 1).Text)

cela permet de ne pas prendre en compte la CASE dans la cellule de recherche






MAXIMO71
0
Didf Messages postés 21 Date d'inscription mercredi 26 octobre 2005 Statut Membre Dernière intervention 12 mars 2008
29 mars 2006 à 11:45
Didf dit: ton programme fonctionne bien, impressionnant, par contre ce qui est
étrange si je fais une recherche, elle s'avère convaincante
et renvoit les valeurs demandées, ensuite si je vide ma cellule de
saisie et je relance la machine, ce qui est étrange, il faudra 2
lancements de la macro pour que celle-ci fonctionne; le 1er lancement
ne donne rien et le 2eme lancement fonctionne



j'ai remarqué que la macro ne se lance qu'a la 2eme fois car
, cette fois ci, le focus de cellule se trouve sur la cellule de
recherche "A1" de la feuille "Recherche" (positionné par la fin de la
macro)

j'ai fait quelques essais, et , en effet, quand le focus se trouve sur
la cellule de recherche, la macro marche a tous les coups, sinon,
jamais.

il suffit donc d'insérer au début de la macro :

Range("A1").Select afin que le focus se mette sur A1...



voila
0
Rejoignez-nous