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

Rechercher des sujets similaires à "tableaux croises dynamiques"