SOMME.SI en VBA

Bonjour,

Je cherche à traduire la formule somme.si en code vba dans mon tableau.

J'ai regardé sur le forum, mais je n'ai pas trouvé de post sur ce sujet.

Pourriez-vous m'aider ?

Exemple dans mon fichier de ce que je souhaite convertir en vba : "=SOMME.SI(ENTREES_SORTIES!$C$11:$C$1000;STOCKS!C11;ENTREES_SORTIES!$F$11:$F$1000)"

Merci d'avance

47stocks.xlsm (256.53 Ko)

Bonjour,

Essaye comme cela ...

Option Explicit
Private Sub Stocks()
Dim Plage_Critere As Range, Plage_Somme As Range
Dim Critere As String
Dim i As Long
    With Worksheets("ENTREES_SORTIES")
        Set Plage_Critere = .Range("C11:C1000")
        Set Plage_Somme = .Range("F11:F1000")
    End With
    With Worksheets("STOCKS")
        For i = 11 To .Range("C" & Rows.Count).End(xlUp).Row
            Critere = .Range("C" & i)
            Cells(i, 6) = WorksheetFunction.SumIf(Plage_Critere, Critere, Plage_Somme)
        Next i
    End With
End Sub

Cordialement.

Bonjour,

Merci pour ta réponse.

J'ai modifié un peu le code mais un une erreur de compilation sur ".range", mais je n'arrive pas à la résoudre.

Peux-tu m'éclairer ?

Private Sub Stocks()
Dim Plage_Critere As Range, Plage_Somme As Range
Dim Critere As String
Dim i As Long
Dim j As Long
Dim k As Long

For i = 11 To .Range("D" & Rows.Count).End(xlUp).Row

    If Worksheets("ENTREES_SORTIES").Range("D" & i).Value <> "" Then

    With Worksheets("ENTREES_SORTIES")
        Set Plage_Critere = .Range("D11:D1000")
        Set Plage_Somme = .Range("F11:F1000")
    End With
    With Worksheets("STOCKS")
        For j = 11 To .Range("D" & Rows.Count).End(xlUp).Row
            Critere = .Range("D" & j)
            Cells(j, 6) = WorksheetFunction.SumIf(Plage_Critere, Critere, Plage_Somme)
        Next j
    End With
Next i
Else
 With Worksheets("ENTREES_SORTIES")
        Set Plage_Critere = .Range("C11:C1000")
        Set Plage_Somme = .Range("F11:F1000")
    End With
    With Worksheets("STOCKS")
        For k = 11 To .Range("C" & Rows.Count).End(xlUp).Row
            Critere = .Range("C" & k)
            Cells(k, 6) = WorksheetFunction.SumIf(Plage_Critere, Critere, Plage_Somme)
        Next k
    End With
End Sub

Merci par avance

Bonjour,

Si tu m'expliquais ce que tu cherches à obtenir, ça me faciliterait la compréhension de ta "petite" modification.

Bonjour,

Tu utilises .range en dehors du "with"

Bonjour,

Lorsque je fait une entrée, je renseigne les champs que je connais.

Mais parfois, je n'ai pas la référence interne du produit.

Du coup, dans l'onglet stock, pour ce produit, le nombre d'entrée ne ce met pas à jour.

Ce que je souhaite faire:

si j'ai une case vide dans la colonne D alors utiliser la colonne C pour faire la somme

With Worksheets("ENTREES_SORTIES")
        Set Plage_Critere = .Range("C11:C1000")
        Set Plage_Somme = .Range("F11:F1000")
    End With
    With Worksheets("STOCKS")
        For k = 11 To .Range("C" & Rows.Count).End(xlUp).Row
            Critere = .Range("C" & k)
            Cells(k, 6) = WorksheetFunction.SumIf(Plage_Critere, Critere, Plage_Somme)
        Next k
    End With]

sinon utiliser la colonne D

 With Worksheets("ENTREES_SORTIES")
        Set Plage_Critere = .Range("D11:D1000")
        Set Plage_Somme = .Range("F11:F1000")
    End With
    With Worksheets("STOCKS")
        For j = 11 To .Range("D" & Rows.Count).End(xlUp).Row
            Critere = .Range("D" & j)
            Cells(j, 6) = WorksheetFunction.SumIf(Plage_Critere, Critere, Plage_Somme)
        Next j
    End With]

Si en l’absence de référence interne du produit, tu utilises le nom du produit comme référence, c’est que le nom du produit est la référence. Dans ce cas, autant utiliser ce nom comme critère.

Si tu me dis que parfois il y a la référence interne du produit mais qu’il n’y a pas son nom ou que …, ou que …, alors je te réponds que c’est un sacré foutoir et que même Saint Excel ne fera pas de miracle …

Cordialement.

bonjour

salut gyrus au passage

mon avis : c'est toujours une mauvaise idée de passer d'une formule à du VBA.

amitiés

Rechercher des sujets similaires à "somme vba"