Microsoft 365 indice colonne Tableau structuré

eric72

XLDnaute Accro
Bonsoir à tous,
Je me demandais si plutôt que mettre
Cells(derligne, 1) = textbox.Value
avec un tableau structuré bien sur, il n'était pas possible de coder comme ça???
Cells(derligne, Range("tableau[colonne1]")) = textbox.Value (j'ai bien vu que ca ne marchait pas mais il y a peut être une autre solution!!!)
Merci à tous.
Eric
 
Solution
Re,

Range("Tableau1[Colonne1]") ou comme l'a dit @Dranreb ListObjects("Tableau").ListColumns("Colonne1").Range

Vous faites référence à votre colonne de tableau (toutes ses cellules).
Après ça se manipule comme n'importe quel objet Range.

Cordialement

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Avec : Range("tableau1[colonne1]")(2)="toto"

où colonne1 est le nom de la colonne de tableau1
la cellule sur la ligne 2 des données de la colonne du tableau aura pour valeur "toto"

Range("tableau1[colonne1]")
Renvoie un objet range normal comme Range("B2:B100")
Vous pouvez donc indicer comme vous voulez.

cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Voyez l'aide sur l'objet cells et l'objet Range.
Vous verrez que le deuxième paramètre de cells attend un numéro de colonne pas un objet range !

Cells(derLigne, Range("Tableau1[Colonne1]").Column)
Vous donnera la cellule de la ligne 'derLigne' de la colonne 'Colonne1' de la feuille

Si derligne = 100 et que Range("Tableau1[Colonne1]").Column =2 vous aurez B100

Cells sans autre objet range parent représente le tableau de toutes les cellules de la feuille, pas celles du tableau.

Range("Tableau1[Colonne1]") vous donne la plage de cellules des données (sans l'entête) de la colonne 'colonne1' du tableau

"Tableau1[Colonne1]" n'est ici qu'un nom de plage comme un autre.

Dernière cellule de 'Tableau1[Colonne1]' :

Range("Tableau1[Colonne1]").Cells(Range("Tableau1[Colonne1]").Cells.Count):rolleyes:
Ce qui est un peu tarabiscoté, non ?

Le paraît moins avec With
With Range("Tableau1[Colonne1]")
.Cells(.Rows.Count) = Valeur
End With

Ce qui revient à par rapport au tableau
NbLignes = Range("Tableau1[Colonne1]").Cells.Count
Range("Tableau1[Colonne1]").Cells(NbLignes)

Ou par rapport à la feuille :
ligne = Range("Tableau1[Colonne1]").Row + Range("Tableau1[Colonne1]").Rows.Count - 1
colonne = Range("Tableau1[Colonne1]").Column
Cells(ligne, colonne) = Valeur

Bon j'espère que vous vous êtes noyé dans tout ceci 🙂 Non ?

Et pour faire Bref : n'essayez pas de manger votre omelette avec un marteau, ça passe mal :)

cordialement
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Ce qui correspond à l'énoncé de la discussion c'est ListObjects("Tableau").ListColumns("Colonne1").Index
Mais je l'utilise assez peu, et pas lors de l'écriture dans une cellule individuelle du tableau, ce que je ne fais jamais. Je prépare plutot toutes les données dans un tableau dynamique d'une ligne que je balance à la fin vers une ListRow(N).Range.Value ou une ListRows.Add.Range.Value.
 

eric72

XLDnaute Accro
Bonjour,
Merci à vous deux, et bien oui en effet je suis complètement noyé!!!
moi je voulais juste écrire autrement cela
Cells(derligne, Range("tableau[colonne1]")) = textbox.Value
afin que quand j'insere une colonne dans ma feuille ou j'ai tous mes tableaux de Données cela ne remette pas tout en cause. En fait faire référence à la colonne du tableau plutôt que la colonne de la feuille.
Merci encore
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Range("Tableau1[Colonne1]") ou comme l'a dit @Dranreb ListObjects("Tableau").ListColumns("Colonne1").Range

Vous faites référence à votre colonne de tableau (toutes ses cellules).
Après ça se manipule comme n'importe quel objet Range.

Cordialement
 

patricktoulon

XLDnaute Barbatruc
bonjour
perso je ne concoit pas un tableau structuré ou la dernière ligne est vide
c'est impensable et surtout inutile à moins qu'elle vienne d’être ajoutée juste avant

il est vrai qu'un débutant en perdrait les pédales
en effet le membre "Range" peut être enfant du tableau(listobject)
mais le membre "listobject" peut être une des propriété du range (du même nom)

c'est assez rigolo cette histoire🤣

cela dit pour un ajout de ligne (car c'est tel que se conçoit un tableau structuré il ne contient pas de derniere ligne vide c'est absurde )
on ajoute un listrow(une ligne) par la la fonction "add" sur le membre " listrows" enfant du listobject

pour atteindre cette ligne en revanche on peut l'atteindre par son membre range ou listrows (le.count ou l'index)
bref vous l'avez compris
dans une même fonction ou sub on pourrait avoir besoins des deux modes

je fait une petite demo
VB:
Sub test1()
'si on ajoute une ligne
    With Range("Tableau1").ListObject
        Set ligne = .ListRows.Add.Range
        MsgBox ligne.Address    'on obtient bien l'adress du range de cette ligne

        'exemple on rempli la nouvelle ligne complete
        MsgBox "on met l'array dans la ligne "
        ligne.Value = Array("toto", "titi", "riri", "fifi")

        'exemple 2 on rempli la cellule de la colonne "colonne1"sur cette nouvelle ligne
        MsgBox "on met ""azerty"" dans la cellule en colonne ""Colonne1"" du tableau"
        With Range(.Name & "[colonne1]")    'on y ré accede par l'object range pour chopper la colonne1 et sa derniere cellule
            .Cells(.Cells.Count) = "azerty"
        End With
    End With
End Sub

'si on veut remplir la derniere ligne existante
Sub test2()
'si on ajoute une ligne
    With Range("Tableau1").ListObject
        Set ligne = .ListRows(.ListRows.Count).Range
        MsgBox ligne.Address    'on obtient bien l'adress du range de cette ligne

        'exemple on rempli la ligne complete
        MsgBox "on met l'array dans la ligne "
        ligne.Value = Array("toto", "titi", "riri", "fifi")

        'exemple 2 on rempli la cellule de la colonne "colonne1"
        MsgBox "on met ""taratata"" dans la cellule en colonne ""Colonne1"" du tableau"
        With Range(.Name & "[colonne1]")    'on y ré accede par l'object range pour chopper la colonne1 et sa derniere cellule
            .Cells(.Cells.Count) = "tartata"
        End With
    End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T