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

Rechercher des sujets similaires à "explication code"