XL 2013 les machistes (utilisateurs de Mac OS peuvent ils tester ceci

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
@RyuAutodidacte m' a rappelé un lien vers un amis de l'autre monde concernant une classe pseudo dictionnaire pour MAC
malgré que j'apprécie beaucoup l'auteur (avec qui j'ai même collaboré sur l’accélérateur de requête entre autres ) ,je trouve que c'est un peu usine à gaz

j'ai donc fait les choses à ma façon
mais avant d'aller plus loin car des idées j'en ai plein ,si vous êtes un utilisateur sur MAC pouvez vous tester ce pseudo dictionnaire
sur Windows ça match il me faut confirmation sur MAC

Merci pour vos retours
 

Pièces jointes

  • classe dictionary pour Mac.xlsm
    18.3 KB · Affichages: 10
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
ben c'est toujours entre 0.02 et 0.03
que ce soit avec un array de 10000 ou un tableau 2 dim de 10000 lignes sur 1 colonne
je suppose qu'avec du texte comme le tableau et plus lourd ça doit augmenter un peu mais bon

après la comparaison sur ton pc ou mac et le mien n'a pas vraiment de valeur de référence sauf si la différence est beaucoup plus grande au quel cas il faudra se poser d'autre questions
car on a pas la même mécanique dans le boitier du pc ;)
 

Dranreb

XLDnaute Barbatruc
J'ai repris mes recherches et ressorti un vieux module de classe TableIndex qui marchait très bien.
Je n'arrive plus à retrouver les circonstances qui m'ont fait trouver, même optimisée, la fusion plus rapide.
 

Pièces jointes

  • IndexeurCls.xlsm
    113.2 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
bon j'ai monté a 100 000 avec ma version quicksort 2 dim
résultat
1699439680274.png


la version 2 dim du quicksort
VB:
Function SortQuickSortDIM2(tbl, Optional Sortmode As Long = 1, Optional Gauche = -1, Optional Droite = -1)    ' Quick sort
    Dim ref, G&, D&, temp1, First
    If Droite = -1 And Gauche = -1 Then First = 1 Else First = 0
    Droite = IIf(Droite = -1, UBound(tbl), Droite)

    Gauche = IIf(Gauche = -1, LBound(tbl), Gauche)

    ref = tbl((Gauche + Droite) \ 2, 1)   'le pivot( change de position au fur et a mesure)

    G = Gauche: D = Droite    'on dédouble les variable gauche et droite pour l'incrémentation dans les deux do/loop droite et gauche

    Do
        Select Case Sortmode
        Case xlDescending, 1
            Do While tbl(G, 1) < ref: G = G + 1:: Loop        'on comptabilise le passage
            Do While ref < tbl(D, 1): D = D - 1: Q = Q + 1:: Loop 'on comptabilise le passage
        Case xlAscending, 2
            Do While tbl(G, 1) > ref: G = G + 1:: Loop        'on comptabilise le passage
            Do While ref > tbl(D, 1): D = D - 1: Q = Q + 1:: Loop   'on comptabilise le passage
        Case Else
            MsgBox "l'argument SortMode peut prendre 2  valeurs  xlascending ou 2 / xldescending ou 1)": SortQuickSortDIM2 = tbl: Exit Function
        End Select

        'intervertion des itemS tbl(G) à gauche du pivot et l'item tbl(d) à droite du pivot
        If G <= D Then
            temp1 = tbl(G, 1): tbl(G, 1) = tbl(D, 1): tbl(D, 1) = temp1
            G = G + 1: D = D - 1
            ch = ch + 1
        End If
    Loop While G <= D

    'si g ou gauche est plus petit on relance un appel  de la fonction (c'est la récursivité)
    If G < Droite Then x = SortQuickSortDIM2(tbl, Sortmode, G, Droite)

    If Gauche < D Then x = SortQuickSortDIM2(tbl, Sortmode, Gauche, D)

    'pour économiser un peu la charge memoire du return de la fonction on la charge dès que l'on revients à first
    'c'est à dire quand il n'y a plus d'appel récursifs
    If First = 1 Then SortQuickSortDIM2 = tbl

End Function
 

patricktoulon

XLDnaute Barbatruc
RE
Attends on a un souci sur 100 000 le tableau renvoyé fait bien 100 000 lignes mais il est vide
je tourne ça dans tout les sens je n'en vois pas la raison si ce n'ai qu'un problème mémoire en 32 bits peut être

TIENS LE XLSX ET LE XLSM
 

Pièces jointes

  • EXSORTQICK2DIM.xlsm
    211.1 KB · Affichages: 2
  • EXSORTQICK2DIM.xlsx
    199.4 KB · Affichages: 2

Statistiques des forums

Discussions
312 658
Messages
2 090 616
Membres
104 610
dernier inscrit
jeanMe