Problème avec macro Excel de recherche
Jason901
Messages postés
7
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
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 !!
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:
- Problème avec macro Excel de recherche
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Si ou excel - Guide
17 réponses
Bonjour,
petite question:
ta liste 2 est elle la m^me que la liste 1= nombre de "test", valeurs, ordre
dans l'attente,
petite question:
ta liste 2 est elle la m^me que la liste 1= nombre de "test", valeurs, ordre
dans l'attente,
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
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
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?
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?
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 ! ;)
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 ! ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour, avez vous trouvé un semblant de solution à mon problème ?
Je suis sûr qu'il ne manque pas grand chose :(
Je suis sûr qu'il ne manque pas grand chose :(
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
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
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
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
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 !
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 !
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
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
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 !
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 !
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
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
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+
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+
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
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
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
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