IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

trouver une cellule qui respecte 2 vlookup


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut trouver une cellule qui respecte 2 vlookup
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.VLookup("*POMPE*", Worksheets(variable1).Range("D2: G65536"), 4, False) * 1000
    sauf que je voudrai pouvoir rajouter la contrainte d'une autre vlookup ou par un autre moyen, qu'elle me trouve la ligne qui dans parents contient "habille" et que dans la colonne designation contienne "pompe" et recupere la valeur dans la colonne C associé.


    Cela est-il possible via 1 vlookup ? ou 2, ou bien avec une autre fonction?

    Merci de votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Résultat = _
    Evaluate("INDEX(C1:C65536,MAX(IF(NOT(ISERR(SEARCH(""habille"",A2:A65536)))*NOT(ISERR(SEARCH(""pompe"",B2:B65536)))>0,ROW(A2:A65536))))")

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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))))")
    merci de votre aide

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    "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 : Sélectionner tout - Visualiser dans une fenêtre à part
    =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))))
    (formule matricielle, à valider avec Ctrl+Maj+Entrée).
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    INDEX("'Top20 répartition h MO'"!C1:C65536
    et non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INDEX(Worksheets("Top20 répartition h MO").Range(C1:C65536)
    Tu dois qualifier chaque plage de cellules comme tu le ferais dans une formule Excel (en n'oubliant pas les apostrophes qui encadrent les noms de feuille contenant des espaces).

    Si tu veux que je te détaille la formule Excel, n'hésite pas à le dire.

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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))))")

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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))))")

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    effectivement, je pensais qu'enlever les guillemets suffirait, mais il faut mettre les " & & "....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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))))")
    j'ai toujours une erreur d'incompatibilité de type :S
    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

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Regarde le classeur en pièce jointe.
    Fichiers attachés Fichiers attachés

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
     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))))")
    merci encore de votre aide

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Peux-tu mettre un petit classeur de test en pièce jointe ?

  11. #11
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    '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))))")
    sa serait plutot quelque chose comme sa non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        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 & ")))")

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bien sûr, ça dépend en effet du contenu de la variable.

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    à 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

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    variable1 = "Feuil" & variable1
    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".

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    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

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    coutpompe = Evaluate("INDEX(" & Sheets(variable1).Name & _
    "!J1:J65536,MAX(IF(NOT(ISERR(SEARCH(""habille""," & _
    Sheets(variable1).Name & "!B2:B65536)))*NOT(ISERR(SEARCH(""pompe""," & _
    Sheets(variable1).Name & "!D2:D65536)))>0,ROW(" & variable1 & "!B2:B65536))))")

  17. #17
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Novembre 2011
    Messages : 109
    Par défaut
    Un grand merci, j'ai encore du mal a savoir ecrire correctement du vba, sa fonctionne a merveille merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Excel VBA]fonction dans une cellule qui modifie une autre cellule
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/01/2007, 17h43
  2. Taille d'une cellule qui varie selon la taille d'un mot
    Par shadeoner dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 10/08/2006, 21h42
  3. [VBA-E]Methode pour trouver une valeur qui apparait plusieur fois
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2006, 13h11
  4. Trouver une valeur qui n'est pas dans un champ
    Par eric41 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2006, 16h48
  5. Réponses: 3
    Dernier message: 21/01/2004, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo