Sumifs dans VBA entraîne erreur

Bonjour à tous,

Dans un Dashboard que je prépare pour un fond je dois faire un test pour vérifier que mon exposition à un acheteur à J+-3 par rapport à une date ne dépasse pas 20% de mon AUM (asset under management)

J'ai donc dans mon code un Sumifs mais j'ai l'erreur "Unable to get the Sumifs property...."

Je pense que je fais une erreur de syntaxe si vous pouvez me filer un petit coup de pouce ce serait top

 a = Range("nb").Value
 For i = 1 To Range("nb").Value
x = 17 + i
Set exposure = Application.WorksheetFunction.SumIfs(Range("P18:P" & 17 + a), Range("O17:O" & 17 + a), "" = "" & Range("O" & x), Range("K17:K" & 17 + a), "" <= "" & Range("Y" & x), Range("K17:K" & 17 + a), "" <= "" & Range("Z" & x)) / Range("aum").Value * 100
If exposure > 20 Then

MsgBox "Alert:Exposure to " & Range("O" & x) & " is higer than 20% of total AUM around " & Range("Y" & x) & "!", vbCritical
Else
MsgBox "Transaction Added!"
End If
Next i

Je vous isole le Sumifs pour plus de clarté

SumIfs(Range("P18:P" & 17 + a), Range("O17:O" & 17 + a), "" = "" & Range("O" & x), Range("K17:K" & 17 + a), "" <= "" & Range("Y" & x), Range("K17:K" & 17 + a), "" <= "" & Range("Z" & x))

Mille mercis,

Tim

Bonjour,

la fonction "SumIfs" retourne une valeur alors que "Set" sert à affecter à une variable objet. je n'ai absolument pas testé la fonction pour voir si les arguments sont bons mais ce serait plutôt :

exposure = SumIfs(Range("P18:P" & 17 + a), _
                  Range("O17:O" & 17 + a), _
                  "" = "" & Range("O" & x), _
                  Range("K17:K" & 17 + a), _
                  "" <= "" & Range("Y" & x), _
                  Range("K17:K" & 17 + a), _
                  "" <= "" & Range("Z" & x))

Hervé.

Bonjour

Bonjour Theze (même conclusion - mais en moins rapide (j'ai un cerveau lent))

Sans en être sur et sans le fichier pour tester

Tu affectes Exposure comme un objet (Range, Shape, Worksheet etc....)

Normalement Summifs retourne une valeur

cela devrait être

 a = Range("nb").Value
 For i = 1 To Range("nb").Value
x = 17 + i
exposure= Application.WorksheetFunction.SumIfs(Range("P18:P" & 17 + a), Range("O17:O" & 17 + a), "" = "" & Range("O" & x), Range("K17:K" & 17 + a), "" <= "" & Range("Y" & x), Range("K17:K" & 17 + a), "" <= "" & Range("Z" & x)) / Range("aum").Value * 100
If exposure > 20 Then

MsgBox "Alert:Exposure to " & Range("O" & x) & " is higer than 20% of total AUM around " & Range("Y" & x) & "!", vbCritical
Else
MsgBox "Transaction Added!"
End If
Next i

Merci de vos réponses,

En fait j'ai ajouté le set après avoir tenté sans. Je viens de retenter sans mais toujours le même message d'erreur

Je peux vous envoyer le fichier mais pour lancer ce test il faut input une nouvelle transaction via un Userform

et il y a quelques données à saisir...

Vous ne voyez pas d'erreur évidente de syntaxe dans le Sumifs ?

Ce type d'erreur n’apparaît-elle pas quand les paramètres sont mal renseignés ?

J'ai Excel 2003 et il ne comporte pas SumIfs mais à la vue de ton montage, je dirait qu'il te faut virer les double guillemets et espace car ceci ne sert que si tu veux entrer la formule dans une feuille de calcul donc (les espaces ne servant à rien de toutes manières) :

"" = ""
"" <= ""

devient :

"="
"<="

Hervé.

Merci Hervé tenté aussi mais ça ne fonctionne pas

Parfois le compilateur a de la peine avec la valeur d'un range et l'objet range lui même donc peut être en précisant ".Value" et en scindant la valeur retournée par la fonction de l'opération appliquée :

Sub Test()

    'a doit être > 0

    exposure = Application.WorksheetFunction.SumIfs(Range("P18:P" & 17 + a), _
                                                    Range("O17:O" & 17 + a), _
                                                    "=" & Range("O" & x).Value, _
                                                    Range("K17:K" & 17 + a), _
                                                    "<=" & Range("Y" & x).Value, _
                                                    Range("K17:K" & 17 + a), _
                                                    "<=" & Range("Z" & x).Value)

    exposure = exposure / Range("aum").Value * 100

End Sub

Chez moi j'ai Excel 2007 donc je pourrai tester la fonction si ça ne marche toujours pas !

Hervé.

J'avais déjà tenté ce petit trick mais il ne veut vraiment pas tant pis je vais coder ca autrement mais du coup j'ai peur que ce ne soit pas optimisé...

Merci beaucoup pour votre aide en tous cas


A titre d'infos voici ma dernière tentative si jamais quelqu'un a soudain un éclaire de Génie

exposure = Application.WorksheetFunction.SumIfs(Sheets("DASHBOARD").Range("P18:P" & q), Sheets("DASHBOARD").Range("O17:O" & q), "=" & Sheets("DASHBOARD").Range("O" & x).Value, Sheets("DASHBOARD").Range("K17:K" & q), "<=" & Sheets("DASHBOARD").Range("Y" & x).Value, Sheets("DASHBOARD").Range("K17:K" & q), "<=" & Sheets("DASHBOARD").Range("Z" & x).Value)

Bonjour à tous,

En plus de ce qui a déjà été dit, ce qui me gène dans ta formule c'est ta 1ère plage qui démarre à la ligne 18 alors que toutes les autres démarrent à la ligne 17.

Toutes les plages doivent faire la même taille.

eric

Bonjour Eric,

Je me sens à la fois très bête et très très heureux....

Merci beaucoup ça a fonctionné

tim

Rechercher des sujets similaires à "sumifs vba entraine erreur"