Explication du code
le code :
Option Explicit
Dim source As Workbook, f As Worksheet, fp As Worksheet, tablo, tabloR()
Dim dte As Date, dico As Object
Dim i&, j&, k&
Private Sub ListBox1_Click()
dte = ListBox1
k = 0
For i = 1 To UBound(tablo, 1)
If DateSerial(Year(tablo(i, 7)), Month(tablo(i, 7)), Day(tablo(i, 7))) = CDate(ListBox1) _
And tablo(i, 10) = "En réparation" Then
ReDim Preserve tabloR(1 To UBound(tablo, 2) - 1, 1 To 1 + k)
For j = 2 To UBound(tablo, 2)
tabloR(j - 1, k + 1) = tablo(i, j)
Next j
k = k + 1
End If
Next i
Sheets("Feuil2").Activate
Set fp = ActiveSheet
f.Range("B10:m10").Copy fp.Range("A11")
fp.Range("A12").Resize(UBound(tabloR, 2), 10) = Application.Transpose(tabloR)
fp.Range("A11").CurrentRegion.Copy
Application.DisplayAlerts = False
'sort de ton listbox une fois cliqué sur la date
'Unload Me
End Sub
Private Sub UserForm_initialize()
Set source = ThisWorkbook
Set f = Sheets("Feuil1")
Set dico = CreateObject("Scripting.Dictionary")
tablo = f.Range("A11:M" & f.Range("A" & Rows.Count).End(xlUp).Row)
For i = 1 To UBound(tablo, 1)
dico(DateSerial(Year(tablo(i, 7)), Month(tablo(i, 7)), Day(tablo(i, 7)))) = ""
Next i
ListBox1.List = Application.Transpose(dico.keys)
End Sub
je ne comprend pas la ligne :
dico est déclarer comme variable Objet
ensuite on créer un objet :
Set dico = CreateObject("Scripting.Dictionary")
ensuite on attribue ??
dico(DateSerial(Year(tablo(i, 7)), Month(tablo(i, 7)), Day(tablo(i, 7)))) = ""
c'est bien ça ?
Bonjour
Ben ... oui !
Scripting.Dictionary te permet de lister tous les éléments une fois et une seule fois, et dans ton cas cela évitera d'avoir une répétition dans ta liste déroulante.
Dans ton cas, dico est donc un objet d'où la déclaration
dim dico as object
puis on définit l'objet dico comme étant un dictionnaire
Set dico = CreateObject("Scripting.Dictionary")
Après, à chaque valeur rencontrée, on crée l'item sans affecter forcément une valeur
dico(______la_valeur______)=""
Si on rencontre une nouvelle fois la valeur, on ne créera pas un item de plus mais on lui réaffectera la valeur "vide".
On exploite ensuite les keys qui sont les termes (non forcément triés, mais dans l'ordre d'identification) du dictionnaire.
dico peut très bien être remplacé par schmilblick
ok merci.
Si on rencontre une nouvelle fois la valeur, on ne créera pas un item de plus mais on lui réaffectera la valeur "vide".
1- comment il décide de ne pas créer un item de plus ?
2- Keys fait partie de VBA ?
1- comment il décide de ne pas créer un item de plus ?
2- Keys fait partie de VBA ?
1- si tu fais dico(x)="" et ensuite dico(x)="" ce sera toujours x dans le dictionnaire, tu peux faire dico(x)=dico(x)+1 si tu veux connaître le nombre d'occurences
2- keys fait partie de Scripting.Dictionary
https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/dictionary-object