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 :

SommeProd en VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 19
    Par défaut SommeProd en VBA
    Bonjour,

    Je suis dans un projet de traitement de données excel pendant mon stage.
    Je dois utiliser le fonction excel SUMPRODUCT avec condition mais je veux l'utiliser dans une macro.

    Imaginons:

    Dans les cellules A1 à A5 il y a des 0
    Dans les cellules A5 à A10 il y a des 1
    Dans les cellules B1 à B10 il y a des valeurs quelconques

    Je veux sommer les valeurs de la colonne B pour lesquelles il y a un 1 dans la case correspondante de la colonne A.

    Pour cela on utilise: =SUMPRODUCT((A1:A10=1)*(B1:B10))

    Mais je voudrais l'écrire dans une Macro.

    Par exemple, j'aimerais grâce à mon code VBA, retourner la valeur de cette sommeprod dans ma cellule C1, pour cela j'ai la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C1") = Evaluate("SumProduct((A1:A10=1) * (B1:B10))")
    Ce code marche, mais moi j'aimerais l'adapter à des cellules variables pour insérer la ligne de code dans une boucle comme suit:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For i = 1 to 5000
     For j = 1 to 5000
     
    Range("C1") = Evaluate("SumProduct(("A" & i :"A" & j =1) * ("B" & i : "B" & j))")
     
     Next j
    Next i

    Seulement ca ne marche pas car je ne connais pas la bonne syntaxe pour les "A" & i ....


    Quelqu'un aurait-il déjà rencontré ce problème ?

    Je remercie d'avance tous ceux qui me liront =)

    Guillaume

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    pour la formule, essaies ça (pas testé)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evaluate("SumProduct(("A" & i" & ":" & "A" & j & "=" & 1) * ("B" & i & ":" & "B" & j))")
    mais je ne comprends pas la finalité car ta boucle va tourner et C1 va se retrouver directement avec la formule pour A5000 et B5000, de plus pourquoi 2 boucles ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi un SOMMEPROD quand un SOMME.SI suffit ?

    une application de ton exemple A1:A10 et B1:B10 de la feuille active


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Formule()
    MsgBox Application.WorksheetFunction.SumIf(Range(Cells(1, 1), Cells(10, 1)), 1, Range(Cells(1, 2), Cells(10, 2)))
    End Sub
    simplifiable à l'envie en utilisant un objet Range et/ou un resize

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Formule()
    Dim Plage As Range
    Set Plage = Cells(1, 1).Resize(10, 1)
    MsgBox Application.WorksheetFunction.SumIf(Plage, 1, Plage.Offset(0, 1))
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 19
    Par défaut SommeProd en VBA
    Bonjour casefayere et joe.levrai,

    Tout d'abord merci pour vos réponses.

    Pour Joe.levrai:

    C'est vrai que c'est carrément plus simple avec un SOMMEIF() ! Mais est ce qu'il marche encore si on veut mettre plusieurs conditions de calcul comme on pourrait le faire dans un SOMMEPROD() ?
    En tout cas merci ça m'a carrément débloqué sur le coup =)

    Pour casefayere:

    Les boucles c'était juste à titre indicatif, il ne faut pas en tenir compte. En fait dans la finalité de mon analyse Excel je dois calculer plusieurs SOMMEPROD() sur plusieurs blocs du type "A" & i : "A" & j et "B" & i : "B" & j sur une feuille de données de plus de 5000 lignes, d'où mon besoin cruel d'utiliser ce SOMMEPROD() en vba =)


    Dans tous les cas ton code m'a bien aidé aussi merci, il contenait juste une ou deux erreurs de syntaxe que j'ai corrigé et le code qui fonctionne est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evaluate("=SUMPRODUCT((" & "A" & i & ":" & "A" & j & "=1" & ")" & "*" & "(" & "B" & i & ":" & "B" & j & "))")

    Merci à vous deux et bonne soirée !


    Guillaume

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Si tu as plusieurs conditions, tu bascules sur SOMME.SI.ENS dans ce cas la (SumIfs en VBA)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 19
    Par défaut
    Ok c'est plus simple dans ce cas ! merci

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

Discussions similaires

  1. sommeProd en VBA
    Par alidroos dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/12/2011, 15h52
  2. recopie formule SOMMEPROD en VBA
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/11/2011, 12h16
  3. [XL-2003] Sommeprod en VBA
    Par FreeNaute93 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/12/2010, 21h46
  4. [XL-2007] Problème conversion SOMMEPROD en VBA
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/03/2010, 14h31
  5. Conversion SOMMEPROD en VBA
    Par choudoudou15 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2009, 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