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 :

Somme d'un produit sous condition


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 71
    Points : 27
    Points
    27
    Par défaut Somme d'un produit sous condition
    Bonjour tout le monde,

    Je ne suis pas très doué avec VBA et j'aimerais avoir un coup de pouce sur un problème. Ce que je cherche à faire c'est entrer dans la cellule F1 la somme des produits (Bi*Ci*Di) pour tout Ai="un mot".

    Nom : VBA-1.png
Affichages : 685
Taille : 3,6 Ko

    Une indication serait la bien venue...

    Merci d'avance!

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    A condition que la première ligne et la première colonne du tableau soient remplies. La première ligne contient les étiquettes de colonnes
    Exemple pour un tableau commençant en cellule A1 de la feuille nommée Feuil1 pour l'exemple (A1:G10)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
     Dim rng As Range ' Déclare la variable objet
     With ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion ' Equivalent de Ctrl + *
      Set rng = .Offset(1).Resize(.Rows.Count - 1) ' Définit la table des données soit A2:G10
     End With
     rng.Columns(6).Formula = "=B2 * C2 * D2" ' Entre la formule en colonne F (6ème colonne du tableau)
     Set rng = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 71
    Points : 27
    Points
    27
    Par défaut
    Bonjour Philippe Tulliez,

    Merci pour votre réponse! Juste une petite précision, c'est bien la fonction "sum.if" que je dois utiliser pour appliquer la condition "Ai="Un mot"" ou alors la fonction "For all"?

    Merci encore!

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    est-ce que le produit est matriciel (= ton indice i utilisé lors de l'explication n'est pas la ligne courante où écrire la formule mais toute ligne qui répondra à la condition) ou un produit linéaire (en ligne i, je regarde si en colonne A j'ai "MonMot" pour faire le produit de B1-C1-D1)

    je te met sur la piste via la formule Excel suivante pour une méthode linéaire, appliquée à F1, étirable si souhaité, utilisable en VBA pour écrire les formules (Range.Formula) dans les cellules OU calculer les résultats en interne (Application.WorkSheetFunctions) et les restituer OU les évaluer au lieu de les calculer en interne (Application.Evaluate())


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(A1="MonMot";B1*C1*D1;"")
    si ton problème est matriciel, confirme-le

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 71
    Points : 27
    Points
    27
    Par défaut
    Merci pour ta réponse Joe.levrai, effectivement comme tu l'as décrit le produit est matriciel! C'est-à-dire que dans la cellule F1 je cherche à obtenir la somme de tous les (Bi*Ci*Di) si Ai correspond à un mot déterminé, avec le résultat total dans F1! C'est pour ça je pensais à essayer de faire une boucle mais je sais pas trop par où commencer !

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 71
    Points : 27
    Points
    27
    Par défaut
    Rebonjour,

    Merci encore pour votre aide! J'ai trouvé une formule excel pour le faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUMPRODUCT(--(A1:A5="a word"),(B1:B5*C1:C5*D1:D5))
    C'est la même formule que celle de Joe.levrai mais pour toute la colonne!

    Merci encore et à plus

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    En restant sur une formule Excel (avant de parler vba), voici une autre proposition.
    J'ai utilisé un tableau structuré (menu insertion >> Tableau) pour gagner en lisibilité

    Tutoriel : http://silkyroad.developpez.com/excel/tableau/

    Nom : dvp_98.png
Affichages : 642
Taille : 15,2 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME(SI(MonTableau[MonMot]=G2;MonTableau[Valeur1]*MonTableau[Valeur2]*MonTableau[Valeur3]))
    la formule étant matricielle, il faut impérativement la valider en pressant Ctrl+Maj+Entrée

    Un tableau structuré est matérialisé par l'objet vba ListObject, on peut manipuler le tableau aisément et très finement, comme dans cette formule


    EDIT : ah on s'est croisé !
    En fait tu n'as pas réellement utilisé la même formule que moi, contrairement à la formule matricielle que je propose ci-dessus et qui est l'application matricielle de ma proposition linéaire.
    Tu utilises SOMMEPROD(), qui en soit donnera le même résultat, mais avec un principe de calcul différent.
    Sur de grandes quantités de données et/ou formules, je crois que ta solution sera la plus efficace

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 71
    Points : 27
    Points
    27
    Par défaut
    Merci encore pour ta réponse!
    Ca me permet de comprendre certaines choses. D'ailleurs j'essaye de généraliser la formule pour des colonnes de longueur inconnue, et ça fonctionne avec ta méthode. Ce n'est pas vraiment très important mais as-tu une idée de la façon de faire avec ma formule? Est-ce toujours possible sans VBA?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/03/2017, 15h53
  2. Listview binding Somme de plusieurs Textbox sous condition dans autre Textbox
    Par Ganeshiva dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 14/03/2017, 15h28
  3. somme d'une table sous condition dans un formulaire
    Par jerome25530 dans le forum Access
    Réponses: 7
    Dernier message: 23/12/2016, 13h57
  4. [Excel] Calcul d'une somme sous condition
    Par netsabes dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/08/2006, 16h09
  5. Somme de champs sous condition
    Par Nicola dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 01/08/2006, 14h47

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