XL 2013 Format de tableau croisé dynamique avec des bordures entre indicateurs ou dimensions

Chrystel01

XLDnaute Occasionnel
Bonjour,

Je rencontre régulièrement un même soucis sans trouver de solutions. Pourriez-vous m'aider svp ?

Je crée un format de tableau croisé dynamique personnalisé.
A l'intérieur de ce tableau et pour plus de clarté, je souhaite séparer 2 indicateurs ou dimensions
Je vous joints un exemple où je souhaite délimiter par des lignes pleines un pavé Restaurant et un pavé pique-nique .
J'ai l'habitude de cliquer sur l'indicateur=> cela me sélectionne la colonne et j'ajoute des bordures à gauche et droite par exemple.

Mais ensuite je constate que ce format de départ ne se conserve pas. Et à certains moments, des bordures me sont rajoutées n'importe où ... cassant le format prédéfini...
Sûrement car je n'ai pas créé ces bordures à l'intérieur du TCD d'une façon correcte...

Comment faites vous svp pour délimiter certaines colonnes d'indicateurs ou de dimensions dans un TCD ?

Je vous remercie par avance pour vos conseils

Bonne soirée

Chrystel
 

Pièces jointes

  • Format TCD .xlsx
    21.1 KB · Affichages: 16
Solution
Je n'avais pas compris quelles étaient les bordures qu'il fallait.

Si l'on veut éviter leurs modifications le VBA est nécessaire, voyez ce fichier (2) :
VB:
Private Sub Worksheet_Calculate()
With Me.PivotTables(1).TableRange1
    .Borders.Weight = xlHairline
    .Columns(1).BorderAround Weight:=xlThin  'contour
    .Columns(1).Resize(, 3).BorderAround Weight:=xlThin   'contour
    .Columns(1).Resize(, 5).BorderAround Weight:=xlThin   'contour
End With
End Sub
Contrairement à ce que je faisais au post #2 la RAZ dessous est inutile.

job75

XLDnaute Barbatruc
Bonsoir Chrystel01,

Voyez le fichier joint et cette macro dans le code de la 2ème feuille :
VB:
Private Sub Worksheet_Calculate()
With Me.PivotTables(1).TableRange1
    .Borders.Weight = xlThin
    .Offset(.Rows.Count).Resize(Rows.Count - .Rows.Count - .Row + 1).Borders.LineStyle = xlNone 'RAZ dessous
End With
End Sub
 

Pièces jointes

  • Format TCD(1).xlsm
    25.8 KB · Affichages: 3

Chrystel01

XLDnaute Occasionnel
Bonjour,

Merci Job 75 pour votre réponse.

En fait, le format du tableau (colonne B à F) est correct et c'est celui que je souhaiterais toujours avoir, à savoir des bordures pleines pour séparer les pavés Pique-nique - Restaurant, et le reste en pointillé.

Mais je constate que ce format ne se conserve pas quand j'interviens sur le TCD (je n'ai pas encore compris quand et pourquoi : à l'actualisation, au changement de filtre ????) et des bordures pleines sont rajoutées là où elles ne sont pas souhaitées (ex je pourrai voir des bordures pleines ajoutées sur la colonne du champ EI (ex en colonne K : création de bordures pleines où j'avais des pointillés)

je suppose que je ne crée pas correctement mes bordures au départ mais je ne sais comment faire...
Et cela devrait pouvoir se faire sans VBA ?

Merci d'avance
 

job75

XLDnaute Barbatruc
Je n'avais pas compris quelles étaient les bordures qu'il fallait.

Si l'on veut éviter leurs modifications le VBA est nécessaire, voyez ce fichier (2) :
VB:
Private Sub Worksheet_Calculate()
With Me.PivotTables(1).TableRange1
    .Borders.Weight = xlHairline
    .Columns(1).BorderAround Weight:=xlThin  'contour
    .Columns(1).Resize(, 3).BorderAround Weight:=xlThin   'contour
    .Columns(1).Resize(, 5).BorderAround Weight:=xlThin   'contour
End With
End Sub
Contrairement à ce que je faisais au post #2 la RAZ dessous est inutile.
 

Pièces jointes

  • Format TCD(2).xlsm
    25.8 KB · Affichages: 8

Chrystel01

XLDnaute Occasionnel
Bonjour,

Merci beaucoup Job 75 ! C'est exactement ce que je cherchais, cela fonctionne parfaitement et sans appuyer sur un bouton de macro !

Quelle code faudrait-il mettre SVP pour conserver toutes les lignes (hors noms de champs et total général) avec des lignes fines comme dans le 1er tableau et éviter ainsi la destruction du format de départ (ex des lignes plus épaisses crées en colonne K).

Par ailleurs, j'essaye de comprendre la macro car elle m'est très importante et je vais la réadapter sur beaucoup d'autres fichiers. Donc je cherchais à voir les parties de code à changer en fonction de mes autres tableaux. Je regarde la doc microsoft car je débute en vba mais tout n'est pas si clair pour moi même si votre macro est très simple.

Private Sub Worksheet_Calculate()
=>évite le bouton de macro. Le filtre est assimilé à une action de calcul ?

With Me.PivotTables(1).TableRange1
=> Il faudra toujours inscrire le "me" après with ?
Et pourquoi le 1 après pivotTables ?
Table range1 permet de sélectionner le tableau des données hors nom de champs ?

.Borders.Weight = xlHairline
=> met le contour fin sur l'ensemble du tableau quand on ne précise pas de colonne ?

.Columns(1).BorderAround Weight:= xlThin 'contour
.Columns(1).Resize(, 3).BorderAround Weight:=xlThin 'contour
.Columns(1).Resize(, 5).BorderAround Weight:=xlThin 'contour
=> ces 3 lignes permettent de mettre des bordures plus épaisses en partant de la 1ère colonne déclarée par "Columns(1), d'où le (1) ajouté après "columns" ?

Merci encore pour votre aide très précieuse !

Bonne journée !
 

job75

XLDnaute Barbatruc
Bonjour Chrystel01, le forum,

Il y a beaucoup de questions, commençons par la première :
Quelle code faudrait-il mettre SVP pour conserver toutes les lignes (hors noms de champs et total général) avec des lignes fines comme dans le 1er tableau et éviter ainsi la destruction du format de départ (ex des lignes plus épaisses crées en colonne K).
Ce n'est pas clair, mettez les bordures que vous voulez sur le fichier (2) et déposez-le ici.

A+
 

Chrystel01

XLDnaute Occasionnel
Re-Bonjour,

En préparant le fichier, je réalise que votre macro fait déjà ce travail (je pensais que vous aviez géré les séparation des colonnes restaurant / pique uniquement mais vous êtes allés plus loin que ma demande) ! Merci beaucoup !!!

Et désolée pour toutes les questions....
Cette macro est extra et je voudrais êtes capacble de me débrouiller pour l'adapter sur touts mes fichiers.
Et pour cela, j'avais besoin de bien la comprendre. Elle est d'apparence simple mais j'apprends la programmation sur le tas et je n'ai jamais appliqué du VBA sur un TCD...

Encore merci pour votre aide :)
 

job75

XLDnaute Barbatruc
Private Sub Worksheet_Calculate()
=>évite le bouton de macro. Le filtre est assimilé à une action de calcul ?
Le filtre crée l'évènement Calculate, de même que la commande Actualiser tout du menu Données.
With Me.PivotTables(1).TableRange1
=> Il faudra toujours inscrire le "me" après with ?
Et pourquoi le 1 après pivotTables ?
Table range1 permet de sélectionner le tableau des données hors nom de champs ?
Comme la macro est dans le code de la feuille du TCD Me n'est pas indispensable mais il vaut mieux le mettre car en général il faut préciser la feuille où se trouve l'objet.

(1) indique le numéro de l'objet PivotTables car il pourrait y en avoir plusieurs dans la feuille, on pourrait remplacer 1 par le nom de l'objet entre guillemets.

Pour voir ce que représente TableRange1 ajoutez cette ligne de code :
VB:
MsgBox Me.PivotTables(1).TableRange1.Address
Pour les positions des bordures vous avez très bien compris.
 

Chrystel01

XLDnaute Occasionnel
J'ai pu ré-utiliser cette macro en la modifiant légèrement pour d'autres cas et cela fonctionne.
Vraiment merci !

J'ai un cas pour lequel j'ai en haut du TCD , une zone de filtre que je souhaite mettre en bordure pleine
ou ne pas mettre en pointillé avec la macro précédente car elle est incluse dans la zone considérée avec la fonction PivotTables(1).TableRange1.

Comment est il préférable de faire svp ?

Merci par avance
 

Pièces jointes

  • 1617797602949.png
    1617797602949.png
    2.8 KB · Affichages: 4

job75

XLDnaute Barbatruc
Pour que la plage B2:C3 soit mise en forme il suffit d'ajouter dans la macro :
VB:
With [B2:C3]
    .Interior.Color = vbYellow 'fond jaune, facultatif bien sûr
    .Borders.Weight = xlThin
    .HorizontalAlignment = xlLeft
End With
 

Pièces jointes

  • Format TCD(3).xlsm
    40.2 KB · Affichages: 4

Chrystel01

XLDnaute Occasionnel
Rebonjour Job75 et le forum,


J'aurais une question complémentaire s'il vous plait (je crée une nouvelle discussion si vous préférez)

Sur la feuille pour laquelle vous avez créé le code, j'ai également une macro qui se lance via un bouton et permet de faire des tris sur le nb de jours de resto, pique nique...

Cette macro devient très longue pour l'utilisateur du fait du code précédent intégré à la feuille (comme si le code de la feuille se répétait à chaque action réalisée).

Existe il un moyen de désactiver le code de la feuille que vous avez créé temporairement durant l'execution de la macro bouton qui fait ces tris ? (en intégrant par ex une ligne de code dans la macro de tri ?)

Ainsi le code intégré dans la feuille serait actif seulement lors des filtres réalisés en direct par l'utilisateur.

Je vous remercie pour votre aide.
 

Discussions similaires

Haut Bas