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 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.
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