VBA : boucle avec sumif successifs sur un range
Bonjour a tous,
je suis newbie sur le forum et également sur vba excel.
Dans le cadre de mes activités j'essaye de construire un tableau tab2 a partir de valeurs que je récupère d'un tableau tab1.
Dans tab2 j'ai une zone nommée qui contient une liste de valeurs pour lesquelles, une après l'autre, je vais sommer les valeurs de tab1 en fonction de 2 autres critères.
En gros, c'est un tcd sans tcd. Oui je sais
Je joins un fichier en exemple avec code vba. C'est sur la 2eme partie du code que je voudrais boucler.
Dans l'exemple, la somme se fait sur la colonne AL de la feuille "P&L", en fonction des critères :
- critères fixe sur colonne X (Cost Center n1) = "Maintenance"
- variable sur colonne H (DF) en fonction de la zone nommée "IndirectCostMaint" en feuille Var2
et ainsi de suite pour toutes les valeurs de "IndirectCostMaint", et pour les colonnes Actual MTD, Actual YTD et suivantes de la feuille Var2.
Merci d'avance pour toute l'aide que vous pourrez m'apporter.
Bonjour
Je ne vois pas pourquoi vous voulez faire cela par code. Votre formule Somme.Si.Ens fonctionne très bien d'autant que votre tableau est au format structuré. Donc oubliez VBA dans ce cas
Seule chose c'est que utilisez les lignes de votre tableau mais si vous changez votre formule en G16 par celle ci-dessous, elle vous donne le résultat attendu ->
=SOMME.SI.ENS(Tb_Req_PL11[A22'#MTD];Tb_Req_PL11[Cost Center n1];"Maintenance";Tb_Req_PL11[DF];'Var2'!$F16)*1000
En H16 --> =SOMME.SI.ENS(Tb_Req_PL11[A22'#YTD];Tb_Req_PL11[Cost Center n1];"Maintenance";Tb_Req_PL11[DF];'Var2'!$F16)*1000
Si vous ajoutez de nouvelles lignes à votre tableau structuré en P&L la formule les prendra automatiquement
Peut être changer le nom de vos colonnes et le nom du tableau pour que ce soit plus lisible. A vous de voir bien entendu
Bonjour Dan et merci pour le retour.
L'utilisation de vba est liée au fait que ce travail n'est qu'une petite partie d'un ensemble mêlant connexion avec requête sql et autres tcd générés par code.
Ce travail est a destination d'un utilisateur avec très peu de connaissances Excel et doit être du "presse bouton".
Ceci étant je clos le sujet car j'ai finalement trouvé la solution en me creusant un peu la tète et en fouillant sur le web.
Je code finalement une boucle simple qui me permet de calculer les infos voulues.
Dim nbLgDomF As LongDim i As Integer, j As IntegerDim iValue As StringDim tValue As LongnbLgDomF = Range("IndirectCostMaint").Count / 3ws2.Range("O30") = nbLgDomFFor i = 1 To nbLgDomFiValue = Range("IndirectCostMaint")(i, 1)aMValue = WorksheetFunction.SumIfs(rngcolaMTD, rngcolCC1, Critere5, rngcolDomF, iValue)aYValue = WorksheetFunction.SumIfs(rngcolaYTD, rngcolCC1, Critere5, rngcolDomF, iValue)bMValue = WorksheetFunction.SumIfs(rngcolbMTD, rngcolCC1, Critere5, rngcolDomF, iValue)bYValue = WorksheetFunction.SumIfs(rngcolbYTD, rngcolCC1, Critere5, rngcolDomF, iValue)ws1.Cells(6 + i, 1) = Range("IndirectCostMaint")(i, 1)ws1.Cells(6 + i, 2) = aMValue * -1000ws1.Cells(6 + i, 3) = aYValue * -1000ws1.Cells(6 + i, 4) = bMValue * -1000ws1.Cells(6 + i, 5) = bYValue * -1000
Next i
En tout cas merci.