Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SUMPRODUCT mais.....

10 réponses
Avatar
Denys
Bonjour =E0 tous,

Dans une colonne B, j'ai diff=E9rents num=E9ros de succursale
apparaissant, et dans une colonne D des montants d'argent..... tout =E7a
sur plus ou moins 5,000 lignes. Apr=E8s avoir mis en ordre la feuille en
mettant les nos de succursale en ordre croissant, je veux faire un
SUMPRODUCT afin de connaitre le montant recueilli par chaque
succursale. Sauf que si la succursale no 32 apparait 25 fois, je ne
veux pas qu'excel le calcule 25 fois.

Dim DerA As Long
With ActiveSheet
DerA =3D .[B65536].End(3).Row

.Range("F2").Formula =3D _
"=3DSUMPRODUCT(($B$2:$B$" & DerA & " =3D$B2)*($D$2:$D$" & DerA &
" ))
Range("F2").Select
Selection.AutoFill Destination:=3DRange("$F$2:$F$" & DerA & ""),
Type:=3DxlFillDefault

etc.....

Z'auriez une id=E9e

Merci

Denys

10 réponses

Avatar
Daniel.C
Bonjour.
Deux solutions :
1. tableau croisé dynamique
2. filtre avancé avec extraction sans doublon des numéros de succursale et
formulaes SOMMEPROD d'après cette liste.
Cordialement.
Daniel
"Denys" a écrit dans le message de news:

Bonjour à tous,

Dans une colonne B, j'ai différents numéros de succursale
apparaissant, et dans une colonne D des montants d'argent..... tout ça
sur plus ou moins 5,000 lignes. Après avoir mis en ordre la feuille en
mettant les nos de succursale en ordre croissant, je veux faire un
SUMPRODUCT afin de connaitre le montant recueilli par chaque
succursale. Sauf que si la succursale no 32 apparait 25 fois, je ne
veux pas qu'excel le calcule 25 fois.

Dim DerA As Long
With ActiveSheet
DerA = .[B65536].End(3).Row

.Range("F2").Formula = _
"=SUMPRODUCT(($B$2:$B$" & DerA & " =$B2)*($D$2:$D$" & DerA &
" ))
Range("F2").Select
Selection.AutoFill Destination:=Range("$F$2:$F$" & DerA & ""),
Type:=xlFillDefault

etc.....

Z'auriez une idée

Merci

Denys
Avatar
MichDenis
En adaptant les plages au besoin


Sub test()

Dim Rg As Range, Rg1 As Range
'Rg1 Plage à additionner si le critère est exact
With Feuil1
Set Rg = .Range("A2:A" & .[B65536].End(3).Row)
Set Rg1 = .Range("B2" & .[B65536].End(3).Row) 'à adapter au besoin
.Range("F2" & .[B65536].End(3).Row).Formula = _
"=if(countif(" & Rg.Address & "," & _
Rg(1).Address(0, 1) & ")>1,Sumproduct(((A2:A4)=" & _
Rg(1).Address(0, 0) & ")*" & Rg1.Address & "),"""")"
End With

End Sub






"Denys" a écrit dans le message de news:

Bonjour à tous,

Dans une colonne B, j'ai différents numéros de succursale
apparaissant, et dans une colonne D des montants d'argent..... tout ça
sur plus ou moins 5,000 lignes. Après avoir mis en ordre la feuille en
mettant les nos de succursale en ordre croissant, je veux faire un
SUMPRODUCT afin de connaitre le montant recueilli par chaque
succursale. Sauf que si la succursale no 32 apparait 25 fois, je ne
veux pas qu'excel le calcule 25 fois.

Dim DerA As Long
With ActiveSheet
DerA = .[B65536].End(3).Row

.Range("F2").Formula = _
"=SUMPRODUCT(($B$2:$B$" & DerA & " =$B2)*($D$2:$D$" & DerA &
" ))
Range("F2").Select
Selection.AutoFill Destination:=Range("$F$2:$F$" & DerA & ""),
Type:=xlFillDefault

etc.....

Z'auriez une idée

Merci

Denys
Avatar
Michel Angelosanto
Je n'ai peut être pas bien compris la question mais si tu ne veux qu'une
occurrence de succursale, il vaut mieux utiliser recherchev après avoir
ajouté une colonne à gauche dans tes données avec une concaténation des
valeurs (colonnes) servant de critères de sélection.(si plusieurs).

"Denys" a écrit dans le message de
news:
Bonjour à tous,

Dans une colonne B, j'ai différents numéros de succursale
apparaissant, et dans une colonne D des montants d'argent..... tout ça
sur plus ou moins 5,000 lignes. Après avoir mis en ordre la feuille en
mettant les nos de succursale en ordre croissant, je veux faire un
SUMPRODUCT afin de connaitre le montant recueilli par chaque
succursale. Sauf que si la succursale no 32 apparait 25 fois, je ne
veux pas qu'excel le calcule 25 fois.

Dim DerA As Long
With ActiveSheet
DerA = .[B65536].End(3).Row

.Range("F2").Formula = _
"=SUMPRODUCT(($B$2:$B$" & DerA & " =$B2)*($D$2:$D$" & DerA &
" ))
Range("F2").Select
Selection.AutoFill Destination:=Range("$F$2:$F$" & DerA & ""),
Type:=xlFillDefault

etc.....

Z'auriez une idée

Merci

Denys

--
Michel Angelosanto, Bordeaux
http://angelosa.free.fr/
Avatar
Denys
Bonjour Daniel, Michel et Denis,

Merci beaucoup... je regarde tout cela et vous reviens

Bonne journée

Denys
Avatar
MichDenis
| Sauf que si la succursale no 32 apparait 25 fois

J'ai interprété ce bout de phrase au pied de la lettre ... ;-)))

Pour n'avoir que la somme qu'une fois pour chacun des items
essaie ce qui suit... il se peut que tu aies à adapter les plages
de cellules selon ton application...

'----------------------------
Sub test()

Dim Rg As Range, Rg1 As Range
'Rg1 Plage à additionner si le critère est exact
With Feuil1
Set Rg = .Range("A2:A" & .[B65536].End(3).Row)
Set Rg1 = .Range("B2:B" & .[B65536].End(3).Row) 'à adapter au besoin
With .Range("A1:A" & .[B65536].End(3).Row)
.AdvancedFilter xlFilterInPlace, , , True
End With
With .Range(.Range("_FilterDataBase").Offset(1, 5). _
Resize(Rg.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Address(0, 0))
.Formula = _
"=Sumproduct((" & Rg.Address & "=" & _
Rg(1).Address(0, 0) & ")*" & Rg1.Address & ")"
End With
.ShowAllData
End With
End Sub
'----------------------------




"MichDenis" a écrit dans le message de news:

En adaptant les plages au besoin


Sub test()

Dim Rg As Range, Rg1 As Range
'Rg1 Plage à additionner si le critère est exact
With Feuil1
Set Rg = .Range("A2:A" & .[B65536].End(3).Row)
Set Rg1 = .Range("B2" & .[B65536].End(3).Row) 'à adapter au besoin
.Range("F2" & .[B65536].End(3).Row).Formula = _
"=if(countif(" & Rg.Address & "," & _
Rg(1).Address(0, 1) & ")>1,Sumproduct(((A2:A4)=" & _
Rg(1).Address(0, 0) & ")*" & Rg1.Address & "),"""")"
End With

End Sub






"Denys" a écrit dans le message de news:

Bonjour à tous,

Dans une colonne B, j'ai différents numéros de succursale
apparaissant, et dans une colonne D des montants d'argent..... tout ça
sur plus ou moins 5,000 lignes. Après avoir mis en ordre la feuille en
mettant les nos de succursale en ordre croissant, je veux faire un
SUMPRODUCT afin de connaitre le montant recueilli par chaque
succursale. Sauf que si la succursale no 32 apparait 25 fois, je ne
veux pas qu'excel le calcule 25 fois.

Dim DerA As Long
With ActiveSheet
DerA = .[B65536].End(3).Row

.Range("F2").Formula = _
"=SUMPRODUCT(($B$2:$B$" & DerA & " =$B2)*($D$2:$D$" & DerA &
" ))
Range("F2").Select
Selection.AutoFill Destination:=Range("$F$2:$F$" & DerA & ""),
Type:=xlFillDefault

etc.....

Z'auriez une idée

Merci

Denys
Avatar
MichDenis
Tu peux avoir un tout petit fichier exemple là :

http://cjoint.com/?fmxee5WOzO



"MichDenis" a écrit dans le message de news:

| Sauf que si la succursale no 32 apparait 25 fois

J'ai interprété ce bout de phrase au pied de la lettre ... ;-)))

Pour n'avoir que la somme qu'une fois pour chacun des items
essaie ce qui suit... il se peut que tu aies à adapter les plages
de cellules selon ton application...

'----------------------------
Sub test()

Dim Rg As Range, Rg1 As Range
'Rg1 Plage à additionner si le critère est exact
With Feuil1
Set Rg = .Range("A2:A" & .[B65536].End(3).Row)
Set Rg1 = .Range("B2:B" & .[B65536].End(3).Row) 'à adapter au besoin
With .Range("A1:A" & .[B65536].End(3).Row)
.AdvancedFilter xlFilterInPlace, , , True
End With
With .Range(.Range("_FilterDataBase").Offset(1, 5). _
Resize(Rg.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Address(0, 0))
.Formula = _
"=Sumproduct((" & Rg.Address & "=" & _
Rg(1).Address(0, 0) & ")*" & Rg1.Address & ")"
End With
.ShowAllData
End With
End Sub
'----------------------------




"MichDenis" a écrit dans le message de news:

En adaptant les plages au besoin


Sub test()

Dim Rg As Range, Rg1 As Range
'Rg1 Plage à additionner si le critère est exact
With Feuil1
Set Rg = .Range("A2:A" & .[B65536].End(3).Row)
Set Rg1 = .Range("B2" & .[B65536].End(3).Row) 'à adapter au besoin
.Range("F2" & .[B65536].End(3).Row).Formula = _
"=if(countif(" & Rg.Address & "," & _
Rg(1).Address(0, 1) & ")>1,Sumproduct(((A2:A4)=" & _
Rg(1).Address(0, 0) & ")*" & Rg1.Address & "),"""")"
End With

End Sub






"Denys" a écrit dans le message de news:

Bonjour à tous,

Dans une colonne B, j'ai différents numéros de succursale
apparaissant, et dans une colonne D des montants d'argent..... tout ça
sur plus ou moins 5,000 lignes. Après avoir mis en ordre la feuille en
mettant les nos de succursale en ordre croissant, je veux faire un
SUMPRODUCT afin de connaitre le montant recueilli par chaque
succursale. Sauf que si la succursale no 32 apparait 25 fois, je ne
veux pas qu'excel le calcule 25 fois.

Dim DerA As Long
With ActiveSheet
DerA = .[B65536].End(3).Row

.Range("F2").Formula = _
"=SUMPRODUCT(($B$2:$B$" & DerA & " =$B2)*($D$2:$D$" & DerA &
" ))
Range("F2").Select
Selection.AutoFill Destination:=Range("$F$2:$F$" & DerA & ""),
Type:=xlFillDefault

etc.....

Z'auriez une idée

Merci

Denys
Avatar
Denys
Bonsoir Denis,

Quelle bonne idée j'ai eu de revenir voir....Pour une fois, tu me
proposais une solution qui ne fonctionnait pas. Comme ce n'était pas
du tout normal, je suis revenu.. Là, tout est parfait..... avec le
document ci-joint que tu m'as fourni....

Merci infiniment et à la prochaine

Denys
Avatar
MichDenis
Je t'invite à apporter cette correction au code :

Remplace dans la longue ligne de code
Resize(Rg.Rows.Count -1)

Par

Resize(Rg.Rows.Count)

La première ligne de données a déjà été enlevé puisqu'en
définissant la variable Rg, on est parti de la ligne 2

Sans la correction, il te manquera une formule si la dernière ligne
de ton tableau en colonne A est un nouveau numéro unique par exemple...

Ce qu'un second regard peut faire comme effet sur une sub ....;-))



"Denys" a écrit dans le message de news:

Bonsoir Denis,

Quelle bonne idée j'ai eu de revenir voir....Pour une fois, tu me
proposais une solution qui ne fonctionnait pas. Comme ce n'était pas
du tout normal, je suis revenu.. Là, tout est parfait..... avec le
document ci-joint que tu m'as fourni....

Merci infiniment et à la prochaine

Denys
Avatar
Denys
Encore merci Denis,

Celle-là, je ne l'urais sûrement pas vu...

Passe une bone journée...

Denys
Avatar
MichDenis
Une dernière petite chose, au cas où ...
si dans ta colonne A, il y a des lignes vides dans ton tableau et
si tu veux éviter d'avoir une formule pour la ligne de la première occurrence
de la première ligne vide, tu dois ajouter ces 2 lignes de code juste avant
la ligne de code : .ShowAllData

On Error Resume Next
Rg.SpecialCells(xlCellTypeBlanks).Offset(, 5).Value = ""




"Denys" a écrit dans le message de news:

Encore merci Denis,

Celle-là, je ne l'urais sûrement pas vu...

Passe une bone journée...

Denys