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.

10test.xlsb (131.54 Ko)

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.

Rechercher des sujets similaires à "vba boucle sumif successifs range"