Comment coder un Somme si dans un array

fp22us

XLDnaute Nouveau
Salut Le forum,
J'utilise des formules matricielles, mais elles ralentissent considerablement l'utilisation d'excel. Pour palier ce probleme j'ai essaye de les coder en vba pour accelerer l'execution, mais je bloque en chemin.
Dans le fichier joint j'ai un resumé des ventes par departement, et par marque. Je voudrais en faire une analyse (sans passer par un tcd).
J'ai reussi a coder les formules matricielles, en vba, mais mon code copie les formules dans la feuille ce qui lorsqu'on a beaucoup de donnees ralentit excel. Je voudrais donc inscrire le resultat dans un array sous vba, puis ensuite copier le resultat dans les cellules g3:h6.

Si vous avez des solutions, je suis preneur.

Merci beaucoup pour votre aide.
 

Fichiers joints

TempusFugit

XLDnaute Impliqué
Re : Comment coder un Somme si dans un array

Bonjour

Pourquoi ne pas utiliser SOMMEPROD ?
=SOMMEPROD((Dept=1)*(Marque="A")*Quantite)
renvoie : 10

Ou plus simple
en colonne G
=SOMMEPROD((Dept=$F3)*(Marque=$G$2)*Quantite)
et en colonne H
=SOMMEPROD((Dept=$F3)*(Marque=$H$2)*Quantite)

Ces formules ne nécessitent pas de validation matricielle.

Saisir ces formules en ligne 3 puis recopie vers le bas.
 
Dernière édition:

TempusFugit

XLDnaute Impliqué
Re : Comment coder un Somme si dans un array

Si vraiment tu veux le faire en macro, voici une macro qui le fera:

Code:
Sub MacroFormule()
With Range("G3:G6")
    .FormulaR1C1 = "=SUMPRODUCT((Dept=RC6)*(Marque=R2C7)*Quantite)"
    .Value = .Value
    With .Offset(, 1)
        .FormulaR1C1 = "=SUMPRODUCT((Dept=RC6)*(Marque=R2C8)*Quantite)"
        .Value = .Value
    End With
End With
End Sub
 

fp22us

XLDnaute Nouveau
Re : Comment coder un Somme si dans un array

Salut TempusFugit,
Merci pour ta reponse ultra rapide.
En fait je pensais mettre les resultats dans une matrice sous vba, puis eventuellemt afficher les resutats dans des des cellules. Je vais tester ta solution, ca devrait deja bien accelerer les choses.
Merci encore.
Fp22us
 
Haut Bas