Somme en fonction 2 parametres VISUAL BASIC

ivain34 Messages postés 12 Statut Membre -  
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour,

Je voudrai trouver une boucle sur visual basic qui puisse faire la somme de cellues (colonne A) en fonction de deux parametres texte fixe (colonnes B et C).

Pour etre clair :

Si la cellule B1 correspond au texte "consigneB" et si C1 correspond au texte "consigneC" on commence l'addition avec A1.

On passe à la ligne. Si les memes conditions sont respectées en B2 et C2, on selectionne A2 et on l'additionne à A1.

Etc...

D'avance merci pour l'aide que vous pourrez m'apporter !

4 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Ta question serait plus appropriée dans le forum Bureautique.

    Néanmoins, si tu parles bien d'Excel, recherche du côté de la fonction SOMME.SI()

    Xavier
    0
  2. ivain34 Messages postés 12 Statut Membre
     
    DESOLE je cherche une boucle sur Visual Basic !
    0
    1. Reivax962 Messages postés 3742 Statut Membre 1 011
       
      Pourquoi tu veux une boucle si une fonction toute prête existe déjà ?
      0
    2. ivain34 Messages postés 12 Statut Membre
       
      J'ai simplifié l'exposé de mon probleme. Il me faut une boucle. Celle de Bidouilleu_R me semble interessante, je vais essayé ça! Je vous tiens au courant de mon avancement :)
      0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    Bonjour,
    une solution parmi d'autres,
    on peut aussi écrire une fonction et on peut aussi
    utiliser somme.si.ens ( somme si savec plusieurs critères)
    mais tu dis que tu veux une boucle alors voilà une boucle.

    Sub sommeSurCritère()
    
    Dim C As Range
    Dim nbLig As Long
    Dim maSomme As Double
    
    nbLig = Sheets("feuil1").Range("A65635").End(xlUp).Row
    maSomme = 0
    For Each C In Range("A2:A" & nbLig)  ' je suppose que la plage comme de A2 à Axxx
        If C.Offset(0, 1) = "ConsigneB" And C.Offset(0, 2) = "ConsigneC" Then
            maSomme = maSomme + C.Value
        End If
    
    
    Next
    
    MsgBox maSomme
    End Sub
    0
  4. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    Pour le fun! mais on est pas loin de réinventer la roue :-)

    Sub test()
    Dim y as double
    ' pour des valeurs commençant en A2
        y = SommeSiBoucle(2, 1, 2, 3)
    
    End Sub
    Function SommeSiBoucle(ligDep As Integer, colDep As Integer, colCritere1 As Integer, colCritere2 As Integer)
    Dim nblig As Long
    Dim maSomme As Double
    
    nblig = ActiveSheet.Cells(ligDep, colDep).End(xlDown).Row
    maSomme = 0
    
    
    For Each C In Range(Cells(ligDep, colDep), Cells(nblig, colDep))
        ' Ici on pourrait passer le critère en paraètres avec une variable string
        
        If C.Offset(0, (colCritere1 - 1)) = "ConsigneB" And C.Offset(0, (colCritere2 - 1)) = "ConsigneC" Then
            maSomme = maSomme + C.Value
        End If
    SommeSiBoucle = maSomme
    
    Next
    
    
    End Function
    0