comment traduire sumprod en VBA

  • Initiateur de la discussion booba
  • Date de début
B

booba

Guest
bonjour le forum,
comme le sujet l'indique, je voudrais faire une petite macro avec sumprod, comment je peux opérer?
en vous remerkiant
 

nono59

XLDnaute Nouveau
Salut,

Pour retrouver des fonctions en vba, le plus simple est de taper la formule dans une cellule, de faire un enregistrement automatique en revalidant la formule par F2 puis Enter et d'aller voir dans le code VBA l'équivalent en Anglais.

Après ça, en VBA, on utilise la formule suivante :
Application.worksheetFunction
Exemple avec SUMIF pour trouver la somme des débits pointés et la somme des crédits pointés.

Set zone1 = ActiveSheet.Range(Cells(2, 9), Cells(DerLgn, 9))
Set Zone2 = ActiveSheet.Range(Cells(2, 6), Cells(DerLgn, 6))
Set Zone3 = ActiveSheet.Range(Cells(2, 7), Cells(DerLgn, 7))
TotalDébits = Format(Round(Application.WorksheetFunction.SumIf(zone1, '=' & Pointage, Zone2), 2), '##,##0.00 €')
TotalCrédits = Format(Round(Application.WorksheetFunction.SumIf(zone1, '=' & Pointage, Zone3), 2), '##,##0.00 €'

Dans les lignes de SET, il faut bien sûr cerner les zones qui vont intervenir dans les paramètres de la formule.

Bon courage,
 

JCA06

XLDnaute Occasionnel
Bonjour Mikeline !

Il existe différentes possibilités.
Dis nous en davantage pour t'aider à trouver la bonne.
Une solution classique est de créer un variable qui te servira de compteur et qui s'ajoutera des valeurs suivant certaines conditions.
Il faut comprendre que la fonction Sommeprod crée des vecteurs avec des valeurs boléennes (vrai ou faux = 0 ou 1, ou True ou False), qui se multiplient à des matrices de valeurs.
Le principe est le même en vba.

On fait en général tourner les tests en boucle avec des For...Next

Par exemple, si tu veux ajouter les valeurs de la colonne C si la colonne A est égale à la Valeur1 et si la colonne B est égale à la Valeur2, ceci de la ligne 2 à 10, cela donnerai :

Sub compteur()

Dim i as byte
Dim compteur
For i = 2 to 10
If Range('A' & i) = Valeur1 And Range('B' & i) = Valeur2 then compteur = compteur + Range('C' & i)
Next i
MsgBox compteur

End Sub

A plus.
 

Statistiques des forums

Discussions
312 715
Messages
2 091 259
Membres
104 822
dernier inscrit
BAAG