Accélérer un procédure VBA dans un userform
Bonjour à tous,
En suivant vos conseils avisés (notamment ceux de Dan), j'ai réussi à construire mon userform... Je vais même chercher les données de ma combobox dans un fichier fermé. Seulement, la procédure (ci-dessous) prend environ 10 secondes avant de me faire apparaitre le userform...
Connaissez-vous un moyen d'accélérer ma procédure Initialize ?
Private Sub UserForm_Initialize()
ButOrg.Value = True
repertoire = ThisWorkbook.Path & "\"
classeur = "ListeAgences.xls"
i = 2
Do
temp = Application.ExecuteExcel4Macro("'" & repertoire & "[" & classeur & "]ListeAG'!R" & i & "C1")
If temp <> 0 Then
Me.ComboAgences.AddItem
Me.ComboAgences.List(i - 2, 0) = temp
Me.ComboAgences.List(i - 2, 1) = Application.ExecuteExcel4Macro("'" & repertoire & "[" & classeur & "]ListeAG'!R" & i & "C2")
i = i + 1
End If
Loop Until temp = 0
End Sub
Merci d'avance.
Fabrice,
bonsoir
un exemple qui utilise la bibliothèque ADO, à condition que le tableau ne contienne pas de cellules vides :
Private Sub UserForm_Initialize()
Dim Cnt As Object
Dim Rst As Object
Dim Tableau As Variant
Dim strSQL As String
Dim Repertoire As String, Classeur As String
Dim NomFeuille As String
Repertoire = ThisWorkbook.Path & "\"
Classeur = "ListeAgences.xls"
'Ne pas oublier d'ajouter le symbole $
NomFeuille = "ListeAG$"
strSQL = "SELECT * FROM [" & NomFeuille & "];"
Set Cnt = CreateObject("ADODB.Connection")
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Repertoire & Classeur & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open strSQL, Cnt, 1
Tableau = Rst.GetRows
With ListBox1
.Clear
.ColumnCount = Rst.Fields.Count
.List = Application.Transpose(Tableau)
.ListIndex = -1
End With
Rst.Close
Cnt.Close
Set Rst = Nothing
Set Cnt = Nothing
End Subbonne soirée
michel
Bonjour le forum,
Encore un souci de réglé grace à vous... Un grand merci à Michel pour ce code qui fonctionne parfaitement et qui lance mon userform pratiquement instantanément... Je suis impressionné...
Merci encore à vous !