Formule SommeProd matricielle dans VBA

Bonjour à tous,

Voici le problème que j’aimerais vous exposer:

Je cherche à créer une macro sous vba reproduisant la fonction SommeProd sous sa forme matricielle.

Ainsi, dans une feuille Excel où figure la matrice de recherche (colonnes B et C) ainsi que les paramètres recherchés (en G3 et G4), le code suivant fonctionne :

Sub Matriciel()

Dim x

x = [SUMPRODUCT((B:B=G3)*(C:C=G4))]

Range("G11") = x

End Sub

Je précise que le fait de différer le calcul dans une variable « x » avant de placer le résultat en cellule « G11 » est importante.

Car l’idée par la suite sera de faire ce calcul sans jamais placer le résultat dans une cellule, mais de s’en servir comme référence pour une autre macro !

Je ne souhaite donc pas utiliser de formule du type :

Range("G11") = "=SUMPRODUCT((B:B=G3)*(C:C=G4))

Ou bien Formula.Array

Mon problème est que je souhaite que les paramètres recherchés ne soient pas directement disponibles dans la feuille dont je peux renseigner les références directement dans la formule (dans le cas présent G3 et G4), mais des variables qui seraient entrées via des inputbox par l’urilisateur.

Voici ce à quoi cela devrait ressembler :

Sub Matriciel()

Dim x

Dim Search_ID As Integer

Dim Search_Facility As String

Search_ID = InputBox("Guarantee ID?")

Search_Facility = InputBox("Facility Name?")

x = [SUMPRODUCT((B:B=Search_ID)*(C:C=Search_Facility))]

End Sub

Malheureusement la dernière ligne ne fonctionne pas avec la denomination des variables.

Pourriez-vous m’aider ?

Merci par avance

Bonjour,

Cela me surprend un peu que cela fonctionne ainsi... Je note (pour moi, merci !) que la mise entre crochets suffit...

En utilisant des variables, j'utiliserais la méthode WorksheetFunction, qui te permet d'utiliser la fonction, avec une syntaxe VBA.

Cordialement.

A vrai dire j’ai déjà essayé quelque chose du type ci-dessous:

Dim x

Dim Search_ID

Dim Search_Facility

Dim IDs_List As Range

Dim Facilities_List As Range

Set IDs = Range("b:b")

Set IDs = Range("c:c")

Search_ID = Application.InputBox("Guarantee ID?", Type:=1)

Search_Facility = Application.InputBox("Facility Name?", Type:=2)

X = Worksheetfunction.Sumproduct((IDs_List=Search_ID)*(Facilities_List=Search_Facility))

Mais cela ne fonctionne pas. Visiblement ce type de fonction attend des arguments sous une forme peu évidente.

Auriez-vous une idée pour résoudre ce problème ?

Bonjour,

Tester la function dans la feuille, si elle fonctionne, elle doit fonctionner dans le code avec les mêmes éléments en utilisant la syntaxe VBA.

Cordialement.

C'est justement la question de la syntaxe qui me pose problème car la formule excel fonctionne correctement dans une feuille

Quelle serait la syntaxe à adopter?

A-priori elle me paraît correcte si ton affectation de plages aux variables est complète (pas comme dans ta reproduction !)

Je n'aime pas l'affectation avec Range non qualifié par l'indication de la feuille, qui laisse peser une variation aléatoire possible selon la feuille active...

Mais si la feuille concernée est bien la feuille active, cela devrait marcher. Essaie avec IDs_List.Value et Facilities_List.Value, Excel est parfois capricieux sur ce point.

Rechercher des sujets similaires à "formule sommeprod matricielle vba"