Référence des colonnes d'un tableau excel dans une macro
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:
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:
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:
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:
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