Tableau structuré: Modifier le titre d'une colonne par variable externe

Bonjour !
Est-ce possible de modifier (dynamiquement) le titre d'une colonne d'un tableau structuré selon une variable contenu dans une cellule externe ?
Exemple:
Soit T_Commande un tableau structuré.
Ses Colonnes étant: Article; PrixUnitaire; Quantité; Taxe n%; Total.

Je souhaite pouvoir modifier le nom de la colonne "Taxe n%" juste en modifiant la valeur de n à partir d'une autre cellule en dehors du tableau T_Commande.

Je galère depuis. Alors, merci de bien vouloir me donner un coup de main si possible.

Bonjour,

Par formule ce n'est pas possible mais par VBA avec une procédure événementielle probablement. Merci de détailler le contexte du changement, le résultat attendu et de joindre un fichier représentatif.

Cdlt,

Bonjour,

Est-ce possible de modifier (dynamiquement) le titre d'une colonne d'un tableau structuré selon une variable contenu dans une cellule externe ?

Dynamiquement non. Une fois le titre modifié, cela est définitif, à moins de le modifier une seconde fois pour remettre sa valeur initiale. Rappelons que le titre d'une colonne d'un tableau structuré est toujours une constante (pas de formule possible).

Merci pour vos réponses.

Voici qui pourrait constituer un défi de MAJ pour les futures versions d'Excel.

Cela dit, la piste VBA suggéré par Ergotamine pourrait être une solution.
Malheureusement, le service de téléchargement n'est pas disponible de chez moi.

Pouvez-vous me proposer un traitement par VBA ?

Bonjour à tous,

Un exemple fait à la va vite afin que vous l'adaptiez à votre cas :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect([J1], Target) Is Nothing Then [D1] = "Taxe " & Target & "%"
End Sub

Et le fichier qui va avec.

Cdlt,

31classeur1.xlsm (14.87 Ko)

Wôw ! Impécable !
Ergotamine, ton code est tout simplement efficace. C'est exactement le traitement qu'il me faut.

Merci infiniment pour ton aide.

Je galère encore sur la modification du titre de mon tableau réel.
Étant donné que ce soit juste la fin de la colonne "Taxe ~" qui est changée à chaque fois, j'ai entrepris de créer une fonction qui trouverait la colonne à partir du préfixe Taxe puis en modifierait le nom avec le nouveau nom newName construit. Voici le code :

Côté feuille, j'ai écrit :

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim t As Boolean
    Application.ScreenUpdating = False
    t = RenomerColonne("Taxe ", "Taxe " & Range("taxe") & "%")
    Application.ScreenUpdating = True
    If t Then msgBox("Un titre du tableau a été modifié")
    EndIf
End Sub

Et côté module, j'ai mis ce code :

Public Function RenomerColonne(TitreColonne as string, newName as string) As Boolean
    Dim Cellule As Range
    RenomerColonne = False
    With ActiveSheet.ListObjects(1)
        For Each Cellule In .HeaderRowRange
            If InStr(Cellule.Value, TitreColonne) Then
                Cellule.Value = "" & newName
                RenomerColonne = True
            End If
        Next
    End With

End Function

Cela fait, Excel plante à chaque modification de la Catégorie liée au tableau.

NB : Malheureusement, je n'arrive pas à uploader mon fichier sur le forum. Peut-être un épisode manqué de la charte du forum...

Bonjour,

Pourquoi avoir complexifié autant le code ? Qu'est ce qui n'allait pas dans le mien ? Merci de décrire au maximum en l'absence de fichier.

Cdlt,

Pourquoi avoir complexifié autant le code ?

Parce qu'en réalité je modifie deux voir plus d'entêtes que dans l'exemple.

Qu'est ce qui n'allait pas dans le mien ?

Seul un titre de colonne était modifié.

C'est vrai. Je ne l'avais pas signifié au départ. Mais, en réalité je souhaite modifier plusieurs autres titres avec un seul appel de la procédure Worksheet_Change.
Une proposition ?

Merci

Bonjour,

C'est possible mais il faut plus de précisions :
- L'évènement déclencheur ne se fait que depuis une seule cellule qui se reporte dans plusieurs en tête ?
- Où sont placées vos cellules déclencheur ?
- Dans quelles références d'en tête elles se reportent ?
- Sous quel forme textuelle ?

Par avance merci. Il est nécessaire d'avoir un maximum de détail en l'absence de fichier pour coller au plus proche du besoin.

Cdlt,

Ok voici ma feuille de calcul

Tableau des Taxes
CatégorieTaxe
A5
B18
C20
Taxe ApplicableB
DésignationPrixUnintaireQuantitéTaxe B%Total
Orange12000182360
Banane260001814160
Pomme13000183540
Total20060

Explications :

- Tableau des Taxes : A2:B5

- Tableau-structuré : A8:E12 ( c'est ce tableau qui aura ses entêtes Désignation et Taxe B% modifiées selon la valeur prise par le déclencheur )

- Le déclencheur pour la modification des entêtes est placé en B7 et ces valeurs possibles sont A, B ou C

- L'évènement déclencheur ne se fait que depuis une seule cellule qui se reporte dans plusieurs en tête ?

Oui depuis une seule cellule. Exactement comme vous l'aviez fait avec votre 1er fichier.

- Dans quelles références d'entête elles se reportent ?

Les modifications se rapportent aux entêtes "Désignation" et "Taxe n%" de sorte que si l'on change la valeur du déclencheur (ex: A) alors, les deux entêtes seront modifiés en "Désignation A" et "Taxe 5%".

Ne vous inquiétez pas du changement des valeurs à l'intérieur du tableau. J'y ai mis un petit RechercheV() qui se charge de récupérer la bonne valeur de Taxe dans le Tableau des Taxes.

Espérant avoir été plus clair, merci par avance.

Bonjour,

Si j'ai bien compris :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect([B7], Target) Is Nothing Then
    [A8] = Target 'A8 devient la valeur de B7
    [D8] = "Taxe " & Application.WorksheetFunction.VLookup(Target, [A2:B4], 2, False) & "%" 'D8 devient la valeur du RECHERCHEV(B7; A2:B4, 2, FAUX)
End If
End Sub

Avec le fichier joint.

Je suppose que vous avez une liste de validation en B7 (sinon autant inscrire manuellement la valeur en A8) donc je n'ai pas géré le cas où la valeur de B7 n'est pas trouvée dans la plage A2:A4.

Cdlt,

Impéccable !
Merci.

Cependant,

J'aurai bien aimé avoir un code passepartout. Car, si l'on déplace accidentellement/intentionnellement la position d'un/tout tableau alors le code ne fonctionnerait plus.
C'était l'idée de la complexification que j'ai initié quelques posts plus hauts.

Les références [A8] et [D8] ... étant des plages d'un tableau connu, VBA pourrait les identifier d'une manière unilatérale non ?
Mes plages sont nommées et parfaitement opérationnelles de ce point de vue. Ce serait franchement cool de les utiliser côté VBA.

Bonjour,

C'est aussi possible en effet :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Application.Intersect(Range("REF"), Target) Is Nothing Then
    ListObjects("Tableau2").ListColumns(1).Name = Target
    ListObjects("Tableau2").ListColumns(4).Name = "Taxe " & Application.WorksheetFunction.VLookup(Target, ListObjects("Tableau1").DataBodyRange, 2, False) & "%"
End If
End Sub

Ici je me base sur le nom de la table (ListObjects"Nom de la table") et sur l'index de la colonne au sein de la table (ListColumns(X)) ainsi que sut une plage nommée REF qui contient la valeur à modifier. Donc vous pouvez déplacer vos tableau, la REF etc ... Du moment que vous conservez les noms de tableaux et la structure de ces derniers (je ne peux me baser sur leur nom comme ils changent) ça fonctionnera.

En espérant que cela vous convienne.

Cdlt,

Parfait ! Parfait ! Parfait !

Sujet Résolu !

Merci infiniment chère Ergotamine pour votre aide experte.
A+

Edit: la plage nommée REF a été omise dans votre fichier joint. J'ai dû l'ajouter.

Rechercher des sujets similaires à "tableau structure modifier titre colonne variable externe"