Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Bonjour Chers tous
j'ai une plage de 8000 lignes et 13 colonnes que je voudrais afficher dans mon listbox .
J'ai utilisé la méthode Rowsource puis la méthode List mais mon userform charge lentement au lancement.
Je voudrais savoir s'il existe une autre méthode pour charger rapidement mon listbox.
Merci!!!
bonjour le forum, bonjour staple1600, job75, chti160
re ktm
un jour de pluie et je tombe sur ce fil. le sujet m'intéresse donc je le parcours.
j'adhère sans réserves aux remarques de job75. d'autant plus que pour ce qui me concerne j'ai utilisé une listbox avec 39000 items, (codes postaux pour métropole et Dom-Tom).
La solution de job (corrigez-moi si je me trompe) permets de mettre en évidence des occurrences exactes et pour des correspondances partielles il faut utiliser le signe *. La casse est importante, il faut respecter majuscule, minuscule.
Je vous propose d'évaluer la solution jointe, que j'avais développé à partir de code récupéré sur le site de M Boisgontier et qui fonctionne parfaitement avec un résultat inférieur à une seconde. Il n'y a pas besoin de correspondance exacte, il n'y a pas de différence sur la casse, la recherche peut être faite sur le milieu de l'occurrence. Le nombre de lignes n'est pas figé, il est dimensionné aux valeurs de la feuille
VB:
Private Sub UserForm_Initialize()
Set f = Sheets("Feuil1") 'saisie de la feuille de recherche des données
Set Rng = f.Range("A1:M" & f.[A65000].End(xlUp).Row) ' attention au minimum autant de textbox que de colonne
Ncol = Rng.Columns.Count
'-- entêtes TextBox
For i = 1 To Ncol
Set Lab = Me.Controls.Add("Forms.Label.1")
Lab.Caption = f.Cells(1, i) 'le 1 1er ligne, le i numéro de colonne
' positionnement decalage vers le haut
Lab.Top = Me("textbox" & i + 1).Top - 19
Lab.Left = Me("textbox" & i + 1).Left
x = x + f.Columns(i).Width * 0.5
Next
'--SUITE PROCEDURE
TblTmp = Rng.Value
For i = LBound(TblTmp) To UBound(TblTmp)
ReDim Preserve Choix(1 To i)
For k = LBound(TblTmp) To UBound(TblTmp, 2)
Choix(i) = Choix(i) & TblTmp(i, k) & " * "
Next k
Next i
Me.ListBox1.List = Rng.Value
End Sub
Private Sub TextBox1_Change()
If Me.TextBox1 <> "" Then
mots = Split(Trim(Me.TextBox1), " ")
Tbl = Choix
For i = LBound(mots) To UBound(mots)
Tbl = Filter(Tbl, mots(i), True, vbTextCompare)
Next i
If UBound(Tbl) > -1 Then
Dim b(): ReDim b(1 To UBound(Tbl) + 1, 1 To Ncol)
For i = LBound(Tbl) To UBound(Tbl)
a = Split(Tbl(i), "*")
For k = 1 To Ncol: b(i + 1, k) = a(k - 1): Next k
Next i
Me.ListBox1.List = b
Me.TextBox_items = UBound(Tbl) + 1
End If
Else
UserForm_Initialize
End If
For k = 0 To Ncol - 1 'vider textbox si modification listbox
Me("TextBox" & k + 2) = ""
Next k
End Sub
Dans le classeur, faites un essai avec les deux solutions, avec le mot "maison".
Vous avez maintenant deux solutions qui correspondent à votre demande. La solution que je vous propose n'est pas meilleure que celle de job75, elle est différente, à vous de voir ce qui vous convient. C'est votre projet.
re job75, le classeur joint est votre classeur d'origine. Il comporte des données confidentielles, (nom, prénom) je l'ai purgé avec l'inspecteur de documents, il est présentement vide d'informations confidentielles.
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.