Somme prod VBA

Bonjour,

Besoin d'aide sur ce code :

Dim i, lign1 As Integer

Dim Sum As String

Dim Diamètre, Normal As String

Normal = Sheets("Stock").Range("C" & lign1).Value

Diamètre = Sheets("Stock").Range("D" & lign1).Value

i = Sheets("Stock").Range("C65536").End(xlUp).Row

Sum = Application.SumProduct("(C4:C" & i & "= " & Normal & ")*(D4:D" & i & "= " & Diamètre & ")*(E4:E" & i & ")")

La msgbox me renvoi 0, alors que dans une cellule la fonction SommeProd me renvoi bien une valeur.

D'avance merci

Bonjour,

Les références de plages s'écrivent différemment sous VBA. "A1:Z100" sera par exemple reconnu comme du texte. Je regarde pour corriger ta formule.

Je n'ai jamais utilisé la formule =SOMMEPROD() et encore moins sous VBA, donc je ne suis pas sur de la syntaxe exacte. Mais disons que ce sera "moins faux" !

Dim i As Integer, lign1 As Integer
Dim Diamètre As String, Normal As String, Sum As String

With Sheets("Stock")
    Normal = .Range("C" & lign1).Value
    Diamètre = .Range("D" & lign1).Value
    i = .Range("C65536").End(xlUp).Row
    Sum = Application.SumProduct((.Range(.Cells(4, 3), .Cells(i, 3)) = Normal) * (.Range(.Cells(4, 4), .Cells(i, 4)) = Diamètre) * .Range(.Cells(4, 5), .Cells(i, 5)))
End With

Merci pour ce retour,

J’ai une incompatibilité de type sur sum.

Mets le en Variant dans un premier temps et regarde ce qui sort

Bonjour,

Déclarer lign1 c'est bien, mais faut-il encore l'initialiser !...

lign1 est donc égale à zéro.

Cdlt.

Bonjour,

Déclarer lign1 c'est bien, mais faut-il encore l'initialiser !...

lign1 est donc égale à zéro.

Cdlt.

Très juste, pour ma part j'ai supposé qu'il s'agissait d'un extrait de code, n'ayant pas de lignes "Sub... End Sub" et donc que lign1 était initialisé précédemment.

Re,

Bonjour Pedro22,

Je réponds en fonction de ce Skillrex a communiqué.

Cdlt.

En effet, ceci est un extrait de code. Cette variable est bien déclarée.

En effet, ceci est un extrait de code. Cette variable est bien déclarée.

Déclarée on le sait avec cet extrait (instruction "Dim"), mais quelle valeur affecte tu à cette variable ?

Set recherche = Sheets("Stock").Range("F3:F2000")

val = ListBox1.Value

Set com = recherche.Cells.Find(what:=val, LookAt:=xlWhole)

If com Is Nothing Then

MsgBox "Impossible d'effectuer la sortie"

Else

lign1 = com.Row

Avec la partie du code cela devrait être sans doute plus pratique

Dim lign, lign1, lign2 As Integer

Dim com, com1 As Range, recherche, recherche1 As Range

Dim val, val1 As String

Dim i As Integer

Dim Sum

Dim Diamètre, Normal As String

Set recherche = Sheets("Stock").Range("F3:F2000")

val = ListBox1.Value

Set com = recherche.Cells.Find(what:=val, LookAt:=xlWhole)

Sheets("Stock").Unprotect "stockmno"

If com Is Nothing Then

MsgBox "Impossible d'effectuer la sortie"

Else

lign1 = com.Row

Set recherche1 = Sheets("Stock").Range("D" & lign1)

val1 = ListBox2.Value

Set com1 = recherche1.Cells.Find(what:=val1, LookAt:=xlWhole)

If com1 Is Nothing Then

MsgBox "Le numéro de coulée: " & ListBox1.Value & " et le diamètre: " & ListBox2.Value & " ne correspondent pas"

Else

If quantité1.Value = "" Then

MsgBox ("Saisir une quantité....")

Else

If MsgBox("Etes vous sur de vouloir effectuer la sortie de: " & quantité1.Value & "Kg, N°de coulée :" & ListBox1.Value & ", Diamètre: " & ListBox2.Value & " ?", vbYesNo) = vbYes Then

Worksheets("Stock").Range("E" & lign1).Value = Worksheets("Stock").Range("E" & lign1).Value - quantité1.Value

'--------------------------------------------------------------------------------

With Sheets("Stock")

Normal = .Range("C" & lign1).Value

Diamètre = .Range("D" & lign1).Value

i = .Range("C65536").End(xlUp).Row

Sum = Application.SumProduct((.Range(.Cells(4, 3), .Cells(i, 3)) = Normal) * (.Range(.Cells(4, 4), .Cells(i, 4)) = Diamètre) * (.Range(.Cells(4, 5), .Cells(i, 5))))

MsgBox Sum

End With

'-------------------------------------------------------------------------------------------------------

Sheets("Stock").Protect "stockmno"

If Worksheets("Stock").Range("E" & lign1).Value < 0 Then

MsgBox "Erreur de stock, valeur négative", vbExclamation

End

End If

End

End If

End If

End If

End If

End Sub

Rechercher des sujets similaires à "somme prod vba"