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 :

SUMIF plusieurs critères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut SUMIF plusieurs critères
    Bonjour,

    je sais que le sujet à été traité de nombreuses fois, mais aucun des résultats proposés ne m'a réellement satisfait, aussi, je poste encore une demande similaire.

    je suis à la recherche d'une méthode qui permette de faire un SUMIF avec des critéres sur 2 colones dans une fonction en VBA

    une méthode pour faire ça dans une feuille de calcul est via la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((A1:A10="test")*(B1:B10=50)*(C1:C10))
    mais la version vba ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set X = range("A1:A10")
    set Y = range("B1:B10")
    set Z = range("C1:C10")
    a=worksheetfunction.sommeprod(X="test",Y=50,Z
    j'ai essayé en utilisant une requete SQL sur la feuille, mais Excel ne semble pas vouloir que j'ouvre une connection sur le classeur ou se trouve la macro.

    pouvez vous m'aider

    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonjour.


    C'est SumProduct et non SumIf qui est le pendant anglais de SommeProd.
    Tu peux utiliser EVALUATE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    a = Evaluate("sumproduct((A1:A10=""test"")*(B1:B10=50)*(C1:C10))")
    Attention. Comme tu le constates, Evaluate requiert les fonctions en anglais.

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut
    je connaissait "sumproduct", mais j'ai traduit pour les lecteurs de ce forum, pour la majorité francophone

    je ne connaissait pas evaluate, mais je ne vois pas comment l'utiliser si je ne connais pas la taille de mes tableaux(ce qui est le cas)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    set X = range(range("A2"), range("A1").end(xldown))
    set Y = range(range("B2"), range("B1").end(xldown))
    set Z = range(range("C2"), range("C1").end(xldown))
    a=worksheetfunction.sommeprod(X="test",Y=50,Z)
    j'imagine que je peux mettre 65532, mais pas très propre comme méthode!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Evaluate("sumproduct((A1:A65532=""test"")*(B1:B65532=50)*(C1:C65532))")
    après test, c'est une méthode qui marche très bien

    si quelqu'un a une autre méthode, je suis preneur aussi

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    L'avantage de Evaluate, c'est que tu peux créer la chaine de caractères.

    Par exemple, en basant ta plage sur la dernière ligne occupée de A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Dim a As Variant
        Dim DerniereLigne As Long
        Chaine As String
     
        DerniereLigne = Range("a" & Rows.Count).End(xlUp).Row
        Chaine = "sumproduct((A1:A" & DerniereLigne & "=""test"")*(B1:B" & dernierligne & "=50)*(C1:C" & DerniereLigne & "))"
        a = Evaluate(Chaine)
    [EDIT]
    Attention: dans le code que tu donnais avec XLDOWN! Il faut que les plages soient de tailles identiques. Donc, tu dois choisir la colonne dans laquelle XLDOWN ou XLUP (comme dans mon exemple) renvoie bien la dernière ligne. Si tu détermines la dernière ligne colonne par colonne, tu risques une erreur car les plages n'auront peut-être pas des dimensions identiques. De plus, dans mon exemple, je pars de A1 et toi tu pars de A2. Mon code est donc à adapter, bien entendu... [/EDIT]
    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut
    Ah, oui, ça marche très bien

    merci beaucoup

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

Discussions similaires

  1. Recherche de plusieurs critères dans un recordset
    Par Mariboo dans le forum Access
    Réponses: 13
    Dernier message: 21/05/2017, 12h50
  2. [VBA-E]filtre sur plusieurs Critères avec Excel
    Par Diablo_22 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2006, 20h34
  3. Réponses: 4
    Dernier message: 26/04/2006, 14h02
  4. Réponses: 12
    Dernier message: 30/03/2006, 20h55
  5. [XSLT] - Trier un fichier sur plusieurs critères
    Par ytse dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 16h26

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