Ces codes
- Ouvrent une instance d'Excel
- Ouvrent un classeur
- Renseignent les combobox des données du classeur Excel, de la feuille et de la colonne voulues
- Ferment le classeur sans l'enregistrer
- Quittent l'application Excel
Ces procédures placent dans une liste les données de la colonne 1 d'une feuille de calculs Excel.

Exemple 1 :
Renseigner un combobox placé dans un document Word à partir des données issues d'un classeur Excel.
Le combobox utilisé est pris dans la "Boîte à outils contrôles"

Procédure à placer dans un Module standard
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub ComboboxDansDocument()
Dim xlApp As Object
Dim xlCL1 As Variant
Dim xlFL1 As Variant
    Set xlApp = CreateObject("Excel.Application")
    Set xlCL1 = xlApp.Workbooks.Open("D:\xls\adresses diverses.xls")
    Set xlFL1 = xlCL1.Worksheets("Feuil1")
    xlApp.Visible = False
    For i = 1 To Split(xlFL1.UsedRange.Address, "$")(4)
        ActiveDocument.ComboBox1.AddItem xlFL1.Cells(i, 1).Value 'Colonne 1
    Next
    xlCL1.Close False
    xlApp.Quit
    Set xlApp = Nothing
    Set xlCL1 = Nothing
    Set xlFL1 = Nothing
End Sub
Exécution de la procédure à l'ouverture du document :
Placer l'appel à la procédure dans l'événement ThisWorkbook_Open du document -> Editeur VBA -> 2 clics sur ThisDocument ouvre la fenêtre de code. Coller cette procédure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub Document_Open()
    ComboDansDocument
End Sub
Exemple 2 :
Renseigner un combobox placé dans un Userform à partir des mêmes données issues d'un classeur Excel.

Procédure à placer dans la feuille de code de l'userform
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub UserForm_Activate()
Dim xlApp As Object
Dim xlFL1 As Variant
Dim xlCL1 As Variant
    Set xlApp = CreateObject("Excel.Application")
    Set xlCL1 = xlApp.Workbooks.Open("D:\xls\adresses diverses.xls")
    Set xlFL1 = xlCL1.Worksheets("Feuil1")
    xlApp.Visible = False
    For i = 1 To Split(xlFL1.UsedRange.Address, "$")(4)
        Me.ComboBox1.AddItem xlFL1.Cells(i, 1).Value 'Colonne 1
    Next
    xlCL1.Close False
    xlApp.Quit
    Set xlApp = Nothing
    Set xlCL1 = Nothing
    Set xlFL1 = Nothing
End Sub
Exécution de la procédure à l'ouverture du document :
Placer l'appel à la procédure dans l'événement ThisWorkbook_Open du document -> Editeur VBA -> 2 clics sur ThisDocument ouvre la fenêtre de code. Coller cette procédure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Private Sub Document_Open()
    Userform1.show
End Sub
Les deux codes servant à renseigner les combobox sont identiques à l'exception de l'emplacement de la liste.

Une explication sur Split(xlFL1.UsedRange.Address, "$")(4) :

xlFL1.UsedRange.Address donne l'adresse de la plage de donnée sous la forme "A1:" & dernière colonne & dernière ligne
Exemple : "A1:Z75"
Split convertit cette adresse en tableau(4)

- tableau(0) = ""
- tableau(1) = "A"
- tableau(2) = "1"
- tableau(3) = "Z"
- tableau(4) = "75"
Dans cet exemple, Split(xlFL1.UsedRange.Address, "$")(4) donne donc 75

Une explication sur les déclarations :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Sub ComboboxDansDocument()
Dim xlApp As Object
Dim xlCL1 As Variant
Dim xlFL1 As Variant
    Set xlApp = CreateObject("Excel.Application")
    Set xlCL1 = xlApp.Workbooks.Open("D:\xls\Le Classeur.xls")
    Set xlFL1 = xlCL1.Worksheets("Feuil1")
Cette syntaxe dispense de valider la référence "Microsoft Excel XX.X Object Library"

Si cela pose problème, valider cette référence ( -> Editeur VBA -> Outils -> Références ) et utiliser la syntaxe suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
Dim xlApp As Excel.Application
Dim xlCL1 As Excel.Workbook
Dim xlFL1 As Excel.Worksheet
    Set xlApp = CreateObject("Excel.application")
    Set xlCL1 = xlApp.Workbooks.Open("D:\xls\Le Classeur.xls")
    Set xlFL1 = xlCL1.Worksheets("Feuil1")
Bonne programmation