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 :

Transformer fonction index+match en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut Transformer fonction index+match en vba
    Bonjour à tous:

    est-ce qu'il est possible de transformer une fonction du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     {=INDEX('COST TeamMember'!A:H;MATCH(1;('COST TeamMember'!A:A=B3)*('COST TeamMember'!D:D=A3);0);8)}
    en fonction vba.
    J'ai essayé ceci mais sans succès:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
         Function CalcCostPerDay(strMember As String, strProject As String, intWorklog As Integer)
     
         strCostSheet = Range("COST TeamMember'!A:H")
         strProjectColumn = Range("COST TeamMember'!A:A")
         strMemberColumn = Range("COST TeamMember'!D:D")
     
         CalcCostPerDay = Application.Index(strCostSheet, Application.Match(1, (strProjectColumn = strProject) * (strMemberColumn = strProject), 0), 8)
     
         End Function
    Une idée svp

  2. #2
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Bonjour,

    Vu que tu pars d'une formule matricielle, regardes du côté de la fonction Evaluate.

    Un truc dans ce genre (surement à adapter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalcCostPerDay = Evaluate("INDEX('COST TeamMember'!A:H;MATCH(1;('COST TeamMember'!A:A=B3)*('COST TeamMember'!D:D=A3);0);8)")

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut
    merci Zirak pour ta réponse

    mais si je fais ainsi, je ne peux pas jouer sur les arguments.
    j'ai d'ailleurs fais une erreur dans mon exemple, le code serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function CalcCostPerDay(strMember As String, strProject As String, intWorklog As Integer)
     
         strCostSheet = Range("COST TeamMember'!A:H")
         strProjectColumn = Range("COST TeamMember'!A:A")
         strMemberColumn = Range("COST TeamMember'!D:D")
     
         CalcCostPerDay = Application.Index(strCostSheet, Application.Match(1, (strProjectColumn = strProject) * (strMemberColumn = strMember), 0), 8)
     
         End Function
    le but est de pouvoir avoir en paramètre de la fonction les arguments strMember et strProject.

  4. #4
    Inactif  
    Homme Profil pro
    Analyste-Programmeur / Intégrateur ERP
    Inscrit en
    Mai 2013
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste-Programmeur / Intégrateur ERP
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 511
    Points : 10 335
    Points
    10 335
    Par défaut
    Bonjour,

    C'est bien pour cela que je disais "à adapter"

    Je ne t'ai indiqué que la façon de transformer ta formule matricielle en VBA via la fonction Evaluate (ta question initiale).


    Pour intégrer tes paramètres, il faut les concaténer dans la formule, à la place de la valeur initiale (exemple, toujours à tester et à adapter) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CalcCostPerDay = Evaluate("INDEX(" & strCostSheet & ";MATCH(1;(" & strprojectColumn & "=" & strProject & ")*(" & strMemberColumn & "=" & strMember & ");0);8)")

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut


    je pensais qu'il n'était pas possible de modifier le contenu de Evaluate
    je teste cela de suite

    merqui

Discussions similaires

  1. [XL-2007] Fonction INDEX + EQUIV sous VBA
    Par ti_mouton dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 15/07/2015, 09h18
  2. [XL-2010] Fonction index & Match dans un code VBA
    Par rinada dans le forum Excel
    Réponses: 3
    Dernier message: 05/03/2013, 12h14
  3. index+ match en vba
    Par lps02 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2012, 10h20
  4. [XL-2010] Parcourir un tableau et transcrire la fonction INDEX() en VBA
    Par statista dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2011, 16h44
  5. [XL-2003] Adapter fonction index en VBA
    Par Tintou dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/10/2009, 21h01

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