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 :

Macro somme si critère sur une colonne [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Par défaut Macro somme si critère sur une colonne
    Bonjour,

    Je suis niveau débutant en VBA.

    J'aimerai faire une macro qui me permettrait de sommer les valeurs d'une colonne en fonction d'un critère :

    Si le critère est B alors la somme des valeurs des lignes en A s'affiche sur cette même ligne. Les valeurs du tableau ci-dessous sont rentrées manuellement.

    Critères	Valeurs 1	Valeurs 2
    B		7		8
    A		1		2
    A		2		2
    A		3		3
    A		1		1
    B		9		10
    A		3		3
    A		1		2
    A		2		2
    A		3		3
    B		5		6
    A		2		2
    A		3		4

    J'ai fouillé, je pense qu'un Do Loop et/ou somme.si pourrait faire l'affaire mais sans succès après mes essais.

    Merci par avance pour vos conseils,

    J.K.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Essaie comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Somme()
        Dim I As Long, nbLignes As Long
        Dim Total1 As Long, Total2 As Long
     
        nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
        For I = nbLignes To 1 Step -1
            If Range("A" & I) = "B" Then
                Range("B" & I) = Total1
                Range("C" & I) = Total2
                Total1 = 0
                Total2 = 0
            Else
                Total1 = Total1 + Range("B" & I)
                Total2 = Total2 + Range("C" & I)
            End If
        Next
    End Sub

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 102
    Par défaut somme sur critère
    Bonjour,

    Teste cà celà devrait le faire ... 2 bouclettes ! Adapte si besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Option Explicit
    Sub SommeAenB()
     
    'Je suppose tes données en Colonnes A,B et C, sans ligne vierge
     
    Dim Som1 As Long, Som2 As Long
    Dim LigB As Long
     
        Range("A1").Select 'Si ta liste commence là !
     
        Do While ActiveCell <> "" 'Tant qu'il reste une ligne à traiter
            Som1 = 0: Som2 = 0
            If ActiveCell = "B" Then
                LigB = ActiveCell.Row 'repérage d'une ligne B
                Do While ActiveCell.Offset(1, 0) = "A"
                    Som1 = Som1 + ActiveCell.Offset(1, 1) 'Cumul les valeurs A
                    Som2 = Som2 + ActiveCell.Offset(1, 2)
                    ActiveCell.Offset(1, 0).Select
                Loop
                Range("B" & LigB) = Som1 'Ecriture des totaux
                Range("C" & LigB) = Som2
                Range("A" & LigB & ":C" & LigB).Font.Bold = True
                ActiveCell.Offset(1, 0).Select
            End If
        Loop
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Avec une fonction perso que tu peux aussi utiliser dans la feuille directement. A mettre dans un module standard et exécuter la proc "Test". Les critères se trouvent en colonne A à partir de A1 et les valeurs à sommer en colonne B et C, le résultat en colonne D :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Sub Test()
     
        Dim DerLigne As Long
     
        With Worksheets("Feuil1")
     
            .Range("D1").Formula = "=MA_SOMME(A1,""B"",B1:C1)" 'entre la formule en D1
     
            DerLigne = .Cells(.Rows.Count, 1).End(xlUp).Row '<-- attention, sur la colonne A (chiffre 1), à adapter !!!
     
            .Range("D1").AutoFill Range("D1:D" & DerLigne) 'tire la formule vers le bas en colonne D
     
        End With
     
    End Sub
     
    Function MA_SOMME(CelRef As Range, Critere, PlageSomme As Range) As Double
     
        Dim Cel As Range
        Dim Total As Double
     
        Application.Volatile
     
        If CelRef Like Critere Then
     
            For Each Cel In PlageSomme: Total = Total + Cel.Value: Next Cel
     
        End If
     
        MA_SOMME = Total
     
    End Function

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 2
    Par défaut
    Merci beaucoup !

    Les solutions fonctionnent toutes. Je pense que ce qui est le plus adapté est la double boucle en effet.

    Juste pour bien comprendre, peux tu m'expliquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Range("B" & LigB) = Som1 'Ecriture des totaux
    Range("C" & LigB) = Som2
    Range("A" & LigB & ":C" & LigB).Font.Bold = True
    Je ne comprends pas en quoi consiste ces étapes (bold c'est le gras j'imagine !).

    Merci,

    J.K.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 102
    Par défaut bonne imagination !
    En effet,

    Execute la macro en mode pas à pas avec <F8> en tu devrais tout comprendre...

    Content de t'avoir dépanné.

    Cordialement
    Bruno

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

Discussions similaires

  1. Comment calculer la moyenne sur une colonne selon un critère
    Par Contact2012 dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/06/2010, 16h07
  2. Réponses: 19
    Dernier message: 31/05/2010, 09h51
  3. calcul somme sur une colonne
    Par lepeule dans le forum Langage SQL
    Réponses: 9
    Dernier message: 24/04/2010, 11h11
  4. Critère d'une requête sur une colonne de liste modifiable
    Par curt dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 03/08/2008, 21h31
  5. [syntaxe]critère sur une somme
    Par banzzai dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/07/2006, 17h23

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