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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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))))")

+ 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