Problème avec macro Excel de recherche

Fermé
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009 - 25 juin 2009 à 13:33
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 10 août 2009 à 19:38
Bonjour,

Je fais appel à vous car je bute depuis 2 semaines sur une macro Excel permettant de rechercher des valeurs. Je vous explique :

J'ai 2 listes séparées par une ligne. La première contient des valeurs accolées. Je souhaite pour chaque élément de la deuxième liste parcourir la première, et récupérer la valeur accolée.

test1 10
test2 25
test3 14
test4 23
test5 12

test1
test2
test3
test4
test5


Pour le moment ma réalisation ne me permet que de renvoyer les 2 premiers champs. Mon code est lourd. Le voici :

Sub Test2()

'##Je me positionne sur la première ligne et je remplis mes variables y et z afin d'effectuer mon parcours '###avec la boucle For
Range("A1").Select
Selection.End(xlDown).Select
y = ActiveCell.Row

ActiveCell.Offset(2, 0).Select
Z = ActiveCell.Row

Selection.End(xlDown).Select
x = ActiveCell.Row
'#####

'###Je me repositionne au premier élément de ma deuxième liste
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(2, 0).Select
'####

'#Je commence mon parcours###
For i = Z To x
SearchValue = ActiveCell.Value


Range("C1", "C8").Select '(à adapter en fonction de la zone de recherche)
For Each k In Selection
If k.Value = SearchValue Then
Range("B" & i & "").Value = k.Offset(0, 1).Value
'ActiveCell.Offset(1, 0).Select

Exit For
End If
Next

ActiveCell.Offset(1, 0).Select

Next

End Sub


Donc cela ne fonctionne pas de manière optimale et pas correctement. A terme cela sera utilisé sur une liste de 2000 éléments. Quelqu'un pourrait m'aider ?


J'oubliais, pour corser un eu la chose, si dans ma première liste j'ai 2 fois par exemple test2 avec une valeur 5 puis 10, je souhaite recopier 10 dans ma 2ème liste !

test2 5
test2 10

test2 10


Merci beaucoup d'avance !!
A voir également:

17 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
25 juin 2009 à 13:53
Bonjour,
petite question:
ta liste 2 est elle la m^me que la liste 1= nombre de "test", valeurs, ordre
dans l'attente,
0
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
25 juin 2009 à 14:42
Bonjour, merci de votre intérêt ;)

Alors pas forcément, dans la première liste on peut avoir 5 fois test1 et que une ou 2 fois retrouver test1 dans la deuxième série

Salutations
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
25 juin 2009 à 14:51
OK,mais

1/Si j'ai 5 ou N fois Test1 dans liste1 et 1 fois dans liste2: qu'est ce que lon fait? la somme? la valeur la + forte?....
2/Si j'ai 5 ou N fois Test1 dans liste1 et plusieurs fois dans liste2 sur quoi se base t'on et qu'est ce que l'on fait?
0
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
25 juin 2009 à 16:27
reBonjour, voici les réponses :

En fait dans la première liste s'il y a plusieurs test1 ce serait toujours avec une valeur +1 associée, exemple :

test1 1
test1 2
test1 3

Il faut que le premier test1 de la deuxième liste soit incrémenter de 1, donc la liste 2 devra ici contenir :

test1 4

Et s'il y a 2 test1 dans la première liste, alors il faudra dans la deuxème avoir :

test1 4
test1 5

Désolé de ne pas avoir pensé à donner ses informations au départ et merci de ton aide ! ;)
0

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

Posez votre question
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
29 juin 2009 à 12:47
Bonjour, avez vous trouvé un semblant de solution à mon problème ?

Je suis sûr qu'il ne manque pas grand chose :(
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 311
29 juin 2009 à 13:27
ta demande m'est incompréhensible...
donc, j'ai laissé tomber
0
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 11:49
Hello michel_m.
Désolé pour les explications. Je vais essayer de faire mieux :

Ma première liste contient des positions de commandes, c'est à dire que pour chaque article rattachés à une commande il y a une numérotation. S'il y a 3 articles sur la première commande A et 4 sur la deuxième B alors j'aurai :

commandeA 1
commandeA 2
commandeA 3
commandeB 1
commandeB 2
commandeB 3
commandeB 4

Je pense que cela est plus clair désormais ;o)

Passons à la deuxième liste maintenant :
Il s'agit également de positions de commandes mais celles-ci représentent des frais de ports et parfois un rabais. Le rabais est présent selon le montant total de la commande (juste pour info, ce travail de récupération du rabais se fait en amont).
Donc, à la base j'ai ma liste 2 qui se présente ainsi :

commandeA typ_fdp
commandeB typ_fdp
commandeB typ_rabais

Par exemple on voit ici que la commande B contient un rabais.
Le but de la macro est de rechercher dans la première liste la commandeA, trouver sa position la plus élevée, et reporter cette position dans la 2ème liste en faisant +1 afin d'obtenir :

commandeA 4 typ_fdp
commandeB 5 typ_fdp
commandeB 6 typ_rabais

J'espère que tu as saisi ma problématique et ça serait vraiment cool de m'aider, car je m'arrache les cheveux.

D'avance,merci beaucoup !

Jason
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
30 juin 2009 à 13:23
Bonjour,

Voici une proposition. Pour simplifier j'ai mis tes données sur 2 feuilles (et j'ai fait à mon idée sans reprendre ton code).
J'ai considéré qu'il n'y avait qu'un seul espace dans 'commandeA 1' comme dans ton exemple, et j'ai concaténé le résultat. Sinon tu adapteras, la structure est là...

jason901.xls

eric
0
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 17:23
Merci pour ton aide

Enfait les données sont dans des cellules différentes :

CommandeA 5 typ_fdp sont dans 3 cellules accollées !

Mais je vais essayer d'adapter ton code ;)

Merci je te tiens au jus !
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
30 juin 2009 à 17:42
Re,

Désolé, La première contient des valeurs accolées : pour moi ça veut dire que ça ne forme plus qu'une seule valeur...
Du coup c'est plus simple :
jason901_2.xls
eric
0
Jason901 Messages postés 7 Date d'inscription jeudi 25 juin 2009 Statut Membre Dernière intervention 1 juillet 2009
1 juil. 2009 à 08:15
Bonjour Eric,

Merci beaucoup, "on" est en bonne voie :)

Je bute cependant sur un problème que j'ai depuis le départ :
J'ai toutes mes données, donc mes 2 listes sur la même feuille. Par exemple les 1000 premiers articles constituant la première liste sont séparées de la deuxième liste par une simple ligne vide, je ne peux recevoir les données autrement dans Excel.
Il faudrait donc réussir à intégrer cela, et là je bute totalement, c'est pour moi la plus grosse difficulté.

Merci de ton aide !
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
1 juil. 2009 à 09:32
Bonjour,

Je pensais que tu allais faire un copier-coller mais voici la modif :
jason901_03.xls

eric

PS : si tu peux ajouter juste avant le end sub :
set sh1 = nothing
set sh2 = nothing

merci
0
Salut eriiic,

Juste pour information je n'ai pas eu l'occsion d'avancer sur le sujet j'ai été placé sur un autre projet cet après-midi je vais cependnat m'y remettre :)

Je te tiens au courant ¨!

Merci a+
0
Cool, j'y suis presque, j'ai un tout petit peu modifié ton code, notamment au début
cdes(100, 1) As Variant que j'ai transofrmé en cdes(65536, 1) As Variant

J'ai juste une difficulté et c'est réglé :

Les commandes sont listées en B et les positions en C (et non pas respectivement en A et B)

J'ai modifié les lignes

For Each c In sh1.[A2].Resize(sh1.[A1].End(xlDown).Row - 1)

et

For Each c In sh1.[A2].Offset(sh1.[A1].End(xlDown).Row, 0).Resize(sh2.[A65536].End(xlUp).Row - 1)


en

For Each c In sh1.[B2].Resize(sh1.[B1].End(xlDown).Row - 1)

For Each c In sh1.[B2].Offset(sh1.[B1].End(xlDown).Row, 0).Resize(sh2.[A65536].End(xlUp).Row - 1)


Mais ça ne va pas, je vois pas ce qui cloche.
Si je peux encore te solliciter pour ça..

Merci beaucoup !

Jason
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
21 juil. 2009 à 19:56
Bonjour,

A vue de nez j'aurais fait pareil... Apparement tu as bien différencié sh1 et sh2.
Pour ne pas multiplier les hypothèses il faudrait que tu déposes ton fichier débarrassé des données confidentielles sur cijoint.fr et que tu colles ici le lien fourni.

eric
0
Hello eriiic,

Merci BEAUCOUP, cela marche enfin, je ne sais pas ce qui n'allait pas...
J'ai voulu t'envoyer un fichier de demo et pouf ça a fonctionné :D

Merci mille fois pour ton suivi et ton investissement !

Salutations

Jason
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
10 août 2009 à 19:38
Bonjour,

ok, merci pour le retour et bonne continuation :-)
eric
0