Dictionary

Bonjour a tous,

me voila bloqué, je souhaiterai mettre le score de mes équipes en feuil2 or il y a des doublons et avec "Scripting.dictionary" le score n'est affiché que sur le deuxième doublons. Je ne vois pas quel modification faire a mon code pouvez-vous m'aidez?

(J'utilise les dictionnaires et les tableaux pour optimiser le temps d'exécution car dans le fichier original il y a beaucoup plus de données)

voici ci-joint le fichier avec mon code que je vous remet ici

5classeur1.xlsm (20.08 Ko)
Sub score()

Dim ligne As Long, ligne1 As Long, c As Long, i As Long, L As Long, dico
Set dico = CreateObject("Scripting.Dictionary")

    Workbooks("Classeur1.xlsm").Sheets("feuil1").Rows("1:1").AutoFilter
    Workbooks("Classeur1.xlsm").Worksheets("feuil1").AutoFilter.Sort.SortFields.Clear
    Workbooks("Classeur1.xlsm").Worksheets("feuil1").AutoFilter.Sort.SortFields.Add Key _
        :=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With Workbooks("Classeur1.xlsm").Worksheets("feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Workbooks("Classeur1.xlsm").Sheets("feuil1").Rows("1:1").AutoFilter

ligne = Workbooks("Classeur1.xlsm").Sheets("feuil1").Range("C1").End(xlDown).Row
ReDim T_site(ligne, 7)

With Workbooks("Classeur1.xlsm").Sheets("feuil1")
    L = 1
    For i = 2 To ligne
        T_site(L, 0) = .Range("D" & i).Value 'otm
        T_site(L, 1) = .Range("B" & i).Value & " - " & .Range("C" & i).Value
        L = L + 1
    Next i

End With

    Workbooks("Classeur1.xlsm").Sheets("feuil2").Rows("1:1").AutoFilter
    Workbooks("Classeur1.xlsm").Worksheets("feuil2").AutoFilter.Sort.SortFields.Clear
    Workbooks("Classeur1.xlsm").Worksheets("feuil2").AutoFilter.Sort.SortFields.Add Key:= _
        Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With Workbooks("Classeur1.xlsm").Worksheets("feuil2").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Workbooks("Classeur1.xlsm").Sheets("feuil2").Rows("1:1").AutoFilter

ligne1 = Workbooks("Classeur1.xlsm").Sheets("feuil2").Range("A1").End(xlDown).Row
ReDim T_d(ligne1, 0)

 Workbooks("Classeur1.xlsm").Sheets("feuil2").Activate

    L = 1
    For i = 2 To ligne1
        T_d(L, 0) = Range("B" & i).Value & " - " & Range("C" & i).Value
        L = L + 1
     Next i

ReDim F(UBound(T_d), 6)

For i = 1 To UBound(T_d)
    dico.Item(T_d(i, 0)) = i
Next

For i = 1 To UBound(T_site)
    If dico.exists(T_site(i, 1)) Then

        Range("D" & dico(T_site(i, 1)) + 1).Value = T_site(i, 0)

    End If: Next i

 Erase T_site
Erase T_d

End Sub

Merci par avance

Bonjour,

Vous devriez expliquer précisément ce que vous voulez obtenir; le résultat souhaité dans le classeur aurait été un plus !

A+

Bonjour AlgoPlus,

Navré si ce n'est pas clair, je vous ai mis dans la feuille2: en colonne D ce que je souhaite, et en colonne E je que j'obtiens.

J'aimerai faire cela avec un dictionnaire pour que le temps d'exécution soit au plus optimale

5classeur1.xlsm (17.32 Ko)

en espèrent être plus clair.

Désolé, je ne comprends pas la logique qui :

  • pour la team1 qui n'a qu'un score dans un seul sport donne en résultat deux lignes identiques avec scores identiques pour ce sport + deux lignes sans score dans des sport différents...
  • pour la team10 qui possède deux ligne rugby avec des scores différents donne une seule ligne en karaté sans score

pas vérifié les autres lignes.

Une explication sur l'attribution des numéros (colonne A) serait un plus.

A+

Edit: utiliser un dictionnaire pour gagner du temps, pourquoi pas , mais on pourrait gagner du temps sur les tableaux (array) utilisés en les "chargeant" directement par une plage, plutôt que par une boucle sur cette plage...

merci pour ta réponse, j'ai trouvé la solution

cdl

Rechercher des sujets similaires à "dictionary"