Tableaux croisés dynamiques
Bonjour,
J'ai un petit problème excel que je n'arrive pas à résoudre.
J'ai une base de données, que j'alimente à partir d'un logiciel. Ensuite j'exécute une macro (macro réalisée en faisant un enregistrement), qui me dégage deux autres bases, qui me servent à construire des TCD.
Les TCD sont sur d'autres onglets, et ne sont pas concernés par la macro, je les actualise après avoir lancé la macro. Pourtant, une fois la macro exécutée, la plage de données qui sert d'entrée aux TCD a bougé (au départ les colonnes A à I sont utilisées, puis après la macro, seules les colonnes A à F le sont).
Comment est ce possible, alors que les TCD ne sont pas concernés par la macro ? Et comment faire que la plage soit figée ?
Merci beaucoup pour votre aide.
Marina
Bonjour,
Une solution simple est d'attribuer un nom à ta base de données et de l'utiliser lors de la définition de la plage à l'assistant TCD étape 1.
Donne moi les références de toute la base de données
A te relire
Dan
Merci pour ta réponse.
Je ne comprends pas exactement ce que tu veux dire quand tu me demandes les références de la base de données...
Les données que j'utilse sont contenues dans un onglet appelé "Base sans doublons" ; les colonnes A à I m'intéressent. Comme tu me l'as dit, j'ai défini un nom (Base_TCD) pour ces colonnes, et j'ai utilisé ce nom pour créer mon TCD. Le TCD est dans un onglet qui s'appelle "Imputation".
Mais là encore, même problème, je fais tourner ma macro, j'actualise mon TCD, et ça ne fonctionne pas. Si je regarde la plage de données elle a encore bougé, elle prend les colonnes de A à H.
Je ne comprends pas pourquoi...
Merci encore.
Marina
Re,
Merci de tes précisions.
1. Par "référence base de données" je souhaite connaitre à quoi fait référence le nom de la base "BASE_TCD" que tu as donné.
Exemple : BASE_TCD = A1:H50 ?
Tu peux le voir là où tu as définit le nom.
2. La macro sert à construire le TCD ou uniquement à l'actualiser ?
Eventuellement place le code ici dans ta réponse.
A te relire
Dan
La référence de la base est la suivante : 'Base sans doublons'!$A:$I
Non la macro n'a rien a voir avec les TCD, elle sert juste à créer la base sans doublons et une autre base. Après j'actualise les TCD en faisant "actualiser tout".
Merci.
Re,
Tout me parait normal dans ce que tu as fait. Je vois que tu prends toutes les lignes des colonne A à I en ayant prit soin de mettre les $ devant les références colonnes.
Il faut peut être voir ce qui se passe exactement du coté de ta macro car c'est certainement ton code qui fait changer les références de colonnes.
Merci de me montrer le code ou de mettre ton fichier en ligne par l'option "joindre un fichier" en haut de cette page.
A te relire
Dan
Merci pour tes réponses si rapides.
Je veux bien te mettre le code de la macro, par contre c'est fait par enregistrement, donc c'est pas très propre comme macro, désolée ! Mais mon niveau VBA ne me permet pas d'écrire le code.
Comme tu peux le voir, un des TCD est construit grâce à la macro, mais je n'ai jamais réussi à faire les autres, même avec l'enregistrement.
Sub Suppression_doublons()
'
Sheets("Base 3").Select
Cells.Select
Selection.ClearContents
Sheets("Base 2").Select
Rows("1:1").Select
Selection.AutoFilter
Cells.Select
Selection.ClearContents
ActiveWindow.ScrollWorkbookTabs Sheets:=-8
Sheets("Base").Select
Cells.Select
Selection.Copy
ActiveWindow.ScrollWorkbookTabs Sheets:=8
Sheets("Base 2").Select
Cells.Select
ActiveSheet.Paste
Rows("1:1").Select
Application.CutCopyMode = False
Range("A1:K3557").Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:= _
Range("E2"), Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
Range("J1").Select
With Selection.Interior
.ColorIndex = 24
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 47
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = 47
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlTop
.WrapText = True
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.NumberFormat = "@"
ActiveCell.FormulaR1C1 = "conca"
With ActiveCell.Characters(Start:=1, Length:=5).Font
.Name = "Tahoma"
.FontStyle = "Normal"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 1
End With
Range("J2").Select
ActiveCell.FormulaR1C1 = "=RC[-8]&RC[-5]"
Range("J2").Select
Selection.AutoFill Destination:=Range("J2:J3557")
Range("J2:J3557").Select
Range("K2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],0,1)"
Range("K2").Select
Selection.AutoFill Destination:=Range("K2:K3557")
Range("K2:K3557").Select
Rows("1:1").Select
Range("E1").Activate
Selection.AutoFilter
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
Selection.AutoFilter Field:=11, Criteria1:="1"
Cells.Select
Range("E1").Activate
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Base 3").Select
ActiveSheet.Paste
Range("C14").Select
Sheets("Pal NC par voy").Select
Columns("A:M").Select
Range("A86").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Sheets("Base 3").Select
Range("C13").Select
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"'Base 3'!R1C1:R28340C10").CreatePivotTable TableDestination:= _
"'[BASE ANALYSE LITIGES.xls]Pal NC par voy'!R3C2", TableName:= _
"Tableau croisé dynamique1", DefaultVersion:=xlPivotTableVersion10
Sheets("Pal NC par voy").Select
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"No voyage")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("Tableau croisé dynamique1").AddDataField ActiveSheet. _
PivotTables("Tableau croisé dynamique1").PivotFields("conca"), _
"Nombre de conca", xlCount
With ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields( _
"No voyage")
.PivotItems("(vide)").Visible = False
End With
ActiveWindow.SmallScroll Down:=111
Range("e5").Select
ActiveCell.FormulaR1C1 = "Moyenne palettes NC / voyage"
Columns("C:C").Select
Range("C102").Activate
Columns("B:B").EntireColumn.AutoFit
Columns("C:C").EntireColumn.AutoFit
Range("E107").Select
ActiveWorkbook.Save
ActiveWindow.SmallScroll Down:=-129
Sheets("Base 4").Select
Rows("1:1").Select
Selection.AutoFilter
Cells.Select
Selection.ClearContents
Sheets("Base sans doublons").Select
Cells.Select
Selection.ClearContents
ActiveWindow.ScrollWorkbookTabs Sheets:=-8
Sheets("Base").Select
Cells.Select
Selection.Copy
ActiveWindow.ScrollWorkbookTabs Sheets:=7
Sheets("Base 4").Select
Cells.Select
ActiveSheet.Paste
Rows("1:1").Select
Application.CutCopyMode = False
Range("A1:J3557").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
With ActiveCell.Characters(Start:=1, Length:=14).Font
.Name = "Tahoma"
.FontStyle = "Normal"
.Size = 8
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 1
End With
Columns("C:C").Select
Selection.NumberFormat = "0"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],0,1)"
Range("C2").Select
Selection.AutoFill Destination:=Range("C2:C35570")
Range("C2:C35570").Select
Rows("1:1").Select
Selection.AutoFilter
Selection.AutoFilter Field:=3, Criteria1:="1"
Cells.Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Base sans doublons").Select
Cells.Select
ActiveSheet.Paste
Columns("D:D").EntireColumn.AutoFit
Range("C2").Select
Application.CutCopyMode = False
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
ActiveWorkbook.Save
End Sub
Marina
re,
Comme tu peux le voir, un des TCD est construit grâce à la macro...
Dans un post précédent, tu me dis le contraire ...
Il y a pas mal de travail à faire pour revoir le code et supprimer ce qui ne sert pas.
A lire le code, je pense que ton pb peut aussi venir de --> 'Base 3'!R1C1:R28340C10"). Ta base ne vas jusque la ligne 28340.
C'est peut être normal, mais là je ne vois pas non plus le nom BASE_TCD dont tu parles avant.
Bref ce sera plus facile si je vois déjà le fichier contenant les feuilles Base, Base 2 et Base 3 (sans données confidentielles).
Désolé mais faire des macros pour TCD sans fichier est souvent un parcours du combatttant.
A te relire
Dan
Oui il y a un tableau qui est construit à partir de la macro, je n'en ai pas parlé car il fonctionne.
Pour la base 3, ça ne va pas jusqu'en bas, mais elle ne contient que 2800 lignes donc ce n'est pas gênant je pense.
Le nom base_TCD n'apparaît pas car je l'ai créé quand tu m'as posté la première réponse. Peut être que c'est le fait d'activer la macro qui modifie cette plage. Peut être faudrait-il alors la nommer dans la macro... Je ne sais pas.
J'aimerais bien mettre le fichier en ligne mais c'est impossible, trop de données confidentielles, désolée. Tant pis pour moi si ce problème n'est pas soluble sans le fichier en ligne....
Je te remercie beaucoup pour le temps que tu as passé pour m'aider.
Marina
re,
Tu pourrais mettre des données bidons ou enlever les données confidentielles mais bon.
Tu fais une mise en forme dans la macro (bordures, couleur de fond...). De ce que je peux voir cela ne concerne que la cellule J1 dans la feuille BASE ?
A te relire
Dan