Bonjour tout le monde,
débutant en VBA, je voudrais automatiser des formules de sommes conditionnelles:
- somme d'une colonne ou de plusieurs colonnes avec 1 condition
- adapter mes formules à un nombre de lignes variable
Du coups j'ai effectué mes formules en Excel avec l'enregistreur de macro => j'aimerai améliorer les macros déjà enregistrées.
Contexte:
- une worksheet "AAA N" avec des données de l'année N: 200 colonnes environs et un nombre de lignes variables (6000-7000 environ)
- une worksheet "AAA N-1" avec des données de l'année N-1 idem
- une worksheet "analyse" avec des tableaux récap N vs N-1
Je voudrais automatiser les formules dans les tableaux dans la worksheet "Analyse"
1) Formule: Si cellule en colonne A contient "UC" alors cellule en colonne B = "UC", sinon "EURO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| EuroUc Macro
Sheets("AAA N").Select
Columns("L:L").Insert Shift:=xlToRight
Range("L2").FormulaR1C1 = "=IF(ISNUMBER(SEARCH(""UC"",RC[-1])),""UC- "",""EURO- "")"
Range("L2").AutoFill Destination:=Range("L2:L5982")
Range("L2:L5982").Select
Range("L1").FormulaR1C1 = "EURO/UC"
Range("L1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent4
.TintAndShade = 0.399975585192419
.PatternTintAndShade = 0
End With
End Sub |
2) formule somme conditionnelle d'un seule colonne fixe:
1 2 3
| Range("C27").Select 'dans la worksheet "analyse"
ActiveCell.FormulaR1C1 = _
"=(SUMPRODUCT((('AAA N'!R2C13:R5982C13='analyse'!R2C4)*(OFFSET('AAA N'!R2C13:R5982C13,,MATCH('analyse de marge'!R5C27,'AAA N'!R1C14:R1C221,0))))))/10^6" |
3) Formule somme conditionnelle d'une colonne:
=SOMMEPROD(('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*('AAA N'!$T$2:$T$5982='analyse de marge'!$AB$5)*(DECALER('AAA N'!$T$2:$T$5982;;EQUIV('analyse de marge'!$AA$5;'AAA N'!$U$1:$HM$1;0)))))/10^6
4) Formule somme conditionnelle de plusieurs colonnes (format Excel):
=(((SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AAA$7;'AAA N'!$N$1:$HM$1;0)))))))+(SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AAA$12;'AAA N'!$N$1:$HM$1;0))))))+(SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AAA$13;'AAA N'!$N$1:$HM$1;0))))))+(SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AAA$16;'AAA N'!$N$1:$HM$1;0))))))+(SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AA$18;'AAA N'!$N$1:$HM$1;0))))))+(SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AA$20;'AAA N'!$N$1:$HM$1;0))))))+(SOMMEPROD((('AAA N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AAA$23;'AAA N'!$N$1:$HM$1;0))))))+(SOMMEPROD((('BDT N'!$M$2:$M$5982='analyse de marge'!$D$2)*(DECALER('AAA N'!$M$2:$M$5982;;EQUIV('analyse de marge'!$AAA$24;'AAA N'!$N$1:$HM$1;0)))))))/10^6
N"hésitez pas à me demander plus de précisions.
merci pour votre aide,
cordialement
Partager