Recherche d'une chaine de caracteres dans une liste et renvoi d'une valeur [Résolu]

Signaler
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008
-
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007
-
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

Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

Ok Merci pour la précision, j'en tiendrais compte pour mes prochains codes.

Bonne soirée

MAXIMO71
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 110 internautes nous ont dit merci ce mois-ci

Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

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:
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
20
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
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
86
Date d'inscription
vendredi 27 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2016
2
Vous pouvez répeter la question ?!?!
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
Il me semble qu'on sur vbfrance et non pas sur "excelfrance" !

Redman
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

ben je sais pas, mais je demande du code en VBA (puisque l'on est dans le forum VBA ) et non une macro....
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
1
Ah bon, ok.

Redman
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

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
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

je teste ca dés que je peux et je te tiens au courant...
en tout cas merci beaucoup pour ta contribution...
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

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
Messages postés
46
Date d'inscription
samedi 25 mars 2006
Statut
Membre
Dernière intervention
7 juin 2007

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
Messages postés
21
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
12 mars 2008

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