XL 2010 [RESOLU] Syntaxe Tableau Structuré (ListObject)

cathodique

XLDnaute Barbatruc
Bonjour,

Je trouve des difficultés de syntaxe à utiliser avec les tableaux structurés.
Je fais comme ci-dessous :
Je déclare mon tableau structuré
VB:
Dim Tb As ListObject '(variable globale)
Ensuite dans UserForm_Initialize()
Code:
Set Tb = ThisWorkbook.Feuil1.ListObjects("TbA")
Ensuite pour transférer les données dans le tableau structure
Code:
Private Sub btValider_Click()
Dim Lig As ListRow

Set Lig = Tb.ListRows.Add
Lig.Range.Cells(1).Value = TextBox1
Ect…

Au lieu de cells(1), je voudrais mettre l’entête de colonne qui est "NoDossier".
Car les colonnes pourraient être permutées.

Merci par avance.
 
Solution
Bonjour,
Sinon, une autre syntaxe
VB:
Dim Tb As ListObject '(variable globale)
Dim Lig As ListRow
Dim I As Long
Set Tb = Feuil1.ListObjects("Tba")
Set Lig = Tb.ListRows.Add: I = Lig.Index
Tb.ListColumns("NoDossier").DataBodyRange(I) = 1
Bonne journée

patricktoulon

XLDnaute Barbatruc
Bonjour,

Je trouve des difficultés de syntaxe à utiliser avec les tableaux structurés.
Je fais comme ci-dessous :
Je déclare mon tableau structuré
VB:
Dim Tb As ListObject '(variable globale)
Ensuite dans UserForm_Initialize()
Code:
Set Tb = ThisWorkbook.Feuil1.ListObjects("TbA")
Ensuite pour transférer les données dans le tableau structure
Code:
Private Sub btValider_Click()
Dim Lig As ListRow

Set Lig = Tb.ListRows.Add
Lig.Range.Cells(1).Value = TextBox1
Ect…

Au lieu de cells(1), je voudrais mettre l’entête de colonne qui est "NoDossier".
Car les colonnes pourraient être permutées.

Merci par avance.
franchement des fois il faut te suivre à toi ;)
tu veux
mettre la valeur de l’entête dans la nouvelle ligne en cell(1)
ou tu veux changer la valeur de l’entête
ou tu veux determiner la cell(x) par l'entête

exprimez vous correctement des fois c'est difficile de vous suivre
 

patricktoulon

XLDnaute Barbatruc
re
bon si c'est pour déterminer la colonne
je fait comme ça
je met 245 dans la nouvelle ligne en colonne "No_Dossier"
VB:
Sub test()
    Dim  tb As ListObject    '(variable globale)
    Set tb = ThisWorkbook.Sheets("Feuil1").ListObjects("TbA")
    tb.ListRows.Add
    With ThisWorkbook.Sheets("Feuil1").Range("tba[No_Dossier]"): .Cells(.Rows.Count) = 245: End With
End Sub
 

cathodique

XLDnaute Barbatruc
re
bon si c'est pour déterminer la colonne
je fait comme ça
je met 245 dans la nouvelle ligne en colonne "No_Dossier"
VB:
Sub test()
    Dim  tb As ListObject    '(variable globale)
    Set tb = ThisWorkbook.Sheets("Feuil1").ListObjects("TbA")
    tb.ListRows.Add
    With ThisWorkbook.Sheets("Feuil1").Range("tba[No_Dossier]"): .Cells(.Rows.Count) = 245: End With
End Sub
ReBonjour,

Désolé, j'ai pas mal de choses à regler, du coup je m'exprime mal.
Je n'ai encore testé ton code.
D'habitude je fais
Dim Lig As ListRow

Set Lig = Tb.ListRows.Add
Lig.Range.Cells(1).Value = TextBox1

Mais j'ai permuté des colonnes et là ça ne va plus.
Les données ne sont plus dans la bonne colonne.
Je sais qu'on peut utilisé le nom de la colonne (ou Entête pour moi c'est la même chose) mais je n'arrive pas à trouver la syntaxe correcte.

Est-ce plus clair ainsi.

Merci beaucoup.
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Sinon, une autre syntaxe
VB:
Dim Tb As ListObject '(variable globale)
Dim Lig As ListRow
Dim I As Long
Set Tb = Feuil1.ListObjects("Tba")
Set Lig = Tb.ListRows.Add: I = Lig.Index
Tb.ListColumns("NoDossier").DataBodyRange(I) = 1
Bonne journée
 

patricktoulon

XLDnaute Barbatruc
ReBonjour,

Désolé, j'ai pas mal de choses à regler, du coup je m'exprime mal.
Je n'ai encore testé ton code.
D'habitude je fais
Dim Lig As ListRow

Set Lig = Tb.ListRows.Add
Lig.Range.Cells(1).Value = TextBox1

Mais j'ai permuté des colonnes et là ça ne va plus.
Les données ne sont plus dans la bonne colonne.
Je sais qu'on peut utilisé le nom de la colonne (ou Entête pour moi c'est la même chose) mais je n'arrive pas à trouver la syntaxe correcte.

Est-ce plus clair ainsi.

Merci beaucoup.
Alors la réponse que je t'ai donné est un solution qui fonctionne
 

cathodique

XLDnaute Barbatruc
Oui, mais là dans ton code au final
Set tb = ThisWorkbook.Sheets("Feuil1").ListObjects("TbA") ne sert que pour ajouter une ligne au tableau
plus que bas tu repars avec
With ThisWorkbook.Sheets("Feuil1").Range("tba[No_Dossier]")

Ne peut-on pas utiliser tb?
 

cathodique

XLDnaute Barbatruc
Bonjour,
Sinon, une autre syntaxe
VB:
Dim Tb As ListObject '(variable globale)
Dim Lig As ListRow
Dim I As Long
Set Tb = Feuil1.ListObjects("Tba")
Set Lig = Tb.ListRows.Add: I = Lig.Index
Tb.ListColumns("NoDossier").DataBodyRange(I) = 1
Bonne journée
Bonjour @Cousinhub ;),

Je remercie ta solution répond bien à question. Je voulais utiliser le nom de la colonne et non son index.

Encore merci.

Bonne journée.
 

patricktoulon

XLDnaute Barbatruc
re
je pige pas ta réponse #7
de plus si tb ne sert a rien d'autre je vois pas pourquoi le variabiliser
de plus si tu t'amuse a permuter les colonnes ça veux dire que les autres colonnes aussi ou au moins une autre

bref bien mal pensé tout ça à mon avis
j'attends la suite ;)
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour @Cousinhub
non je ne l'ai pa lu celui là perso je me réfère à celui de pierre fauconnier sur DVPet d'un autre membre pour la manipulation par VBA
mais mon questionnement ne vient pas de là

perso
entre ça

VB:
Set Lig = Tb.ListRows.Add: I = Lig.Index
Tb.ListColumns("NoDossier").DataBodyRange(I) = 1
et
ça par exemple
set lig=tb.ListRows.Add:i=lig.index
ThisWorkbook.Sheets("Feuil1").Range("tba[No_Dossier]"): .Cells(i) = 245


perso je me suis rendu compte que les abréviations quand on travaillait sur plusieurs classeur donnaient une erreur si classeur actif n'était pas le bon pourtant je suis le premier adepte de l'evaluate abrégée "[...]"

et pour info chez moi par exemple
ThisWorkbook.Feuil1.Range("tba"))......
plante
autrement le membre attendu de thisworkbook(la feuille) sur 2013 ne peut être exprimé par le codename

juste en passant tutoriel pour tutoriel
thev aurais pu ajouter ceci aussi
'// ajout d'une ligne a un endroit précis exemple en ligne 3
'// la ligne qui avait l'index 3 devient la 4 etc....

Set ligne = TS.ListRows.Add 3: i = ligne.Index
 

Statistiques des forums

Discussions
312 243
Messages
2 086 549
Membres
103 244
dernier inscrit
lavitzdecreu