|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
bonjour a tous, je me trouve dans un cas ou une vlookup ne me suffit pas, je vous explique,
dans ma colonne a ( nommé: parent) se trouve plein de ligne, dans ma colonne B ( nommé designation ) pareil, et dans ma colonne C les infos qui m'interessent. actuellement ma macro fonctionne comme ceci: elle me cherche la 1ere ligne qui contient Pompe dans la colonne designation et me récupere la valeur associé dans la colonne C: Code :
Application.WorksheetFunction.VLookup("*POMPE*", Worksheets(variable1).Range("D2: G65536"), 4, False) * 1000 Cela est-il possible via 1 vlookup ? ou 2, ou bien avec une autre fonction? Merci de votre aide |
|
|
00
|
|
|
#2 | |||
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Bonjour,
Code :
__________________
Cordialement. Daniel Citation:
|
|||
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
merci pour cette formule, j'aimerai la comprendre, ne fait evaluate retourne quoi comme résultat? si je souhaite spécifier une feuille spécifique, comment je peux spécifier cela ? en passant par une range et une worksheet? comme ceci ?
Code :
Evaluate("INDEX(Worksheets("Top20 répartition h MO").Range(C1:C65536),MAX(IF(NOT(ISERR(SEARCH(""habille"",A2:A65536)))*NOT(ISERR(SEARCH(""pompe"",B2:B65536)))>0,ROW(A2:A65536))))") |
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
"Evaluate", comme son nom le laisse penser, évalue une formule Excel (dans sa traduction US) et retourne le résultat dans la variable spécifiée (ici "Résultat"). Pour info, la formule française est :
Code :
=INDEX($C$1:$C$10;MAX(SI(NON(ESTERR(CHERCHE("habille";$A$2:$A$10)))*NON(ESTERR(CHERCHE("pompe";$B$2:$B$10)))>0;LIGNE($A$2:$A$10)))) Comme il s'agît d'une formule Excel, libre à toi d'ajouter le nom des feuilles.=avec la même syntaxe que pour une formule. Si tu veux qu'une plage se réfère à une feuille, tu dois écrire : Code :
INDEX("'Top20 répartition h MO'"!C1:C65536 Code :
INDEX(Worksheets("Top20 répartition h MO").Range(C1:C65536) Si tu veux que je te détaille la formule Excel, n'hésite pas à le dire.
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
merci pour ces explications, je pense avoir compris le fonctionnement de la commande, mais pour autant, j'ai toujours une erreur d'incompatibilité de type..
voici la formule adapté, ( la feuille a top 20... a été remplacé par la variable1, qui contient le placement de la feuille dans le classeur , ex: la feuille placé en 8eme renvoi le numero 8 dans la variable1. Code :
coutpompe=Evaluate("INDEX(variable1!J2:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille"",variable1!B2:B65536)))*NOT(ISERR(SEARCH(""pompe"",variable1!D2:D65536)))>0,ROW(variable1!B2:B65536))))") |
|
|
00
|
|
|
#6 | |||
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Tu ne peux pas mettre de variable entre guillemets, sinon le nom de la variable est pris pour le nom de la feuille; il faut mettre :
Code :
__________________
Cordialement. Daniel Citation:
|
|||
|
00
|
|
|
#7 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
effectivement, je pensais qu'enlever les guillemets suffirait, mais il faut mettre les " & & "....
Code :
coutpompe = Evaluate("INDEX(" & variable1 & "!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille""," & variable1 & "!B2:B65536)))*NOT(ISERR(SEARCH(""pompe""," & variable1 & "!D2:D65536)))>0,ROW(" & variable1 & "!B2:B65536))))") je ne comprend pas , c'est une formule executer en vba, il ne faut pas mettre Application.WorksheetFunction devant ? j'ai testé et cela me renvoi une erreur : propriété ou methode non géré par cet objet .... merci de m'aider, je rame la ... en fait, pourriez vous me detaillé les actions de cette commande, histoire de bien comprendre, et pas d'appliquer betement merci beaucoup bonjour, je n'arrive tjr pas à résoudre mon pb d'incompatibilité, auriez vous une solution merci Cordialement |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Bonjour,
Regarde le classeur en pièce jointe.
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
merci de votre aide, votre macro marche parfaitement sur votre fichier mais pas sur le mien ... elle ne me donne pas d'erreur ni ne me plante la macro, mais elle m'affiche #REF!, pas moyen de la faire marcher.... la seule chose qui differe de votre tableau, c'est que moi les case contiennent parfois:
ex: dff586 HABILLE djgid la meme chose avec pompe mais bon ... je vois pas ce que sa change... a quoi correspond le row à la fin ? quel est cet argument? Code :
coutpompe = Evaluate("INDEX(" & variable1 & "!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""HABILLE""," & variable1 & "!B2:B65536)))*NOT(ISERR(SEARCH(""POMPE""," & variable1 & "!D2:D65536)))>0,ROW(" & variable1 & "!B2:B65536))))") |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Peux-tu mettre un petit classeur de test en pièce jointe ?
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
je crois avoir compris,
en réalité ma variable1, ne renvoi pas une valeur comme vous du style feuill1, elle renvoie uniquement 1, 2 ,3 ,4 , du coup il ne trouve pas la bonne page, et ne trouve pas les données.. Code :
'coutpompe = Evaluate("INDEX(" & variable1 & "!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""HABILLE""," & variable1 & "!B2:B65536)))*NOT(ISERR(SEARCH(""POMPE""," & variable1 & "!D2:D65536)))>0,ROW(" & variable1 & "!B2:B65536))))")
Code :
coutpompe = Evaluate("INDEX( " & Worksheets(variable1).Range("J1:J65536").Address & ",MAX(IF(NOT(ISERR(SEARCH(""HABILLE""," & Worksheets(variable1).Range("B2:B65536").Address & "))*NOT(ISERR(SEARCH(""POMPE""," & Worksheets(variable1).Range("D2:D65536").Address & "))>0,ROW(" & Worksheets(variable1).Range("B2:B65536").Address & ")))") |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Bien sûr, ça dépend en effet du contenu de la variable.
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#13 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
à la suite de la range , on ne met pas .address si ? c'est pour une cellule , pas une range, j'ai une erreur incompatibilité de type actuellement...
Merci encore |
|
|
00
|
|
|
#14 | |
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Je n'ai pas vérifié ta ligne, j'ai pensé que cela fonctionnait... Si variable représente le numéro de la feuille, il faut mettre :
et reprendre ma ligne. Si variable1 représente le numéro d'index de la feuille, c'est à dire : désignation de la premmière feuille : Il faut modifier le code. Dis-moi ce que représente "variable1".
__________________
Cordialement. Daniel Citation:
|
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
Effectivement, variable 1 represente l'index de la feuille,
car j'ai 3 feuilles fixes en début, et 1 feuille fixe en fin, et je veux traiter les feuilles qui sont entre, cad de la feuille 4 à la feuille x, et ces index sont contenus dans la variable : variable 1 qui renvoi en mini 4 et en maxi x qui varie. donc oui c'est bien l'index de feuille et non pas son numero : feuilx, merci |
|
|
00
|
|
|
#16 | |||
|
Expert Confirmé Sénior
![]() Daniel aucune Inscription : septembre 2011 Messages : 2 004 ![]() |
Donc :
Code :
__________________
Cordialement. Daniel Citation:
|
|||
|
00
|
|
|
#17 |
|
Invité régulier
![]() Inscription : novembre 2011 Messages : 85 ![]() |
Un grand merci, j'ai encore du mal a savoir ecrire correctement du vba, sa fonctionne a merveille merci encore
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com