Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 xlookup 2 criteres dont dans fourchette de valeurs

eric72

XLDnaute Accro
Bonjour à tous,
Et oui encore un nouveau problème, je souhaite avec ce code
VB:
essai = 11 * _
Application.WorksheetFunction.XLookup("NANTES" & CDbl("11"), Range("Externalisee[SITE]") & Range("Externalisee[Externalisee Nb Salariés (Siège)]"), _
Range("Externalisee[Externalisee Prix global (cabinet)]"), "", -1)
de faire un xlookup avec deux critères SITE et Nombre de salariés dans une tranche, j'ai donc essayé avec une formule en "d15", cela fonctionne en partie (sauf quend je met 10 ou 20, allez savoir pourquoi) fin de pouvoir reproduire en VBA mais je ne m'en sors pas alors que...
S'il vous vient une idée géniale pour m'aider!!!
Merci beaucoup
 

Pièces jointes

  • TEST.xlsm
    33.9 KB · Affichages: 9
Solution
Re bonjour à tous,
Après réflexion, j'ai changé ma méthode, l'autre paraissait un peu trop complexe, je vais donc clore ce sujet.
J'en profite pour remercier tous ceux qui se sont intéressés à mon problème, CP4, JHA, TooFatBoy qui sont toujours prêts à aider, sans eux on ne ferait pas grand chose!!!
Belle soirée à tous
Eric

eric72

XLDnaute Accro
Bonjour à tous,
Compte tenu du nombre de consultation, j'ai du encore m'exprimer comme un peintre
Je reformule, j'aimerais en fonction d'un nom de SITE et un Nombre de salariés trouver le cout total du cabinet
Exemple si je recherche NANTES pour 9 personnes, résultat 13 (entre 6 et 11), mais en VBA.
L'essai avec recherchex est uniquement un essai pour pouvoir la reproduire en VBA mais la formule ne fonctionne pas si on met 10 ou personnes, je suis perdu.
Merci à tous et belle journée.
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Je te propose cette formule
VB:
=INDEX(Externalisee[Externalisee Prix global (cabinet)];EQUIV(B15;SI(Externalisee[SITE]=$A$15;Externalisee[Externalisee Nb Salariés (Cabinet)]);1))

JHA
 

Pièces jointes

  • TEST (5).xlsm
    23.4 KB · Affichages: 6

eric72

XLDnaute Accro
Bonjour à tous,

Je te propose cette formule
VB:
=INDEX(Externalisee[Externalisee Prix global (cabinet)];EQUIV(B15;SI(Externalisee[SITE]=$A$15;Externalisee[Externalisee Nb Salariés (Cabinet)]);1))

JHA
Bonjour JHA,
C'est juste génial, par contre si je veux la traduire en vba dans ma macro, comment dois je l'écrire?
Merci beaucoup
 

eric72

XLDnaute Accro
Bonjour à tous,
Voilà la formule de JHA qui fonctionne
VB:
=INDEX(Externalisee[Externalisee Prix global (cabinet)];EQUIV(B15;SI(Externalisee[SITE]=$A$15;Externalisee[Externalisee Nb Salariés (Cabinet)]);1))
mais je ne parviens pas à l'adapter en VBA!!!
 

eric72

XLDnaute Accro
j'ai essayé de cette manière
VB:
 Application.Index(Range("Externalisee[Externalisee Prix global (cabinet)]"), Application.Match(Sheets("Feuil1").Range("b15").Value, if(Range("Externalisee[SITE]")=sheets("feuil1").range("a15").value,Range("Externalisee[Externalisee Nb Salariés (Cabinet)]"), 1))
mais j'ai une erreur de compilation attendu Expression sur le "IF"
 

eric72

XLDnaute Accro
Bonjour à tous,

Regarde du côté formula.local en VBA

JHA
j'ai fait et cela me donne ça
VB:
ActiveCell.Formula2R1C1 = _
        "=INDEX(Externalisee[Externalisee Prix global (cabinet)],MATCH(R[-2]C[-2],IF(Externalisee[SITE]=R15C1,Externalisee[Externalisee Nb Salariés (Cabinet)]),1))"
c'est avec ça que j'ai essayé d'adapter comme ça
Code:
 Application.Index(Range("Externalisee[Externalisee Prix global (cabinet)]"), Application.Match(Sheets("Feuil1").Range("b15").Value, if(Range("Externalisee[SITE]")=sheets("feuil1").range("a15").value,Range("Externalisee[Externalisee Nb Salariés (Cabinet)]"), 1))
mais cela ne fonctionne pas, il n'aime pas le "if"
 

cp4

XLDnaute Barbatruc
Pas de souci je vais attendre , merci beaucoup et belle journée à toi
Bonjour @eric72 ,@JHA , le forum

@eric72 : Démarre l'enregistreur de macro, sélectionne la cellule qui contient la formule,
dans la fenêtre de formule, tu sélectionnes la formule, tu fais un Ctrl+C, touche Entrée et tu arretes l'enregistreur. Dans la macro, tu trouveras la formule avec la syntaxe anglaise. Tu fais un peu le ménage des lignes inutiles.
 
Dernière édition:

cp4

XLDnaute Barbatruc
VB:
Code:
ActiveCell.Formula2R1C1 = _
        "=INDEX(Externalisee[Externalisee Prix global (cabinet)],MATCH(R[-2]C[-2],IF(Externalisee[SITE]=R15C1,Externalisee[Externalisee Nb Salariés (Cabinet)]),1))"
Au lieu de
ActiveCell.Formula2R1C1=
C'est une formule matricielle
VB:
ActiveCell.FormulaArray =
Il y a peut-être un autre moyen en VBA. Je n'ai pas compris ce que tu veux obtenir.
 

eric72

XLDnaute Accro
Au lieu de

C'est une formule matricielle
VB:
ActiveCell.FormulaArray =
Il y a peut-être un autre moyen en VBA. Je n'ai pas compris ce que tu veux obtenir.
Bonjour CP4,
Merci pour ta réponse, j'aimerais l'équivalent de
VB:
=INDEX(Externalisee[Externalisee Prix global (cabinet)];EQUIV(B15;SI(Externalisee[SITE]=$A$15;Externalisee[Externalisee Nb Salariés (Cabinet)]);1))
en VBA et quand j'essaie ce code
Code:
 Application.Index(Range("Externalisee[Externalisee Prix global (cabinet)]"), Application.Match(Sheets("Feuil1").Range("b15").Value, if(Range("Externalisee[SITE]")=sheets("feuil1").range("a15").value,Range("Externalisee[Externalisee Nb Salariés (Cabinet)]"), 1))
il me renvoie une erreur, j'aimerais juste pouvoir le corriger mais je n'y parviens pas!!!
Merci
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…