Adress et Tableau structuré

Bonjour à tous!

je me repermets de demander votre aide efficace :)

Voilà, j'ai un tableau structuré et dedans j'ai des checkbox qui sont liée à la cellule sur laquelle elles sont.

l'idée est qu'en fait le click de cette checkbox fasse appel a une procédure, qui elle va se charger de mettre à jour une autre cellule( dont le nom de la colonne est Action) dans un autre tableau d'une autre feuille.

tout fonctionnait jusqu'à ce que je "m'amuse" à modifier l'ordre des colonnes(en faisant des glissement via la souris) de mon tableau qui possède les CheckBox.

la seule chose qui relie les 2 tableaux, sont le titre de la colonne (le titre de la colonne où je coche une checkbox, correspond à une ligne du tableau de l'autre feuille.

je me suis donc penché sur la linkedCell. Comme ça je peux déplacer ma colonne c'est pas grave, j'ai ma linkedCell, et à partir d'elle je pensais pouvoir récupérer le titre de la colonne dans laquelle elle est... mais j'y arrive pas.

je bloque car j'obtient une adresse sous la forme "$K$5" et je vois pas comment récupérer le titre de la colonne du tableau qui la contient.

petite précision, je veux pouvoir également déplacer le tableau...

image image

En vous remerciant !!!!!

Bonjour,

Boujour,

voilà, donc là en gros si vous coché une case de l'onglet fonctionnalité, ca doit pouvoir mettre la ligne correspondant au profil de la colonne "Action de l'autre tableau à "Mettre à jour"

12exemple.xlsx (20.47 Ko)

Je me permets de relancer le sujet :)

Bonjour,

Un peu confus !
Un début de réponse de ce que je comprends.
J'ai supprimé les case à cocher par une validation par double-clic.
Cdlt.

10exemple.xlsm (20.83 Ko)
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim lo As ListObject, lo2 As ListObject, lCol As Long, lRow As Long, arr(1), r As Range
    If Not Target.ListObject Is Nothing Then
        Cancel = True
        Set lo = Range("t_fonctionnalités").ListObject
        If Not Intersect(Target, lo.DataBodyRange) Is Nothing Then
            lCol = Target.Column - lo.HeaderRowRange.Column + 1
            lRow = Target.Row - lo.HeaderRowRange.Row
            Select Case lCol
            Case 1:
            Case Else: Target.Value = IIf(IsEmpty(Target), "ü", "")
            End Select
            If Not IsEmpty(Target) Then
                arr(0) = lo.DataBodyRange.Cells(lRow, 1)
                arr(1) = lo.HeaderRowRange(lCol)
                Set lo2 = Worksheets("Profils").Range("t_profils").ListObject
                With lo2
                    If .InsertRowRange Is Nothing Then
                        Set r = .HeaderRowRange.Cells(2).Offset(.ListRows.Count + 1)
                    Else
                        Set r = .InsertRowRange.Cells(2)
                    End If
                End With
                r.Resize(, 2).Value = arr
            End If
        End If
    End If
End Sub

Bonjour,

merci pour ce début d'élément de réponse, mais cela ne correspond pas vraiment à mon besoin. dans votre cas, un double clique ajoutera une ligne dans le tableau de l'autre onglet.

je ne veux pas que cela ajoute une nouvelle ligne, je désire que si un changement (donc dans votre cas un double clique) a été réalisée dans une colonne du tableau t_fonctionnalité, la valeur de la colonne "Action" de la ligne correspondante dans l'autre tableau soit mise à "Mettre à jour".

La ligne existera forcément, il faut "juste" la retrouver

Je me permets de faire remonter ce sujet :)

Merci pour votre aide par avance.

Bonjour Sebien0077,

Voici un exemple de ce que l'on peut faire

Comme chaque CheckBox sont nommées comme il faut (le numéro de profil en premier)

Dans le code, je récupère numéro de début dans le texte de la CheckBox qui a appelé la macro (j'ai lié tous les contrôles au même code)
Je recherche le numéro de profil dans la feuille "Profils" et je modifie la cellule de la colonne A

@+

Merci beaucoup, c'est une solution. mais hélas... mes profils n'auront pas ce genre de nom. ceci dit , je vais voir si je peux pas qd même faire un truc similaire !

en tout cas merci pour votre aide, je vous tiens informé.

je pense que je vais virer mes checkbox, car qd on en a bcp, ca fait comme un petit lag.. alors qu'avec la police spéciale c'est instantanée à voir aussi si j'arrive donc à faire mon mixe :)

Bonsoir,

en reprenant la demande première du sujet, cette ligne en MSGBOX vous donne l'intitulé de la colonne où le clic sur la boite à cocher a été fait et ce quel que soit la position du tableau ou de la colonne dans ce tableau :

MsgBox Cells(ActiveSheet.Range("t_fonctionnalités").Row - 1, ActiveSheet.Shapes(Application.Caller).TopLeftCell.Column).Value

Il faut que cette instruction soit dans votre code "appelé" par les boites à cocher et la valeur trouvée remplacera celle que vous aviez mais avec des calculs "en dur", ici la position est déterminée par des "choses" variables : la ligne d'entête est la ligne -1 de la première ligne du tableau, et la colonne est déterminée en regardant la colonne de la cellule en "intersection" avec la forme "case à cocher" (TopLefCell), et pour cela j'utilise Application.Caller pour connaître le shape utilisé lors du clic.
Ensuite, une fois le nom de l'entête de la colonne connu votre code d'origine vous permettra de mettre à jour la valeur voulue dans l'autre tableau.

@ bientôt

LouReeD

Bonjour,

je clos le sujet, j'ai réussi a faire ce qu'il fallait en virant les checkbox en plus !

Un grand merci à vous tous.

Rechercher des sujets similaires à "adress tableau structure"