XL 2010 [RESOLU]Numero colonne entete tableau structuré

cp4

XLDnaute Barbatruc
Bonjour:),

J'ai ce type de tableau structuré, je voudrais mettre dans une variable le numéro de colonne des entêtes.
Afin de pouvoir le réutiliser dans une procédure car le tableau pourrait évoluer (ajout de colonnes à l'intérieur du tableau).
1589732164385.png


En vous remerciant par avance.

ps: initialement, il n'y avait pas de colonne Monnaie

Bonne soirée à vous.

Edit: Je me suis noyé dans un verre d'eau. Finalement, j'ai trouvé
VB:
Range("tableau1" & "[crédit]").Column
 
Dernière édition:
Solution
Comme tu remplaçais nbCol je pensais que c'était la ligne NbCol = [Tableau1].Columns.Count qui plantait.

Par ailleurs quelle différence fais-tu entre ces 2 lignes :
Code:
'                  Col = Intersect(.HeaderRowRange, Target.EntireColumn).Value
         Col = Intersect(Target.EntireColumn, .HeaderRowRange)
???
Si ce n'est que tu inverses, et enleves le .Value qui donne explicitement la propriété voulue.
Celle d'origine fonctionne et ôte toute ambiguïté...

Ma proposition faisait 3 lignes :
VB:
    With ActiveWorkbook.Worksheets("Feuil1").ListObjects(1)
        Debug.Print Intersect(.HeaderRowRange, ActiveCell.EntireColumn).Value
    End With
Et oui, il faut la compléter en t'assurant être dans le tableau.
Je ferais...

laurent950

XLDnaute Accro
Bonjour cp4, Patricktoulon
Qu'entends-tu par utiliser ListObject pour tout sauf l'écriture !
* Pour l'écriture je ne sais pas pourquoi ?

VB:
Sub tableSheetForEach()
    Dim sh As Worksheet
        Set sh = ThisWorkbook.Worksheets("Feuil1")
    ' Pour 1 Tableau structuré sur une Feuille Excel/
        Dim TabTyp As ListObjects
            Set TabTyp = sh.ListObjects
                MsgBox TabTyp.Count & " Nb de tableaux structurer sur la Feuille"
        Dim Tableau1 As ListObject
            Set Tableau1 = TabTyp.Item("Tableau1")
                Tableau1.Range.Select
                MsgBox Tableau1.Range.Address & " Adresse"
            MsgBox Tableau1.Name
                MsgBox Tableau1.ListColumns.Count & " Colonnes"
                MsgBox Tableau1.ListRows.Count & " Lignes"
            MsgBox Tableau1.Range(1, 3) & " En-tête = Credit"
                MsgBox Tableau1.HeaderRowRange(3) & " En-tête = Credit"
                Tableau1.Range.Rows(1).Select
                Tableau1.Range.Rows(2).Select
                Tableau1.Range.Rows(3).Select
                Tableau1.Range(1, 3).Select
            ' Ecriture
             '.................
                               Tex = Tableau1.Range(1, 3).Value
                               Tableau1.Range(1, 3).Value = "ToTo"
                               Tableau1.Range(1, 3).Value = Tex
End sub
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour cp4, Patricktoulon
Qu'entends-tu par utiliser ListObject pour tout sauf l'écriture !
* Pour l'écriture je ne sais pas pourquoi ?

VB:
Sub tableSheetForEach()
    Dim sh As Worksheet
        Set sh = ThisWorkbook.Worksheets("Feuil1")
    ' Pour 1 Tableau structuré sur une Feuille Excel/
        Dim TabTyp As ListObjects
            Set TabTyp = sh.ListObjects
                MsgBox TabTyp.Count & " Nb de tableaux structurer sur la Feuille"
        Dim Tableau1 As ListObject
            Set Tableau1 = TabTyp.Item("Tableau1")
                Tableau1.Range.Select
                MsgBox Tableau1.Range.Address & " Adresse"
            MsgBox Tableau1.Name
                MsgBox Tableau1.ListColumns.Count & " Colonnes"
                MsgBox Tableau1.ListRows.Count & " Lignes"
            MsgBox Tableau1.Range(1, 3) & " En-tête = Credit"
                MsgBox Tableau1.HeaderRowRange(3) & " En-tête = Credit"
                Tableau1.Range.Rows(1).Select
                Tableau1.Range.Rows(2).Select
                Tableau1.Range.Rows(3).Select
                Tableau1.Range(1, 3).Select
            ' Ecriture
             '.................
                               Tex = Tableau1.Range(1, 3).Value
                               Tableau1.Range(1, 3).Value = "ToTo"
                               Tableau1.Range(1, 3).Value = Tex
End sub
Bonjour Laurent950,

Comment te remercier? Tu en as déjà fait beaucoup.

1000 mercis.

Bonne journée
 

patricktoulon

XLDnaute Barbatruc
re
attention index donne l'index de la colonne par rapport au tableau et non au sheets
la encore tout dépend comment on veux travailler dans le tableau avec range ou listobject
une petite demo
VB:
Sub test()
    Dim colIndex&, ColSheet_Column&
    With ActiveSheet.ListObjects("tableau1")
        colIndex = .ListColumns("Credit").Index
        ColSheet_Column = Range("Tableau1[credit]").Column
        Message = "index de la colonne ""credit"" du tableau = " & colIndex & vbCrLf
        Message = Message & "address de la colonne ""credit"" du tableau = " & ColSheet_Column
    End With
    MsgBox Message
End Sub


;)
 

cp4

XLDnaute Barbatruc
Bonjour cp4
Bonjour le Fil ,le Forum
Une autre possibilité de récupérer le Numéro de la Colonne "Credit"
VB:
ColC = .ListColumns("Credit").Index
Jean marie
Bonjour Jean Marie,

Merci pour ta proposition. J'ai fait comme ceci mais erreur: l'indice n'appartient pas à la selection
VB:
MsgBox ActiveSheet.ListObjects("tableau1").ListColumns("Credit").Index

Bonne journée.
 

cp4

XLDnaute Barbatruc
re
attention index donne l'index de la colonne par rapport au tableau et non au sheets
la encore tout dépend comment on veux travailler dans le tableau avec range ou listobject
une petite demo
VB:
Sub test()
    Dim colIndex&, ColSheet_Column&
    With ActiveSheet.ListObjects("tableau1")
        colIndex = .ListColumns("Credit").Index
        ColSheet_Column = Range("Tableau1[credit]").Column
        Message = "index de la colonne ""credit"" du tableau = " & colIndex & vbCrLf
        Message = Message & "address de la colonne ""credit"" du tableau = " & ColSheet_Column
    End With
    MsgBox Message
End Sub


;)
Bonjour Patrick,

Merci beaucoup. Mais erreurs:
1589870860721.png

Code:
Sub test()
    Dim colIndex&, ColSheet_Column&
    With ActiveSheet.ListObjects("tableau1")
        colIndex = .ListColumns("Credit").Index 'indice n'appartient pas à la selection
        ColSheet_Column = Range("Tableau1[credit]").Column 'la méthode range de l'objet global a échouée
        Message = "index de la colonne ""credit"" du tableau = " & colIndex & vbCrLf
        Message = Message & "address de la colonne ""credit"" du tableau = " & ColSheet_Column
    End With
    MsgBox Message
End Sub

Bonne journée.
 

patricktoulon

XLDnaute Barbatruc
une toute petite en passant
savoir à quel tableau peut appartenir une cellule
VB:
Sub test2()
MsgBox [F5].ListObject.Name
End Sub
et on gere l'erreur si elle n'est pas dans un tableau

VB:
Sub test2()
Set montableau = [F10].ListObject
If Not montableau Is Nothing Then MsgBox montableau.Name Else MsgBox "cette cellule n'appartient pas a un tableau"
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
et 2 autres
tester si la colonne "credit " existe DANS Tableau1
AVEC RANGE

VB:
Sub test3() 'avec range
Set macolonne = Range("Tableau1[credit]")
If Not macolonne Is Nothing Then MsgBox macolonne.Address Else MsgBox "il n'y a pas de colonne credit dans tableau1"
End Sub

AVEC LISTOBJECT
VB:
Sub test4() 'avec listobject
Set macolonne = ActiveSheet.ListObjects("tableau1").ListColumns("Credit")
If Not macolonne Is Nothing Then MsgBox macolonne.Range.Address Else MsgBox "il n'y a pas de colonne credit dans tableau1"
End Sub
 

patricktoulon

XLDnaute Barbatruc
allez encore une
tu n'a pas la colonne credit ?
ben que cela te tienne on l'ajoute en 2 position
VB:
Sub insérer_une_colonne_credit()
    Set macolonne = ActiveSheet.ListObjects("tableau1").ListColumns.Add(2)
   macolonne.Range(1) = "credit"
End Sub
pour ajouter en dernier tu met pas d'index (listcolumns.add) tout court
;)
 

Discussions similaires

Statistiques des forums

Discussions
312 100
Messages
2 085 294
Membres
102 854
dernier inscrit
ADRIENVR