XL 2013 Reprise d'une colonne dans un TCD

Yvan1

XLDnaute Occasionnel
Bonjour à tous,
J'utilise un TCD pour calculer des budgets d'achat, et un paramètre de calcul varie en fonction du contenu de la colonne MARQUE (utilisation de champs calculés).
Je souhaiterai donc créer une colonne (ex : en H) qui reprenne le nom de la marque, le calcul se faisant en fonction.
Car si je prends la valeur de la colonne A, je retrouve bien la marque en A2, A37, A174 ou A257 , par contre je perds cette données sur les autres lignes
Et évidemment, je ne sais pas comment faire...
Quelqu'un a-t-il une idée ?
Merci d'avance de votre investissement.
Yvan
 

Pièces jointes

  • Test2.xlsx
    71.1 KB · Affichages: 10

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous, bonjour @Yvan1 ,@chris , @JHA

Avec ce que j'ai compris : rajouter une colonne reprenant les marques à coté du TCD.

J'ai converti les données en Tableau Structuré que j'ai nomme "tb_BdD", j'ai également nommé le TCD "TCD_Ventes"

J'y accole un tableau structuré à 1 seule colonne ("Tb_Rappel") avec la formule
VB:
=SI(ESTNUM(EQUIV($A2;tb_BdD[Marque];0));$A2;H1)
Cette formule s'adapte au modifications du TCD avec le code ci-dessous.

J'ai créé un format conditionnel pour agrémenter le TS, et un style pour le TCD ...

Pour suivre les mises à jour du TCD je gère l'événement Worksheet_PivotTableUpdate :
VB:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    
     If Target.Name <> "TCD_Vente" Then Exit Sub 'Sortir si ce n'est pas le TCD qui nous intéresse
    
     Dim NbLgn As Long, Lgns As Long, R As Long, C1%, nbC%, adr1$, adr2$
    
     With Target
          R1 = .DataBodyRange.Row                                          'Première ligne de données du TCD
          NbLgn = .DataBodyRange.Rows.Count - IIf(Target.RowGrand, 1, 0)   'Nombre de lignes de données (hors ligne total général)
          C1 = Target.TableRange1.Column                                   'Première colonne du TCD
          nbC = Target.TableRange1.Columns.Count                           'Nbre de colonnes du TCD
     End With
    
     'Vidage et redimensionnement du TS
     With [Tb_Rappel]
          .Clear                                                                          'Effacement données et formats
          .ListObject.Resize .ListObject.Range.Resize(NbLgn + 1)                          'Redimensionnement du TS
          .ListObject.Range.Cut Destination:=Me.Cells(R1 - 1, C1 + nbC).Resize(NbLgn + 1) 'Repositionnement du TS si modifs dans le TS
     End With
    
     'Formule et alignement du texte dans le TS ([Tb_Rappel] a changé
     With [Tb_Rappel]
          .ListObject.DataBodyRange.FormulaR1C1 = "=IF(ISNUMBER(MATCH(RC" & C1 & ",tb_BdD[Marque],0)),RC" & C1 & ",R[-1]C)"
          .HorizontalAlignment = xlLeft
          .VerticalAlignment = xlCenter
          .WrapText = False
          .IndentLevel = 1
     End With
    
     'Ajout du format conditionnel
     adr1 = Me.Cells(R1, C1).Address(RowAbsolute:=False)              'Adresse utilisé dans la formule de la MFC
     adr2 = [Tb_Rappel].Cells(1).Address(RowAbsolute:=False)          'Adresse utilisé dans la formule de la MFC
     [Tb_Rappel].Cells(1).Activate                                    'Activation de la 1ère cellule du TS
     'MFC : rehaussement des lignes total de la marque
     With [Tb_Rappel].FormatConditions.Add(Type:=xlExpression, Formula1:="=(" & adr1 & "<>"""")*(" & adr2 & "=" & adr1 & ")")
          .Font.Bold = True
          .Interior.Color = 16247773
     End With

End Sub

En espérant que cela convienne, voir le fichier joint
À bientôt
 

Pièces jointes

  • Reprise d'une colonne dans un TCD - AtTheOne.xlsm
    85.2 KB · Affichages: 4

Statistiques des forums

Discussions
314 704
Messages
2 112 063
Membres
111 410
dernier inscrit
yomeiome