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 :

WorksheetFunction. SumProduct vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut WorksheetFunction. SumProduct vba
    Bonjour tt le monde
    je souhaiterai transcrire en vba une formule sommeprod
    en excel la formule donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SOMMEPROD(($B$2:$B$1000=$B$509)*($E$2:$E$1000=$E$509)*($G$2:$G$1000))
    et fonctionne
    en vba, j'ecris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    G = WorksheetFunction.SumProduct((B1:b1000=var1)*(e1:e1000=var2)*(g1:g1000))
    et j'obtiens un message d'erreur
    : attendu parenthese sur les deux points du ((B1:b1000=var1)
    je ne comprend pas mon erreur. si quelqu'un passe par là, merci d'avance
    ps:
    je viens d'essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    G = WorksheetFunction.Evaluate("SumProduct((B2:b1000=var1)*(e2:e1000=var2)*(g2:g1000))")
    comme a écrit pierre fauconnier mais ça marche pas non plus
    ps bis
    en mettant des guillemets, il reconnais la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    G = WorksheetFunction.SumProduct("=((B2:b1000=var1)*(e2:e1000=var2)*(g2:g1000))")
    mais j'ai erreur d'execution 1004, impossible de lire la propriété sumproduct de la classe worksheetfunction

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    bonjour,
    l'idée de base c'est de sortir var1 et var2 des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    G = WorksheetFunction.SumProduct("(B2:b1000=" var1 ")*(e2:e1000="var2")*(g2:g1000)")
    après je ne sais pas... Evaluate ou pas ???
    A+

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    non. je te remercie, mais ce n'est pas la solution
    effectivement, si je n'arrive pas a calculer directement, il faudra que j'insere cette formule dans une cellule, et pour le coup, j'aurais besoin de sortir var1 et var2 , et je n'y arrive pas non plus. je suis preneur des deux solutions soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       Range("H522").Formula = "=SUMPRODUCT((B2:b1000=var1)*(e2:e1000=var2)*(g2:g1000))"
    en prenant en compte les variables, pour le moment ça marque var1 dans la formule et en concatenat avec des guillemets, il n'accepte pas
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    G = WorksheetFunction.SumProduct("=((B2:b1000=var1)*(e2:e1000=var2)*(g2:g1000))")
    mais qui fonctionne
    merci encore

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je n'ai pas compris à cette forme "=var1" et "= var2", (que je ne connais pas ) mais la syntaxe toute simpble en VBA serait plutôt celle-ci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        G = Application.WorksheetFunction.SumProduct([B2:b1000], [e2:e1000],[g2:g1000])

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    D'abord mea culpa : pour sortir les variables il faut
    " & var1 & "...blabla "
    sur la syntaxe, si tu veux insérer ta formule dans une cellule, dans ce cas ça devrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("H522").Formula = "=SUMPRODUCT((B2:b1000=" & var1 & ")*(e2:e1000=" & var2 & ")*(g2:g1000))"
    (Vérifié)

    si tu veux du tout VBA et dans ce cas ça devrait donner ququchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    G = WorksheetFunction.SumProduct("(B2:b1000=" & var1 & ")*(e2:e1000=" & var2 & ")*(g2:g1000)")
    et là j'ai encore une erreur 1004. Je vais encore gratter dessus pour voir si je trouve le pb dans ce dernier cas...
    A+

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Je n'ai pas compris à cette forme "=var1" et "= var2", (que je ne connais pas ) mais la syntaxe toute simpble en VBA serait plutôt celle-ci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        G = Application.WorksheetFunction.SumProduct([B2:b1000], [e2:e1000],[g2:g1000])
    Oui mais là il est sur une forme un peu particulière du SOMMEPROD : il peut bien "variabiliser" une des valeurs de la condition : je l'ai testé sur une formule identique. Mais ça ne marche que dans le cas ou tu écris une formule :
    Range("H522").Formula =... comme cité précédemment.
    Je n'ai pas encore trouver le joint en tout VBA.
    A+

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut

    Bon en fait je n'arrive même plus à faire fonctionner ma première formule même si elle s'affiche correctement dans la feuille de calcul !
    quand à faire marcher ce de worksheetfunction...

    Ok... je retourne à mes billes !
    A+

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Euh...
    Pourquoi ne pas contourner le problème :
    un truc comme ça ne conviendrait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
    Dim A As Range, B As Range, C As Range, var1, var2
    var1 = 2
    var2 = 3
    Set A = Range("B2:B1000")
    Set B = Range("E2:E1000")
    Set C = Range("G2:G1000")
    For i = 1 To A.Count
    k = k + (A(i) = var1) * (B(i) = var2) * C(i)
    Next
    MsgBox k
    End Sub
    A+

  9. #9
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    Pour intégrer une variable dans la syntaxe, j'en suis là -->

    Sinon pour reprendre la formule Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(($B$2:$B$1000=$B$509)*($E$2:$E$1000=$E$509)*($G$2:$G$1000))
    en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox [SumProduct(($B$2:$B$1000=$B$509)*($E$2:$E$1000=$E$509)*($G$2:$G$1000))]

  10. #10
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Re,

    A force de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.Evaluate("SUMPRODUCT((B2:B1000=""" & var1 & """)*(E2:E1000=""" & var2 & """)*(G2:G1000<>""""))")

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    Bravo a Fring et merci aussi a galopin et ouskel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    G = [SumProduct(($B$2:$B$1000=$B$509)*($E$2:$E$1000=$E$509)*($G$2:$G$1000))]
    et  
    MsgBox Application.Evaluate("SUMPRODUCT((B2:B1000=""" & var1 & """)*(E2:E1000=""" & var2 & """)*(G2:G1000<>""""))")
    fonctionnent
    la seuxieme donne le nombre d'occurence, mais en enlevant le =""" de la troisieme parenthese, on a le resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Application.Evaluate("SUMPRODUCT((B2:B1000=""" & var1 & """)*(E2:E1000=""" & var2 & """)*(G2:G1000))")
    merci a tous et bon dimanche

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    quand même , avant de mettre un résolu, j'aimerai bien comprendre l'utilité ou le sens de ces crochets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     G = [SumProduct(($B$2:$B$1000=$B$509)*($E$2:$E$1000=$E$509)*($G$2:$G$1000))]

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Les crochets remplacent les guillemets pour définir un range ou une feuille.
    C'est tout. Mais dans l'exemple que tu cites, tu ne pourrais pas utiliser de variables. Par contre, avec les guillements (exemple de fring) tu peux
    Bonne nuit

  14. #14
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    ok alors, merci et bon dimanche a tous

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

Discussions similaires

  1. VBA Fonction WorksheetFunction.CountIf
    Par JonathanF dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/10/2011, 14h33
  2. [XL-2007] VBA : utilisation application.worksheetfunction.vlookup
    Par houmok dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/10/2010, 17h37
  3. [XL-2003] VBA - Problème avec WorksheetFunction.Match
    Par oracle7556 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/07/2010, 16h02
  4. [VBA-E] WorksheetFunction
    Par Regis.C dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/06/2006, 01h24
  5. [VBA][EXCEL]PB avec la commande WorksheetFunction.VLookup
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/11/2005, 16h41

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