XL 2016 Remplir Combobox vitesse grand v [RESOLU]

  • Initiateur de la discussion Compte Supprimé 979
  • Date de début
C

Compte Supprimé 979

Guest
Bonjour à toutes et à tous ;)

Qui saura répondre à ma problématique...
J'ai un fichier ".xlsx" contenant les 36.000 communes françaises et leur code postal
J'aimerai à partir d'un autre fichier contenant un USF, venir alimenter les 2 colonnes de la combobox

Je pensais le faire via la méthode ADO, mais avec mon code, le remplissage est "long"
VB:
Private Sub UserForm_Activate()
  Dim sPathBdD As String, sTable As String, FlgErrCon As Boolean
  Dim sSQL As String, sField As String, IdField As Integer
  ' Initialiser les variables
  sTable = "Liste"
  sPathBdD = VParam("DossierBdD")
  If Right(sPathBdD, 1) <> "\" Then sPathBdD = sPathBdD & "\"
  sPathBdD = sPathBdD & "BdD Villes.xlsx"
  ' Tester si le fichier se trouve bien à l'endroit prévu
  If Not ExisteFichier(sPathBdD) Then
    sPathBdD = Application.GetOpenFilename(FileFilter:="BdD Villes (*.xls*), *.xls*", _
        Title:="Merci de sélectionner le fichier des viles")
  End If

  ' En cas d'erreur
  On Error GoTo Erreur_Proc
  ' Vider la combobox en question et initialiser la chaine de connexion
  If Me.Cbx_Choix.ListCount > 0 Then Me.Cbx_Choix.Clear
  FlgErrCon = False: sConn = ""
  ' Créer une nouvelle instance ADO
  Set Cnn = CreateObject("ADODB.Connection")
  ' Créer la connexion vers le fichier Excel
  With Cnn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
           & sPathBdD & ";Extended Properties=""Excel 12.0;HDR=YES;"""
    .Open
  End With
  ' En cas d'erreur message d'information à l'utilisateur
  If FlgErrCon = True Then
    MsgBox "Impossible de se connecter à la base de données !", vbCritical, "OUPS..."
    GoTo FermetureCnn
  End If
  ' Préparer la requête
  If InStr(1, sTable, " ") > 0 Then
    sSQL = "SELECT * FROM ['" & sTable & "$']"
  Else
    sSQL = "SELECT * FROM [" & sTable & "$]"
  End If
  ' Créer un nouveau Recordset et l'ouvrir
  Set Rs = CreateObject("ADODB.Recordset")
  ' Avec le Recordset, récupérer les enregistrements
  With Rs
    ' Ouvrir le recordset
    .Open sSQL, Cnn, CursorType
    ' En cas d'erreur
    If FlgErrCon = True Then GoTo FermetureRs
    ' Sinon
    Do While Not .EOF
      Me.Cbx_Choix.AddItem Rs.Fields(0)
      Me.Cbx_Choix.List(Me.Cbx_Choix.ListCount - 1, 1) = Rs.Fields(1)
      ' Enregistrement suivant
      .MoveNext
    Loop
  End With
  ' Fermeture du Recordset
FermetureRs:
  Rs.Close
  Set Rs = Nothing

  ' Fermeture de la connexion
FermetureCnn:
  Cnn.Close: Set Cnn = Nothing
  On Error GoTo 0
  Me.Caption = "CHOIX de la VILLE du CHANTIER"
  Exit Sub

Erreur_Proc:
  FlgErrCon = True  ' Mettre le FLAG d'erreur de connexion à vrai
  Resume Next
End Sub

Qui saurait me raccourcir le temps d'exécution :p
Chose importante, je ne veux pas intégrer la liste des villes dans mon fichier principal.

A+
 

Pièces jointes

  • BdD Villes.xlsx
    796.5 KB · Affichages: 41
  • UsfVille.xlsm
    22.7 KB · Affichages: 36
Dernière modification par un modérateur:
C

Compte Supprimé 979

Guest
Merci à tous pour vos idées et votre participation

Voici le résultat final (simple et succinct) qui pour ma part me convient parfaitement ;)

Au plaisir
 

Pièces jointes

  • BrunoM45_UsfVille.xlsm
    24.8 KB · Affichages: 46
  • BdD Villes.xlsx
    796.5 KB · Affichages: 44

Discussions similaires

Réponses
6
Affichages
360

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 104
dernier inscrit
JEMADA