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 :

Fonction Match avec 2 critères sur 2 plages


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Points : 26
    Points
    26
    Par défaut Fonction Match avec 2 critères sur 2 plages
    Bonjour,

    Malgré des heures de recherches et de tests, je ne trouve pas la solution à mon problème.

    Sur Excel, j'ai une formule matricielle que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS(DECALER(INDIRECT("'"&$A$5&"'!$1:$1");EQUIV(E$4&$B$4;INDIRECT("'"&$A$5&"'!$C:$C")&INDIRECT("'"&$A$5&"'!$D:$D");0)-1;0);INDIRECT("'"&$A$5&"'!$7:$7");$C5)
    Je m’intéresse simplement à cette partie de la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EQUIV(E$4&$B$4;INDIRECT("'"&$A$5&"'!$C:$C")&INDIRECT("'"&$A$5&"'!$D:$D");0)
    Plus simplement, elle est construite de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EQUIV(Critère1&Critère2;Plage1&Plage2;0)
    Pour plusieurs raisons, je dois passer cette formule sous VBA, j'ai donc essayé plusieurs variations de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.Match(Critere1 & Critere2, Plage1 & Plage2, 0)
    Sauf que rien ne fonctionne... Lorsque je teste la fonction match avec un critère et une plage cela fonctionne mais avec pas les deux en même temps.

    Je précise que j'ai un tableau où la plage 1 correspond à la colonne A et la plage 2 à la colonne B. Je souhaite récupérer le chiffre présent dans la colonne C lorsque les 2 premières conditions sont respectées. Par exemple :

    A B C
    1 A 12
    1 B 13
    2 A 14
    2 B 15

    Ici, Critère 1 = 2 ; Critère 2 = B ; je dois donc trouver le chiffre 15.

    Je vous remercie d'avance pour votre aide !

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re fait une recherche avec evaluate
    on peut avec chercher un match dans une colonne avec un critere dans une autre colonne
    en gros
    ca correspondrait a ca cells(1,1)="toto" et cells(1,2)="titi"

    maintenant si le find du match2 ne dois pas être sur la même ligne alors non c'est pas possible avec match

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    en alternance
    Inscrit en
    Mai 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : en alternance

    Informations forums :
    Inscription : Mai 2018
    Messages : 39
    Points : 26
    Points
    26
    Par défaut Evaluate Index Match
    Bonjour patricktoulon et merci pour ton aide !

    J'ai fais des recherches sur Evaluate et j'ai trouvée ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("F13") = Evaluate("INDEX(prix,MATCH(1,(annee=A13)*(taille=B13)*(modele=C13),0))")
    Source : http://boisgontierjacques.free.fr/pa...e/evaluate.htm

    Ce code marche super bien sur le fichier que j'ai téléchargé à partir du site (lien du fichier : http://boisgontierjacques.free.fr/fi...valuate13.xlsm), j'ai donc adapté le code à mon fichier... Sauf que cela ne marche pas du tout ! Cela me renvoi au choix #VALEUR!, #REF! ou #NOM?

    J'ai l'impression que c'est parce que j'ai défini mes plages dans le code, alors que sur le fichier que j'ai téléchargé les plages étaient définies dans le gestionnaire de noms. Est-ce que ça peut vraiment être ça ?

    Voici mon code (je l'ai super détaillé pour éviter les erreurs mais rien n'y fait) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    f1 = ThisWorkbook.Worksheets(2).Range("A" & 9).Value
     
    PlageSomme = ThisWorkbook.Worksheets(f1).Range("E9:E86")
    PlageFiliale = ThisWorkbook.Worksheets(f1).Range("C9:C86")
    PlageCAMarge = ThisWorkbook.Worksheets(f1).Range("D9:D86")
    Filiale = ThisWorkbook.Worksheets(2).Cells(5, 5).Value
    CAMarhe = ThisWorkbook.Worksheets(2).Cells(5, 2).Value
     
    ThisWorkbook.Worksheets(2).Cells(9, 5) = Evaluate("INDEX(PlageSomme,MATCH(1,(PlageFiliale=Filiale)*(PlageCAMarge=CaMarge),0))")
    Je suis sur ce problème depuis ce matin et je n'arrive pas à débloquer la situation...

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bonjour Marianne
    j'ai repris la macro2 de boisgonitierjacques sans les nom et je t'ai fait un modèle que tu pourra maitriser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Macro2()
       critere1 = 2018
       critere2 = """petite"""
       critere3 = """standard plus"""
       Range("F13") = Evaluate("INDEX(D2:D9,MATCH(1,(A2:A9=" & critere1 & ")*(B2:B9=" & critere2 & ")*(C2:C9=" & critere3 & "),0))")
    'pour la compréhention au sujet des triples guillemets 
    debug.print "INDEX(D2:D9,MATCH(1,(A2:A9=" & critere1 & ")*(B2:B9=" & critere2 & ")*(C2:C9=" & critere3 & "),0))"
    End Sub
    j'attire ton attention sur les critères ( les triples guillemets)

    en effet comme c'est une évaluation et que la formule est elle même entre guillemet , les arguments de type string doivent être entre guillemets
    il faut donc les tripler si utilisation d'argument ou doubler si les critères sont codé en dur dans la formule

    pour te faire comprendre regarde dans le debug la formule elle n'aura plus qu'un guillemet

    Attention aussi a bien mettre les address de plage en majuscule B2:B9 et non b2:b9

    voila il ne te reste plus qu'a adapter a ton contexte je pense que ca te sera plus facile

    après si tu veux on pourra faire une fonction générique pour la réutiliser avec des arguments différents mais d'abords adapte la a ton contexte

    Testé sur Excel 2007 et 2013!!

Discussions similaires

  1. Somme somme.si.ens. avec plusieurs critéres sur une seule plage
    Par IHO17 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/11/2017, 11h47
  2. [XL-2002] fonction NBVAL avec plusieurs critères
    Par polynesian turtle dans le forum Excel
    Réponses: 2
    Dernier message: 14/04/2009, 14h05
  3. Fonction Si avec 3 critères
    Par linel dans le forum Excel
    Réponses: 10
    Dernier message: 04/03/2009, 01h17
  4. Requette avec plusieurs critères sur plusieurs tables
    Par kha_yassine dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/04/2008, 22h15
  5. Réponses: 1
    Dernier message: 08/03/2007, 10h55

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