Combobox : liste deroulante a partir d'un fichier externe

diego3110

XLDnaute Junior
Bonjour le forum,

Voila mon pb, je voudrais creer une liste deroulante dans une combobox a partir des données d'un second fichier.

Exemple : dans la colonne A du fichier test se trouve une liste de nom (qui s'aggrandit au fur et à mesure).Est ce possible de creer dans un autre fichier une combobox (ou autre) proposant une liste deroulante ou se trouve l'ensemble des noms presents dans la colonne A du fichier Test.

Merci d'avance pour votre aide
 

diego3110

XLDnaute Junior
Re : Combobox : liste deroulante a partir d'un fichier externe

Bonjour Carcharodon-carcharias,

Je me suis mis à VBA il y a peu et quelques (...en fait énormement!!) subtilités m'échappent encore...surtout que c'est la premiere combobox que j'integre dans un fichier.

J'ai essayé d'adapté le code à mon exemple précis mais rien ne se met dans ma combobox. Y a t il une erreur dans mon programme? Je comprends pas bien la ligne champ à lire..

Private Sub ComboBox1_Change()
ComboBox1.Clear
chemin = "S:\PARTAGE\SEC\BGPO\fiches de poste\2.BDD, formulaires et referentiels\BDD" & "\"
Fichier = "[BDD_fiche métiers.xls]" ' le nom du fichier à lire
Onglet = "BDD" 'le nom de l'onglet à lire
For k = 2 To 65000 'commencer à lire à la ligne 2
ChampALire = "R" & k & "C1" ' k est la ligne incrémentée C1 est col A C2 est B ainsi de suite
ComboBox1.Column(1, ComboBox1.ListCount - 1) = Application.ExecuteExcel4Macro(chemin & Fichier & Onglet & ChampALire2)
ComboBox1.RemoveItem (ComboBox1.ListCount - 1)
Exit For
End Sub

Merci pour votre aide
 
G

Guest

Guest
Re : Combobox : liste deroulante a partir d'un fichier externe

Re, Diego:

Hello CC:):):)

Voici le module de code de la feuille 'Generer un fiche' du classeur 'Formulaire création fiche'
Le code est largement commenté pour que tu te débrouilles. Attention, à deux endroits il faudra remplacer le chemin vers le fichiers "BDD_Fiches métiers".

VB:
Private bErrMetier As Boolean
Private Sub ComboBox1_Change()
 
  'Le commandbutton sera autorisé ou non suivant qu'il y a ou non un choix utilisateur
   'et qu'il n'y ait pas eu d'erreur au niveau de la liste des métiers
   CommandButton1.Enabled = ComboBox1.ListIndex > -1 And Not bErrMetier
End Sub
Private Sub CommandButton1_Click()
        Dim Metier As String
        Dim rst As Object, cnx As Object
        Dim Path As String: Path = ThisWorkbook.Path & "\"
        Sheets("Donnees").Range("2:2").ClearContents
 
'Récupérer le métier choisit
        Metier = ComboBox1.Value
 
'Si aucun métier dans la valeur du combo (ou chaine vide) sortir
        If Len(Trim(Metier)) = 0 Then Exit Sub
 
'Mettre des doubles guillemets pour la transmition à SQL
        Metier = Replace(Replace(Metier, """", """"""), "'", "''")
 
'Recréer une connextion
        Set cnx = CreateObject("Adodb.connection")
        cnx.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & Path & "BDD_fiches métiers.xls"
 
'Interrogation de la feuille BDD
        Set rst = cnx.Execute("SELECT TOP 1 * FROM [BDD$] WHERE `METIER`='" & Metier & "' ORDER BY `METIER` ASC;")
 
'Si l'interrogation a donné quelque chose
        If Not rst Is Nothing Then
            'Copier les données à partir de A2 de Donnees
            Sheets("Donnees").Range("A2").CopyFromRecordset rst
            'Fermer le recordset (important)
            rst.Close
        End If
'Fermer la connexion (important)
        cnx.Close
 
'Libérer les objets en mémoire
        Set rst = Nothing
        Set cnx = Nothing
Call creation
End Sub
Private Sub Worksheet_Activate()
    If ComboBox1.ListCount = 0 Then
        Dim rst As Object, cnx As Object
'ATTENTION : mettre le chemin réél du fichier dans cette ligne
        Dim Path As String: Path = ThisWorkbook.Path & "\"
'Création de la connexion au fichier
        Set cnx = CreateObject("Adodb.connection")
        cnx.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & Path & "BDD_fiches métiers.xls"
 
'Interrogation du fichier
        Set rst = cnx.Execute("SELECT `METIER` FROM [BDD$] WHERE NOT ISNULL(`METIER`);")
 
'Retour Recordset
        If Not rst Is Nothing Then
            ComboBox1.List = Application.Transpose(rst.GetRows)
            rst.Close
        End If
'Fermeture connexion
        cnx.Close
 
'Libération des objets mémoires
        Set rst = Nothing
        Set cnx = Nothing
    End If
 
'S'il n'y a rien dans la combobox ne pas autoriser les boutons ni la combobox
    If ComboBox1.ListCount = 0 Then
        CommandButton1.Enabled = False
        ComboBox1.Enabled = False
        bErrMetier = True
        'Signaler l'erreur
        MsgBox "Une erreur est survenue lors de la création de la liste des métiers!" & vbCrLf & "Veuillez contacter DIEGO", vbExclamation, "Liste métier"
    Else
'Sinon indiquer à la variable de niveau module qu'il n'y a eu aucune erreur de combo list
        bErrMetier = False
 
'Autoriser le commandButton et la combo
        CommandButton1.Enabled = True
        ComboBox1.Enabled = True
    End If
End Sub

A+
 
Dernière modification par un modérateur:
G

Guest

Guest
Re : Combobox : liste deroulante a partir d'un fichier externe

Re Diego,

Je ne sais pas à quelle heure tu as récupérer le code que je t'ai mis plus haut. Mais j'y ai fait quelques modifications de la sql sur 'CommandButton1_Click'.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 744
Messages
2 091 568
Membres
104 989
dernier inscrit
sailly gregory