Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Combobox : liste deroulante a partir d'un fichier externe

  • Initiateur de la discussion Initiateur de la discussion diego3110
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

diego3110

Guest
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
 
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
 
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:
Re : Combobox : liste deroulante a partir d'un fichier externe

Re Hasco, CC

Merci pour tout. Je vais tenter de déchiffrer tout cela .....🙂🙂 et de le mettre en application.

Merci pour tout

a+
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…