Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sumproduct ...tu me gonfles

6 réponses
Avatar
merguez07
Bonjour à tous,
décidemment le calcul matriciel en VBA c'est pas de la tarte, il y a
toujours une syntaxe qui merdois


En l'occurence je souhaite faire (à titre d'exemple) un calcul tout simple

j'ai mis dans une colonne 5 valeurs :
B2="CE"
B3="CE"
B4="AM"
B5="AM"
B6="AM"

J'ai donné le nom "Champs" à ces 5 cellules

J'ai en G4 la variable que je veux comptabiliser dans Champs
J'ai nommé G4 en "Type"


Enfin je voudrais comptabiliser le nombre de variables "type" dans le
"Champs" en utilisant la fonction SUMPRODUCT

Je veux mettre le résultat en G6 cellule que j'ai nommé "Total"

Je déclenche mon calcul par un bouton qui envoie vers la macro suivante

Private Sub CommandButton1_Click()

Ty = Range("Type")
With Worksheets(1)
ChampsDeTest = .Name & "!" & .Range("Champs").Address
End With
x = Application.Evaluate("=SUMPRODUCT((" & ChampsDeTest & "=" & Ty
& ")*1)") ' C'est ici qu'il y a erreur 2029
Range("Total") = x

End Sub


Malheureusement le calcul de x ne marche pas j'ai une erreur 2029

Where is the problème ?

6 réponses

Avatar
michdenis
Bonjour,

Avec sommeprod : =SOMMEPROD((Champ=type)*1)

Il y a aussi ceci : =NB.SI(Champ;type)


MichD
--------------------------------------------
Avatar
Charabeuh
Bonjour merguez07,

Le code suivant devrait le faire:

Sub Test()
Range("Total") = Evaluate("=SUMPRODUCT(--(Champs=Type))")
End Sub




___________________________________________________
merguez07 a émis l'idée suivante :
Bonjour à tous,
décidemment le calcul matriciel en VBA c'est pas de la tarte, il y a toujours
une syntaxe qui merdois


En l'occurence je souhaite faire (à titre d'exemple) un calcul tout simple

j'ai mis dans une colonne 5 valeurs :
B2="CE"
B3="CE"
B4="AM"
B5="AM"
B6="AM"

J'ai donné le nom "Champs" à ces 5 cellules

J'ai en G4 la variable que je veux comptabiliser dans Champs
J'ai nommé G4 en "Type"


Enfin je voudrais comptabiliser le nombre de variables "type" dans le
"Champs" en utilisant la fonction SUMPRODUCT

Je veux mettre le résultat en G6 cellule que j'ai nommé "Total"

Je déclenche mon calcul par un bouton qui envoie vers la macro suivante

Private Sub CommandButton1_Click()

Ty = Range("Type")
With Worksheets(1)
ChampsDeTest = .Name & "!" & .Range("Champs").Address
End With
x = Application.Evaluate("=SUMPRODUCT((" & ChampsDeTest & "=" & Ty &
")*1)") ' C'est ici qu'il y a erreur 2029
Range("Total") = x

End Sub


Malheureusement le calcul de x ne marche pas j'ai une erreur 2029

Where is the problème ?
Avatar
michdenis
Si tu utilises des noms de plage, en vba, la formule est :

a = [Sumproduct((Champ=type)*1)]


MichD
--------------------------------------------
Avatar
merguez07
Merci ça marche



Le 26.02.2011 14:16, Charabeuh a écrit :
Bonjour merguez07,

Le code suivant devrait le faire:

Sub Test()
Range("Total") = Evaluate("=SUMPRODUCT(--(Champs=Type))")
End Sub




___________________________________________________
merguez07 a émis l'idée suivante :
Bonjour à tous,
décidemment le calcul matriciel en VBA c'est pas de la tarte, il y a
toujours une syntaxe qui merdois


En l'occurence je souhaite faire (à titre d'exemple) un calcul tout
simple

j'ai mis dans une colonne 5 valeurs :
B2="CE"
B3="CE"
B4="AM"
B5="AM"
B6="AM"

J'ai donné le nom "Champs" à ces 5 cellules

J'ai en G4 la variable que je veux comptabiliser dans Champs
J'ai nommé G4 en "Type"


Enfin je voudrais comptabiliser le nombre de variables "type" dans le
"Champs" en utilisant la fonction SUMPRODUCT

Je veux mettre le résultat en G6 cellule que j'ai nommé "Total"

Je déclenche mon calcul par un bouton qui envoie vers la macro suivante

Private Sub CommandButton1_Click()

Ty = Range("Type")
With Worksheets(1)
ChampsDeTest = .Name & "!" & .Range("Champs").Address
End With
x = Application.Evaluate("=SUMPRODUCT((" & ChampsDeTest & "=" & Ty &
")*1)") ' C'est ici qu'il y a erreur 2029
Range("Total") = x

End Sub


Malheureusement le calcul de x ne marche pas j'ai une erreur 2029

Where is the problème ?




Avatar
merguez07
Merci Mich, effectivement dans ce cas ça fonctionne.

Par contre j'ai encore des pb lorsque je nomme les plages dans la
procédure (le programme sort de la procedure au moment de la rencontre
avec le code

dim M as string
M="CE"
ThisWorkbook.Names.Add "type", M, False

Le 26.02.2011 14:42, michdenis a écrit :
Si tu utilises des noms de plage, en vba, la formule est :

a = [Sumproduct((Champ=type)*1)]


MichD
--------------------------------------------

Avatar
michdenis
Bonjour,

Si tu procèdes ainsi, il n'y a pas de raison que cela ne fonctionne pas...
Tu dois avoir un environnement particulier!

Tu dois créer le nom "type" avant de tenter d'évaluer la formule.
Ceci suppose que Champ est aussi une plage nommée.

'---------------------------
Sub test()
Dim M As String
M = "CE"
ThisWorkbook.Names.Add "type", M, False
a = [Sumproduct((Champ=type)*1)]
End Sub
'---------------------------


MichD
--------------------------------------------
"merguez07" a écrit dans le message de groupe de discussion : 4d6a01e9$0$10730$

Merci Mich, effectivement dans ce cas ça fonctionne.

Par contre j'ai encore des pb lorsque je nomme les plages dans la
procédure (le programme sort de la procedure au moment de la rencontre
avec le code

dim M as string
M="CE"
ThisWorkbook.Names.Add "type", M, False

Le 26.02.2011 14:42, michdenis a écrit :
Si tu utilises des noms de plage, en vba, la formule est :

a = [Sumproduct((Champ=type)*1)]


MichD
--------------------------------------------