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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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+

  5. #5
    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])

  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))]

+ 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