Bonjour,

Ceci étant ma première interaction sur ce forum, je tiens d'abord à remercier tous et chacun puisque ce site m'apprend et m'apporte une quantité phénoménale de connaissances et de réponses à mes questions et problèmes.
Je reste malgré tout débutant sur VBA mais je vais tenter de m'expliquer au mieux.

Mon questionnement est donc (j'ai résumé mon exemple, mon chiffrier est bien plus complexe mais le principe est identique) ;
J'ai un tableau nommé "Liste" dans un onglet excel nommé "Feuil1".
Ce tableau contient 2 colonnes nommées "Index" et "Nom", et un nombre indéterminé de ligne.
Je cherche comment faire référence aux différentes colonnes avec une macro.
Le problème est qu'au final le nombre de colonne sera variable et évoluera au fil du temps.
C'est pourquoi je cherche une syntaxe permettant d'utiliser le nom de mes colonnes au lieu d'utiliser leur numéro.
J’envisageais même de peut-être stocker dans des variables les noms des colonnes, ainsi ceux-ci pourrais être changé dans mon tableau excel sans aucune incidence sur mon code.
Mais je ne sais pas si tout cela est possible.

J'ai créé une variable pour mon tableau pour ensuite y faire référence (elle se situe dans module séparé pour être utilisé dans mes autres modules et userforms) :
Je cherche à faire référence aux différentes colonnes en utilisant leurs noms plutôt que leurs numéros de position, puisque si j'en ajoute une, la colonne 2 devient la colonne 3 et mon code ne fonctionne plus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
' Dans un premier module (Module1)
Global Tableau As ListObject
 
Public Sub VariableTableau()
 Set Tableau = Worksheets("Feuil1").ListObjects("Liste")
End Sub
 
' Dans un second module (Module2)
Private Sub ReferenceTableau()
 Call Module1.VariableTableau
 Tableau.Range(2,2).Select
End Sub
La colonne 2 étant "Index", comment puis-je faire pour y faire référence avec son nom au lieu de son numéro.
Cela fait un moment que je fouille partout sur internet sans grand succès, je n'ai peut-être rien compris à certains principes de base.
Cette syntaxe ne fonctionne pas mais je me demandais si je pouvais obtenir quelque chose du genre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Tableau.Range(2,"Index").Select
Je suis confronté au même genre de problème lorsque je tente de remplir une combobox dans un userform avec ce même tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Private Sub UserForm_Initialize()
 Call Module1.VariableTableau
 Combobox1.RowSource = Tableau
End Sub
Mais ceci ne considère que la première colonne, c'est la deuxième dont j'ai besoin.
J'ai palié ce problème avec une boucle mais cela augmente grandement la quantité de code à écrire.
Et j'ai le même problème du fait que la colonne 2 peut devenir la colonne 3 (certain de mes tableaux auront de nouvelles colonnes ajouté par macro, je ne peut donc pas aller modifier mon code à chaque fois).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
Private Sub UserForm_Initialize()
 Call Module1.VariableTableau
 Dim I As Long
 Dim NbRow As Long
  NbRow = Range(Tableau).Rows.Count
 For I = 1 To NbRow
  Combobox1.AddItem Tableau.Range(I + 1, 2)
 Next I
End Sub
Je sais qu'avec une formule dans une cellule je peux faire référence avec les noms des colonnes tel que ;
=Liste[[#En-têtes];[Index]]
Je ne sais donc pas si je peux reproduire le même principe dans une macro.
Bref, est-ce que quelqu'un aurait une solution, où bien suis-je complètement à côté de la plaque en tentant de faire quelque chose d'impossible.

Merci beaucoup

BigBill_125