Fonction SUMPRODUCT VBA

Pierrot75

XLDnaute Nouveau
Bonjour,

Novice en VBA, j'espère trouver ici une aide précieuse à mon problème.
voilà je souhaite faire intervenir la fonction SUMPRODUCT dans mon code afin de restituer des données dans l'onglet "Synthèse" à partir de la base de données figurante dans l'onglet "DonnéesMiseEnForme".

Le SUMPRODUCT est inclus dans une double boucle qui me permettrait de balayer à la fois les lignes et les colonnes de mon onglet "Synthèse".

Je ne sais pas si c'est très clair. en tout cas, le fichier en PJ vous aidera certainement d'avantage qu'un long texte...

Le code ne plante pas! Par contre, les résultats obtenus ne sont pas satisfaisants... les valeurs retournées sont toutes à 0...

Merci d'avance de votre aide!
 

Pièces jointes

  • Essai plan de charge .xlsm
    156.3 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re : Fonction SUMPRODUCT VBA

Bonjour Pierrot75, bienvenue sur XLD,

La fonction SOMME.SI me semble ici mieux adaptée que SOMMEPROD.

La macro dans le code de la feuille "Synthèse" :

Code:
Private Sub Worksheet_Activate()
Dim P As Range, t, i&, j As Byte
Set P = [B3:BA100] 'à adapter
t = P 'matrice, plus rapide
'---remplissage du tableau---
With Feuil1 'CodeName de la feuille source
  For i = 1 To UBound(t)
    For j = 1 To 52
      t(i, j) = Application.SumIf(.Columns(1), P(i, 0), .Columns(j + 1))
    Next
  Next
End With
'---restitution---
P = t
End Sub
Elle s'exécute quand on active la feuille.

Fichier joint.

Edit : .Columns(1) est plus rapide que .[A:A]

Durée d'exécution 0,94 seconde au lieu de 1,36 seconde sur Win 7 - Excel 2010.

Délimiter le tableau source ne fait rien gagner.

A+
 

Pièces jointes

  • Essai plan de charge(1).xlsm
    154.4 KB · Affichages: 22
Dernière édition:

Pierrot75

XLDnaute Nouveau
Re : Fonction SUMPRODUCT VBA

bonjour Job75,

Merci pour le tuyau... je vais tenter de l'adapter à mon fichier. Par contre, avez-vous une idée pourquoi mon code ne fonctionne pas bien que les matrices semblent cohérentes les unes par rapport aux autres.
En fait je vous demande cela car j'ai vu des articles sur les forum (https://www.excel-downloads.com/threads/sommeprod-en-vba.189663/) qui ont l'air de bien fonctionner.

Merci
 

job75

XLDnaute Barbatruc
Re : Fonction SUMPRODUCT VBA

Re,

Bon voici ce qui ne va pas dans votre macro :

1) Remplacer :

Code:
Set Données_DonnéesMiseEnForme = Sheets("DonnéesMiseEnForme").Range(Cells(n°_LigneEnTête_DonnéesMiseEnForme + 1, i), Cells(n°_Ligne_DonnéesMiseEnForme, i))
par :

Code:
With Sheets("DonnéesMiseEnForme")
Set Données_DonnéesMiseEnForme = .Range(.Cells(n°_LigneEnTête_DonnéesMiseEnForme + 1, i), .Cells(n°_Ligne_DonnéesMiseEnForme, i))
End With
2) Remplacer la boucle j par :

Code:
'-----
        For j = n°_Ligne1_Synthèse To n°_Ligne_Synthèse
            'Sheets("Synthèse").Activate 'inutile
            CellEnCours = Sheets("Synthèse").Cells(j, n°_Colonne1Données_Synthèse - 1)
            Resultat = Evaluate("SUMPRODUCT((" & Concaténation_DonnéesMiseEnForme.Address(External:=True) & "=""" & CellEnCours & """)*(" & Données_DonnéesMiseEnForme.Address(External:=True) & "))")
            Sheets("Synthèse").Cells(j, i).Value = Resultat
        Next j
A+
 

job75

XLDnaute Barbatruc
Re : Fonction SUMPRODUCT VBA

Bonjour Pierrot75, le forum,

Ci-joint le fichier original avec votre macro où j'ai fait le ménage.

Elle se lance par le bouton "Mise à jour".

Bonne journée.
 

Pièces jointes

  • Essai plan de charge - Original(1).xlsm
    150.8 KB · Affichages: 22

Discussions similaires

Réponses
12
Affichages
250

Statistiques des forums

Discussions
312 215
Messages
2 086 332
Membres
103 188
dernier inscrit
evebar