Fonction Sommeprod à 3 variables pour vba
Résolu
Praljm
Messages postés
48
Date d'inscription
Statut
Membre
Dernière intervention
-
Praljm Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
Praljm Messages postés 48 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Fonction Sommeprod à 3 variables pour vba
- Fonction si et - Guide
- Ai suite 3 - Télécharger - Optimisation
- Picasa 3 - Télécharger - Albums photo
- Couper une photo en 3 pour instagram - Guide
- Photorecit 3 - Télécharger - Visionnage & Diaporama
5 réponses
Bonjour,
Sommeprod étant une vraie-fausse formule matricielle, cela sera effectivement très long
je regarde une solution "rapide"
mais si tu pouvais joindre un extrait de ton classeur (1000 lignes )
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
Sommeprod étant une vraie-fausse formule matricielle, cela sera effectivement très long
je regarde une solution "rapide"
mais si tu pouvais joindre un extrait de ton classeur (1000 lignes )
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
Essai 2500 lignes toutes colonnes remplies:
1 tableau=0,25 sec
Essai 8000 lignes
4 tableaux= 0,125 sec
code 4 tableaux
En espèrant que Praljm daigne bien faire signe....
Michel
1 tableau=0,25 sec
Essai 8000 lignes
4 tableaux= 0,125 sec
code 4 tableaux
Option Explicit
'ma formule excel à convertir => =SOMMEPROD((A2:A27=1)*(D27:D27=380341)*(P2:P27="Eau")*(S2:S27))
Sub sommeprod()
Dim Derlig As Integer, T_a(), T_d(), T_p(), T_s(), Idx As Integer, Somme As Double
Dim start As Single
start = Timer
Derlig = Columns("A").Find("*", , , , , xlPrevious).Row
With Application
.ScreenUpdating = False
T_a = .Transpose(Range("A2:A" & Derlig))
T_d = .Transpose(Range("D2:D" & Derlig))
T_p = .Transpose(Range("P2:P" & Derlig))
T_s = .Transpose(Range("S2:S" & Derlig))
End With
For Idx = 1 To UBound(T_a)
If T_a(Idx) = 1 Then
If T_d(Idx) = 380341 Then
If T_p(Idx) = "Eau" Then Somme = Somme + T_s(Idx)
End If
End If
Next
Cells(Derlig + 1, "A") = Somme
Application.ScreenUpdating = True
MsgBox "Calcul sur " & Derlig & " lignes effectué en : " & Timer - start & " Sec."
End Sub
En espèrant que Praljm daigne bien faire signe....
Michel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Non testé
Mais suivant la structure de ton tableau, il serait peut-^tre + efficace de passer par 4 tableaux au lieu d'un (1 tableau par colonne: A, D,P,S)
en environ 0,1 seconde avec 512 Mo RAM, Proc 3ghz celeron