Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Word > Contribuez

Réponse
 
Outils de la discussion
Vieux 30/08/2008, 09h59   #1 (permalink)
Modérateur
 
Avatar de ouskel'n'or
 
Date d'inscription: février 2005
Localisation: Une petite rue qui "avait" un merle
Messages: 11 574
Par défaut Renseigner une listbox, ds un document ou un userform, avec données de classeur Excel

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 :
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 :
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 :
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 :
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 :
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 :
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
__________________
Je...ne...réponds...pas....aux...questions...techniques... par...mp
La recherche (VBA-E) : Le Forum, La FAQ, Les cours et tutoriels, Contribuez, Les Sources et... l'Aide en ligne !!!
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Word > Contribuez

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement 00h08.


Publiez vos articles, tutoriels et cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter