[XL2010] VBa: somme avec condition

Sadoul

XLDnaute Nouveau
Bonjour a tous et bonjour au forum,

J'essaie avec panache de faire la somme de colonne mais avec une condition.
Je cherche en vain sur le forum un post similaire mais je ne trouve rien.
Exemple:

Colonne A ---- Colonne B
2 ---450------------Bleu---
3 ---300------------Rouge-
4 ---600------------Rouge-
5 ---300------------Bleu---
6 ---200------------Bleu---
7 ---250------------Rouge-

Je voudrais faire la somme des Rouges en C16 et des bleus en D16.
Je veux utiliser VBA pour cela et non une fonction excel.

Je tente avec le code ci dessous (enfin c'est vraiment un debut pour le coup)
mais il s'arrete des que la valeur n'est pas bleu (pareil pour le rouge).
De plus, merci de pas tenir compte du paste...

Range("B2").Select
Do While Not IsEmpty(ActiveCell)
ActiveCell.Offset(1, 0).Activate
If ActiveCell.Offset = "bleu" Then
ActiveCell.Offset(0, -1).Select
Selection.Copy
Range("C16").PasteSpecial
End If
Loop

Un grand merci pour votre aide.
 
C

Compte Supprimé 979

Guest
Re : [XL2010] VBa: somme avec condition

Bonjour Sadoul et bienvenue sur ce forum

Pourquoi vouloir utiliser du VBA pour ça !?

L'utilisation de la fonction : SOMME.SI() est tellement plus simple

A+
 

Sadoul

XLDnaute Nouveau
Re : [XL2010] VBa: somme avec condition

Bonjour Bruno et Merci pour votre reponse,

Je voudrai utiliser VBA pour dans un premier temps, apprendre et m'ameliorer, et dans un second car je veux ajouter des conditions (de date par exemple).
Pour le moment, j'utilise Sommeprod.

Pouvez-vous m'aider svp?
Un grand merci.
 

Kobaya

XLDnaute Occasionnel
Re : [XL2010] VBa: somme avec condition

Bonsoir à tous,

Même remarque que Bruno, mais si tu veux absolument faire du VBA :
Code:
Sub somme()
    Dim lngLigne As Long
    
    For lngLigne = 2 To 7
        If UCase(Cells(lngLigne, 2).Value) = "ROUGE" Then
            Range("C16").Value = Range("C16").Value + Cells(lngLigne, 1).Value
        End If
        
        If UCase(Cells(lngLigne, 2).Value) = "BLEU" Then
            Range("D16").Value = Range("D16").Value + Cells(lngLigne, 1).Value
        End If
    Next
End Sub
 

Sadoul

XLDnaute Nouveau
Re : [XL2010] VBa: somme avec condition

Merci beaucoup Kobaya.
Par contre, je veux rajouter des lignes donc je ne suis pas sûr que la formule convienne.
Pouvez-vous me dire si il y a une formule que je puisse employer quelqueoit le nombre de lignes svp?
Merci.
 

R@chid

XLDnaute Barbatruc
Re : [XL2010] VBa: somme avec condition

Bonsoir,
tu peux utiliser la fonction DECALER() pour créer des champs dynamiques...
un fichier exemple sera plus parlant
Aller en mode avancé ==> Gérer les pièces jointes
Amicalement
 

Mytå

XLDnaute Occasionnel
Re : [XL2010] VBa: somme avec condition

Salut le forum

Comme ceci
Code:
Sub SommeColor()
    Dim Cel As Range

    Range("C16") = 0: Range("D16") = 0
    For Each Cel In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
        With Cel
            Select Case UCase(.Offset(, 1))
            Case "ROUGE"
                Range("C16") = Range("C16") + .Value
            Case "BLEU"
                Range("D16") = Range("D16") + .Value
            End Select
        End With
    Next Cel
End Sub
Mytå
 

Sadoul

XLDnaute Nouveau
Re : [XL2010] VBa: somme avec condition

Bonjour,

Merci a tous pour vos reponses.
Merci Myta, la macro fonctionne bien avec l'exemple mais pas avec mon vrai cas.
En effet la colonne avec BLEU et ROUGE se trouve 4 colonnes a droite.
J'ai donc remplacer 1 par 4 dans Select Case UCase(.Offset(, 1)) mais ca ne marche pas pour autant. Je trouve 0

Pouvez vous m'aider svp?

Merci Rachid pour votre aide mais je n'ai pas compris.
 
Dernière édition:

Sadoul

XLDnaute Nouveau
Re : [XL2010] VBa: somme avec condition

En fait, j'ai resolu mon probleme. Et maintenant ca marche.
Donc un grand merci Myta. Je n'ai pas trop compris l'utilisation de Ucase par contre (dans aide, l'explication ne m'eclaire pas malheureusement)

Par contre, j'aimerai ajouter une condition de date.(en anglais au format mm/dd/yyyy)

Colonne A ---- Colonne B----Colonne C
2 ---450------------Bleu------9/13/2012
3 ---300------------Rouge----12/21/2012
4 ---600------------Rouge----6/1/2013
5 ---300------------Bleu-------11/22/2012
6 ---200------------Bleu------7/12/2014
7 ---250------------Rouge------10/5/2012

Et ensuite, faire la somme des bleus
de moins de trois mois 9par rapport a date du jour J) en C16
3 mois a un an en C17
1 an a 2 an en C18
2 a 5 ans en C19

idem pour rouge sauf qu'en D

Merci d'avance pour votre aide.
 

Discussions similaires