Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/02/2011, 13h27   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 48
Points : 12
Points : 12
Par défaut UDF pour un SOMMEPROD

Bonjour à tous,

Malgré la consultation de plusieurs fils traitant du même sujet, je n'arrive pas à comprendre pourquoi la version VBA de mon sommeprod [=SOMMEPROD(L20C:L25C*(L20C1:L25C1=LC1))] :
Code :
1
2
3
Function StockGrille(Base As Range, Optional BaseCritère As Range, Optional Critère As Range) As Double
    StockGrille = [Sumproduct(Base*(BaseCritère=Critère)]
End Function
ne fonctionne pas.

Si l'un d'entre vous pouvait éclairer ma lanterne,

Merci d'avance

Philippe
berapard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 13h56   #2
Membre Expert
 
Inscription : novembre 2006
Messages : 1 464
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 464
Points : 1 410
Points : 1 410
peut etre parce que base est un mot clé de vba. tapes F1
et je pense qu'il te faut utiliser application.worksheetfunction
essaayes avec ça, tu alternes les lignes sur la fonction, tu comprendras
Code :
1
2
3
4
5
6
7
8
Function addition(a, b)
addition = [somme(a + b)]
'addition = Application.WorksheetFunction.Sum(a, b)
End Function
Sub test()
u = addition(4, 5)
MsgBox u
End Sub
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 14h14   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 48
Points : 12
Points : 12
J'ai essayé en remplaçant "Base" par "BaseVol" et j'ai le même résultat.

Merci quand même de l'alerte.

Quant à l'exemple que tu donnes, chez moi seule la version avec la syntaxe complète donne un résultat, la version [..] retournant un message d'erreur.

j'ai donc essayé de remplacer ma version initiale par
Code :
1
2
3
4
 
Function StockGrille2(BaseVol As Range, Optional BaseCritère As Range, Optional Critère As Range) As Double
    StockGrille2 = Application.WorksheetFunction.SumProduct(BaseVol * (BaseCritère = Critère))
End Function
Et là j'obtiens un magnifique #VALEUR!
berapard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 18h05   #4
Membre Expert
 
Inscription : novembre 2006
Messages : 1 464
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 464
Points : 1 410
Points : 1 410
c'est déja un progrès
es tu sur que tes ranges basevol et basecritere ont la même longuuer
sommeprod ne fonctionne qu'avec des ranges de même dimension
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/02/2011, 19h46   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2008
Messages : 48
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 48
Points : 12
Points : 12
Un autre progrès voire la solution, mais sans que je sois capable de l'expliquer !, est de passer par la clause .address et la constitution d'un chaine ensuite intégrée dans la fonction EVALUATE.
Il semble en effet que la fonction EVALUATE de gère les RANGES par leur NAME.

Code :
1
2
3
4
5
6
7
8
Function StockGrille2(BaseVol, BaseCritère, Critère)
    Application.Volatile
    BaseVol = BaseVol.Address
    BaseCritère = BaseCritère.Address
    Critère = Critère.Address
    ChaineEval = "SumProduct(" & BaseVol & "* (" & BaseCritère & "=" & Critère & "))"
    StockGrille2 = Evaluate(ChaineEval)
End Function
berapard est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h01.


 
 
 
 
Partenaires

Hébergement Web