Probleme execution Loop ligne et colonne

Bonjour

Je chercher a effectuer une loop sur ligne et colonne pour alimenter les cellules dont j ai besoin du resultat

La formule initiale sans la loop fonctionne, mais lorsque j essaie d y inserer les dimensions pour effectuer cette meme operation sur les lignes et colonnes dont je veux injecter le resultat, j ai un message d erreur me disant "Invalid Next control variable reference"

Ci joint le fichier

et le code ci dessous

Sub Test2()

Dim i As Variant
Dim j As Variant

Dim BU As Range, Month As Range, Scenario As Range, Brand As Range, Axe As Range, Category As Range, Scenario2 As Range, Amount As Range
Dim BUdata As Range, Monthdata As Range, Scenariodata As Range, Branddata As Range, Axedata As Range, Categorydata As Range, Scenario2data As Range
Dim VResult As Double

For i = 8 To 21
For j = c To n

Set Month = ActiveWorkbook.Sheets("Extract").Range("B:B")
Set BU = ActiveWorkbook.Sheets("Extract").Range("D:D")
Set Scenario = ActiveWorkbook.Sheets("Extract").Range("E:E")
Set Brand = ActiveWorkbook.Sheets("Extract").Range("H:H")
Set Axe = ActiveWorkbook.Sheets("Extract").Range("I:I")
Set Category = ActiveWorkbook.Sheets("Extract").Range("A:A")
Set Scenario2 = ActiveWorkbook.Sheets("Extract").Range("E:E")
Set Amount = ActiveWorkbook.Sheets("Extract").Range("K:K")

Set Monthdata = ActiveWorkbook.Sheets("Analysis").Range("j:5")       'Ligne 5, colonne variable'
Set BUdata = ActiveWorkbook.Sheets("Analysis").Range("A1")          'fixe'
Set Scenariodata = ActiveWorkbook.Sheets("Analysis").Range("j:6")   'Ligne 6, colonne variable'
Set Branddata = ActiveWorkbook.Sheets("Analysis").Range("A;i")       'Ligne variable, colonne A'
Set Axedata = ActiveWorkbook.Sheets("Analysis").Range("B;i")          'Ligne variable, colonne B'
Set Categorydata = ActiveWorkbook.Sheets("Analysis").Range("A2")    'fixe'
Set Scenario2data = ActiveWorkbook.Sheets("Analysis").Range("A4")   'fixe'

VResult = WorksheetFunction.SumIfs(Amount, Month, Monthdata, BU, BUdata, Scenario, Scenariodata, Brand, Branddata, Axe, Axedata, Category, Categorydata) + WorksheetFunction.SumIfs(Amount, Month, Monthdata, BU, BUdata, Scenario, Scenario2data, Brand, Branddata, Axe, Axedata, Category, Categorydata)

Worksheets("Analysis").Range(j, i) = VResult

Next i
Next j

End Sub

Merci pour votre aide et vos conseils

Bonjour,

Le résultat ci-dessous, ne correspondrait-il pas, peu ou prou, à ce que tu souhaites?

A te relire.

Cdlt

capture

bonjour Jean Eric

Non je ne souhaite pas passer par un tableau croise dynamique car je souhaite garder tout le temps le meme format.

D autre part, je veux que les donnees puissent varier en fonction du scenario que l on choisi, c est pourquoi le somme si est double car il y a deux conditions en fonction du scenario

Re,

1 - le format du TCD peut-être figé (je pense particulièrement aux 12 mois de l'année).

2 - Dans la liste déroulante 'Scenario', tu as différents choix, que tu peux combiner...

Je crains de ne pas comprendre tes propos.

Et je pense que tu ne connais pas les nombreuses possibilités offertes par les TCDs (réalisés manuellement ou avec l'aide de VBA).

Cdlt

nota : il y a aussi l'utilisation des segments (slicers) depuis Excel 2010!

le TCD ne me permet pas de selectionner differents scenario pour les mois de l annee

Explication.

nous sommes en Juin, je veux avoir les donnees relles de Janvier a Juin et de Juillet a Decembre les donnees du budget.

Le TCD ne me permet pas cela a ma connaissance.

Pour ce qui est de figer les mois, je suis au courant de cette possibilite et option dans excel, tout comme les slicers qui sont plus agreable, mais dans ce cas je dois passer par un code VBA pour remplacer mes somme.si.ens car ils allourdissent considerablement le fichier et ne le rende pas utilisable.

Re,

As-tu pensé aux champs calculés, et aux éléments calculés?

Exemple :

capture

oui

initialement le fichier est uniquement avec des formules mais il est trop lourd et le recalcul de la feuille de resultat est tres long, j ai opte pour une solution VBA plus rapide et efficace

Re,

Cela signifie que tu n'as pas besoin d'aide en VBA pour construire ton (tes) TCD(s)?

bonjour,

proposition de correction de ton code, non testée

n'oublie pas de donner une valeur à c et à n

Sub Test2()

    Dim i As Variant
    Dim j As Variant

    Dim BU As Range, Month As Range, Scenario As Range, Brand As Range, Axe As Range, Category As Range, Scenario2 As Range, Amount As Range
    Dim BUdata As Range, Monthdata As Range, Scenariodata As Range, Branddata As Range, Axedata As Range, Categorydata As Range, Scenario2data As Range
    Dim VResult As Double

    For i = 8 To 21
        For j = c To n

            Set Month = ActiveWorkbook.Sheets("Extract").Range("B:B")
            Set BU = ActiveWorkbook.Sheets("Extract").Range("D:D")
            Set Scenario = ActiveWorkbook.Sheets("Extract").Range("E:E")
            Set Brand = ActiveWorkbook.Sheets("Extract").Range("H:H")
            Set Axe = ActiveWorkbook.Sheets("Extract").Range("I:I")
            Set Category = ActiveWorkbook.Sheets("Extract").Range("A:A")
            Set Scenario2 = ActiveWorkbook.Sheets("Extract").Range("E:E")
            Set Amount = ActiveWorkbook.Sheets("Extract").Range("K:K")

            Set Monthdata = ActiveWorkbook.Sheets("Analysis").Cells(5, j)      'Ligne 5, colonne variable'
            Set BUdata = ActiveWorkbook.Sheets("Analysis").Range("A1")          'fixe'
            Set Scenariodata = ActiveWorkbook.Sheets("Analysis").Cells(6, j)  'Ligne 6, colonne variable'
            Set Branddata = ActiveWorkbook.Sheets("Analysis").Cells(i, "a")      'Ligne variable, colonne A'
            Set Axedata = ActiveWorkbook.Sheets("Analysis").Cells(i, "b")         'Ligne variable, colonne B'
            Set Categorydata = ActiveWorkbook.Sheets("Analysis").Range("A2")    'fixe'
            Set Scenario2data = ActiveWorkbook.Sheets("Analysis").Range("A4")   'fixe'

            VResult = WorksheetFunction.SumIfs(Amount, Month, Monthdata, BU, BUdata, Scenario, Scenariodata, Brand, Branddata, Axe, Axedata, Category, Categorydata) + WorksheetFunction.SumIfs(Amount, Month, Monthdata, BU, BUdata, Scenario, Scenario2data, Brand, Branddata, Axe, Axedata, Category, Categorydata)

            Worksheets("Analysis").Cells(j, i) = VResult

        Next j
    Next i

End Sub
Rechercher des sujets similaires à "probleme execution loop ligne colonne"