OVH Cloud OVH Cloud

FORMULE SOMMEPROD

3 réponses
Avatar
mo manou
Bonjour

j'ai un tableau de 5 colonnes et 500 lignes dans une feuille qui s'appelle
"clients", dans chaque cellules j'ai la formule suivantes:
=SOMMEPROD((fact!$A$5:$A$1995=C2)*(fact!$N$5:$N$1995="A")*(fact!$J$5:$J$1995
)*(fact!$O$5:$O$1995=1)), où "fact" une autre autre feuille où l'on extrait
les données à partir d'une base de données, sauf que ca prend une eternite
pour le recalcul.
y a t il un moyen d'ecrire en vba cette formule ou trouver autres formules
pourque la mise à jour se fasse rapidement

merci

3 réponses

Avatar
RaMA
Bonjour
Si j'ai bien compris la structure de tes feuilles

ça pourrait être quelque chose comme ça

Sub CumFact()
Dim x, CumF, Cli, R

For Each Cli In Sheets("clients").Range("C2:C500")
R = Cli.Row
CumF = 0
If Not IsEmpty(Cli) Then
For Each x In Sheets("fact").Range("A5:A1995")
Y = x.Row
With Sheets("fact")
If x = Cli And UCase(.Range("N" & Y)) = "A" And .Range("O" & Y)
Then
CumF = CumF + .Range("J" & Y)
End If
End With
Next x
Sheets("Clients").Range("J" & R) = CumF 'le cumul de factures
est inscrit en col J de clients?

End If
Next Cli
End Sub


Salutations
RaMa
--
.
"mo manou" a écrit dans le message de
news:
Bonjour

j'ai un tableau de 5 colonnes et 500 lignes dans une feuille qui s'appelle
"clients", dans chaque cellules j'ai la formule suivantes:

=SOMMEPROD((fact!$A$5:$A$1995Â)*(fact!$N$5:$N$1995="A")*(fact!$J$5:$J$1995

)*(fact!$O$5:$O$1995=1)), où "fact" une autre autre feuille où l'on
extrait

les données à partir d'une base de données, sauf que ca prend une eternite
pour le recalcul.
y a t il un moyen d'ecrire en vba cette formule ou trouver autres formules
pourque la mise à jour se fasse rapidement

merci




Avatar
mo manou
sauf que dans la formule
=SOMMEPROD((fact!$A$5:$A$1995Â)*(fact!$N$5:$N$1995="A")*(fact!$J$5:$J$1995
)*(fact!$O$5:$O$1995=1)), est inscrite dans la cellule G2 de la feuille
"clients" ca veut dire que faire la somme da la colonne "j" de "fact" pour

toute
valeur C2 de la feuille "Clients" trouvée dans la feuille "fact" avec comme
critère les valeures de la colonne "N" égales à "A"
et celle de la colonne "J" égales à 1. j'espère que j'ai éclaircie un peu ma
problématique.


"RaMA" a écrit dans le message de
news:
Bonjour
Si j'ai bien compris la structure de tes feuilles

ça pourrait être quelque chose comme ça

Sub CumFact()
Dim x, CumF, Cli, R

For Each Cli In Sheets("clients").Range("C2:C500")
R = Cli.Row
CumF = 0
If Not IsEmpty(Cli) Then
For Each x In Sheets("fact").Range("A5:A1995")
Y = x.Row
With Sheets("fact")
If x = Cli And UCase(.Range("N" & Y)) = "A" And .Range("O" &
Y)

Then
CumF = CumF + .Range("J" & Y)
End If
End With
Next x
Sheets("Clients").Range("J" & R) = CumF 'le cumul de factures
est inscrit en col J de clients?

End If
Next Cli
End Sub


Salutations
RaMa
--
.
"mo manou" a écrit dans le message de
news:
Bonjour

j'ai un tableau de 5 colonnes et 500 lignes dans une feuille qui
s'appelle


"clients", dans chaque cellules j'ai la formule suivantes:



=SOMMEPROD((fact!$A$5:$A$1995Â)*(fact!$N$5:$N$1995="A")*(fact!$J$5:$J$1995

)*(fact!$O$5:$O$1995=1)), où "fact" une autre autre feuille où l'on
extrait

les données à partir d'une base de données, sauf que ca prend une
eternite


pour le recalcul.
y a t il un moyen d'ecrire en vba cette formule ou trouver autres
formules


pourque la mise à jour se fasse rapidement

merci








Avatar
RaMA
Bonjour Mohamed

Alors voilà et plus speed

Sub CumFact()
Dim x, CumF, Cli
Cli = UCase(Sheets("Clients").[C2])
CumF = 0
For Each x In Sheets("fact").Range("A5:A1995")
Y = x.Row
With Sheets("fact")
If UCase(x) = Cli And UCase(.Range("N" & Y)) = "A" And
.Range("O" & Y) Then
CumF = CumF + .Range("J" & Y)
End If
End With
Next x
Sheets("Clients").[G2] = CumF
End Sub

Salutations
RaMa
--
.
"mo manou" a écrit dans le message de
news:%
sauf que dans la formule

=SOMMEPROD((fact!$A$5:$A$1995Â)*(fact!$N$5:$N$1995="A")*(fact!$J$5:$J$1995

)*(fact!$O$5:$O$1995=1)), est inscrite dans la cellule G2 de la feuille
"clients" ca veut dire que faire la somme da la colonne "j" de "fact" pour

toute
valeur C2 de la feuille "Clients" trouvée dans la feuille "fact" avec
comme

critère les valeures de la colonne "N" égales à "A"
et celle de la colonne "J" égales à 1. j'espère que j'ai éclaircie un peu
ma

problématique.


"RaMA" a écrit dans le message de
news:
Bonjour
Si j'ai bien compris la structure de tes feuilles

ça pourrait être quelque chose comme ça

Sub CumFact()
Dim x, CumF, Cli, R

For Each Cli In Sheets("clients").Range("C2:C500")
R = Cli.Row
CumF = 0
If Not IsEmpty(Cli) Then
For Each x In Sheets("fact").Range("A5:A1995")
Y = x.Row
With Sheets("fact")
If x = Cli And UCase(.Range("N" & Y)) = "A" And .Range("O" &
Y)

Then
CumF = CumF + .Range("J" & Y)
End If
End With
Next x
Sheets("Clients").Range("J" & R) = CumF 'le cumul de
factures


est inscrit en col J de clients?

End If
Next Cli
End Sub


Salutations
RaMa
--
.
"mo manou" a écrit dans le message de
news:
Bonjour

j'ai un tableau de 5 colonnes et 500 lignes dans une feuille qui
s'appelle


"clients", dans chaque cellules j'ai la formule suivantes:





=SOMMEPROD((fact!$A$5:$A$1995Â)*(fact!$N$5:$N$1995="A")*(fact!$J$5:$J$1995

)*(fact!$O$5:$O$1995=1)), où "fact" une autre autre feuille où l'on
extrait

les données à partir d'une base de données, sauf que ca prend une
eternite


pour le recalcul.
y a t il un moyen d'ecrire en vba cette formule ou trouver autres
formules


pourque la mise à jour se fasse rapidement

merci