Microsoft 365 nombre d'occurrence dans une Listbox

hatem1234

XLDnaute Junior
Bonjour,
J'essaye d'afficher dans une Listbox le nombre de cours suivis par date et par employé mais ça m'affiche les dates en doubles
ceci est facilement obtenu par TCD mais j'essaye de le faire par Listbox
merci pour vos propositions (fichier test ci-joint)
 

Pièces jointes

  • Test_Listbox.xlsm
    104.2 KB · Affichages: 10

job75

XLDnaute Barbatruc
Bonjour hatem1234, Bernard, Robert,

C'est plus simple et plus rapide avec le Dictionary :
VB:
Private Sub cmb_Noms_Change()
Dim x$, tablo, d As Object, i&, a, b, c()
ListBox1.Clear
x = cmb_Noms
If x = "" Then Exit Sub
tablo = [Tableau1] 'tableau structuré
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    If tablo(i, 2) = x Then d(tablo(i, 1)) = d(tablo(i, 1)) + 1 'comptage
Next i
If d.Count = 0 Then Exit Sub
a = d.keys: b = d.items
ReDim c(UBound(a), 1) 'base 0
For i = 0 To UBound(a)
    c(i, 0) = a(i)
    c(i, 1) = b(i)
Next i
ListBox1.List = c
End Sub
PS : il y a un accent circonflexe dans Benoît.

A+
 

Pièces jointes

  • Test_Listbox(1).xlsm
    96.5 KB · Affichages: 9

dysorthographie

XLDnaute Impliqué
Bonsoir,
VB:
Option Explicit

Private Sub UserForm_Initialize()
cmb_Noms.Column = OpenRecordSet("Select distinct [Nom] from [MyTable] Order By [Nom]")
End Sub

Private Sub btn_Fermer_Click()
Unload Me
End Sub

Private Sub cmb_Noms_Change()
ListBox1.Column = OpenRecordSet("Select Date,count(Formation)  from [MyTable] where [Nom]='" & replace(cmb_Noms,"'","''") & "' group by Date")
End Sub
Function OpenRecordSet(sql As String)
Dim ad As String
ad = "[Feuil1$" & Replace(Sheets("Feuil1").Range("B2").CurrentRegion.Address, "$", "") & "]"
With CreateObject("Adodb.connection")
    .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
     With .Execute(Replace(sql, "[MyTable]", ad))
        If Not .EOF Then OpenRecordSet = .GetRows Else OpenRecordSet = Array("")
        .Close
     End With
    .Close
End With
End Function
 
Dernière édition:

hatem1234

XLDnaute Junior
Bonjour à tous,
Toutes les suggestions fonctionnent super bien mais je n'ai pas remarqué une grande différence au niveau du temps d'exécution je vous dirais plus lorsque je l'adapte avec plus de données
Le code de Job75, au complet, me parait plus court et plus simple même si j'ignore si le Dictionary fonctionne avec toutes les versions et les plateformes (jamais utilisé auparavant)
Merci encore à tous pour prendre le temps de répondre
 

job75

XLDnaute Barbatruc
Bonjour hatem1234, le forum,

Les 3 méthodes ne sont pas équivalentes.

Pour tester j'ai recopié le tableau B3: D21 sur 95 000 lignes :

- fichier du post #3 => 1,6 seconde chez moi sur Win 11 Excel 2019

- fichier du post #5 => 0,1 seconde

- macro du post #6 => pas opérationnelle sur les fichiers proposés.

Edit : pour le post #2 de Bernard le chargement de l'USF se fait en 1,6 seconde.

A+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
299 952
Messages
1 980 338
Membres
207 060
dernier inscrit
Maggie2401