Alimenter une listbox
Bonjour tout le monde,
Je vous écris parce que j’ai un problème. Je vous explique.
Je suis dessinateur projeteur et travaille sur un modeleur 3D (Autodesk Inventor). J’ai créé un gabarit (modèle) de mise en plan qui fait référence un fichier Excel (Info Inventor.xlsx). Ce fichier contient des info comme N° d’affaire, auteurs,… Dans mon gabarit Inventor, j’ai créé ce qui est appelé des règles (codées en VB.net) qui vont chercher des info dans le fichier Excel (cité précédemment) pour les assigner à des paramètres de la mise en plan à l’aide de formulaires. Ça fonctionne pas trop mal.
Aujourd’hui, j’aimerais simplifier tout ça en appelant un Userform avec une règle (je sais faire et c’est facile ). Dans ce Userform, j’aimerais mettre une Listbox (entre autres, pour le reste je verrai plus tard) (ou Combobox, ça n’a pas d’importance) qui est alimentée par la liste des auteurs (par exemple) qui se trouve dans le fichier Excel (cité précédemment et fermé). Cette liste d’auteurs est l’ensemble des cellules C2 à C4 (pour l’instant, la liste est amenée à évoluer, la cellule C1 étant l’en-tête de la colonne) de la feuille « Auteurs ».
Voilà, et j’ai essayé des choses sans succès (comme vous l’avez deviné). J’espère que ça vous inspirera (au moins un peu). Pour toute question qui pourrait m’aider à avancer n’hésitez pas à me contacter.
Merci d’avance.
À+.
Dim
Bonsoir,
Le plus simple tu ouvre ton classeur de référence (Info Inventor.xlsx) sur la bonne feuille.
Dans ton classeur de travail tu crées une feuille que tu masqueras ensuite.
Puis tu crées un lien entre la cellule A1 de cette nouvelle feuille vers la cellule C2 de "Info Inventor.xlsx"
ça va te donner une formule du type :
=[Info Inventor.xlsx]Auteurs'!$C2Ensuite tu fais glisser vers le bas jusqu'à obtenir le contenu de ta colonne source + plusieurs cellules qui vont contenir des zéros (ou s'inscriront ensuite les futures références...)
Tu peux alors fermer "Info Inventor.xlsx"
La formule de ton classeur de travail va se modifier un peu, mais peu importe...
Tu feras ensuite référence à cette feuille (que tu masqueras) pour charger ton Combo ou ta ListBox de manière habituelle.
A+
Bonjour,
Merci Galopin.
J'aurais préféré le faire sans passer par une feuille intermédiaire. C'est possible ?
Merci d'avance.
Dim
Bonjour le fil, bonjour le forum,
Travailler sur un ficher fermé, je ne m'y suis pas encore frotté...
Mais pourquoi ne pas :
• ouvrir le fichier,
• récupérer la liste dans une variable déclarée publique, de type Variant (LA dans mon exemple)
• refermer le fichier
• alimenter la Combobox/ListBox avec la variable ?
Dans un module standard (Module1 par exemple), en première ligne :
Public LA As Variant 'définit la variable LA (Liste des Auteurs)Dans le code d'initialisation de l'Userform :
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
CH = "C:\Users\Dimgaz\Documents" 'définiit le chemon CH (à adapter à ton cas)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CS = Workbooks("Info Inventor.xlsx") 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
Err.Clear 'supprime l'erreur
Workbooks.Open (CH & "\Info Inventor.xlsx") 'ouvre le classeur "Info Inventor.xlsx"
Set CS = ActiveWorkbook 'définit la classeur source CS
End If 'fin de la condition
On Error GoTo 0 'supprime la gestion des erreurs
Set OS = CS.Sheets("Auteurs") 'définit l'onglet source OS
'définit la liste des auteurs LA (variable déclarée publique dans le module [Module1])
LA = OS.Range("C2:C" & OS.Cells(Application.Rows.Count, 3).End(xlUp).Row)
CS.Close savechanges:=False 'ferme le classeur source sans enregistrer les changements
Me.ComboBox1.List = LA 'alimente la ComboBox1 avec la liste des auterus LA
'la suite de ton code
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub