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:

Dranreb

XLDnaute Barbatruc
D'abord ce n'est pas une astuce mais une directive de mise en place d'une propriété de classe qui ne peut hélas pas se piloter depuis VBE. Chez moi elle est bien conservée d'un jour à l'autre, puisque je n'ai pas besoin de la relancer le lendemain. Si je la relance, après export de la classe il retrouve bien la directive en relisant le fichier et me signale qu'il va donc l'ignorer puisqu'on demande à en mettre, potentiellement, une autre.
 

Pièces jointes

  • DictionaryMAC.xlsm
    83.3 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
ouais bizarre ma fois on verra demain

allez pour info
j'ai mis ma version quicksort pour le tri
j'ai ajouté la propriété sortingMode(xlascending ou xldescending)
j'ai amélioré le blocage du reverse quand on joue avec des object pour les valeurs d'items

 

Pièces jointes

  • classe dictionary finale V4 patricktoulon.xlsm
    36.2 KB · Affichages: 1

Dranreb

XLDnaute Barbatruc
Ouais, votre classe n'a apparemment jamais eu grand chose à voir avec le Scripting.Dictionary.
Moi, j'essaie de produire un .xlam permettant d'utiliser sur Mac du code en employant un au départ.
Pour d'autres applications j'ai la fonction Gigogne qui permet énormément de choses.
 

patricktoulon

XLDnaute Barbatruc
ha ben je vais pas utiliser un scripting.dictionary pour l'imiter dans une classe
cette classe est fait avant tout pour Mac
je vois pas pourquoi je ferais ça sur et pour windows
et quoi que !!!! que les 3 fonctions supplémentaires la rendent intéressante même pour Windows

des fois tu a des raisonnement toi 🤣
 

Dranreb

XLDnaute Barbatruc
Je n'ai jamais eu de Mac, je suis bien obligé de le mettre au point sur Windows !
Surtout que c'est le seul moyen de vérifier s'il a exactement les même réactions.
Le but c'est simplement d'arriver à faire tourner sur Mac une macro écrite pour Windows utilisant un Dictionary en changeant le moins de code possible.
 

patricktoulon

XLDnaute Barbatruc
re
mais tu peux pas !!!
la scrun.dll il ne l'a pas Mac
donc tu peux tourner virer tant que tu veux
tu n'arrivera jamais a faire tourner un scripting.dictionary sur un Mac
sauf si mac a une passerelle mais a ma connaissance ça n'existe pas
il te faut donc tout construire ( l'object , ses propriétés , ses fonctions)
et c'est exactement ce que j'ai fait ;)
elle se comporte comme le dictionary
elle a les mêmes fonctions( du même nom)
et même plus
 

Dranreb

XLDnaute Barbatruc
Je n'ai pas dit que tout à la fin il fallait garder pour le Mac tout du classeur de développement/tests/comparaisons. Seul le module de classe Dictionary serait nécessaire pour les modules développés en Microsoft qui ne tournent pas encore dessus.
 

RyuAutodidacte

XLDnaute Impliqué
Bonjour @Dranreb , @RyuAutodidacte et tous les autres

bon après avoir fait ce recueil de fonction de tri
ce matin je me suis dit ;
bon il faudrait quand même les tester a petite échelle (ça c'est déjà fait)
mais surtout à grande echelle

alors il y a des surprises et de taille( sans jeu de mots)

rentrons tout de suite dans le vif du sujet

j'ai donc testé nos fonctions de tri avec un array de 10 000 nombres sans doublons


alors la insertionsort et la bubble qui sont les plus lentes bien entendu
et bien figurez vous que la version de chacune d'entre elle avec le JUMP EST PLUS LONGUE QUE SANS JUMP

Et là je vous le dit on marche sur la tête je vous le dis

la fonction mode insertion
sur 10 000 plus de 1000 passes en moins et c'est plus long

sans jump
Regarde la pièce jointe 1181990
avec jump
Regarde la pièce jointe 1181988

vous en comprendrez ma déconvenue
et pourtant j'ai la réponse
en fait que ce soit pour n'importe quelle methode le fait de passer de l'un a l'autre et intervertir
jusqu'a obtention de la bonne position fait que au passge les autres qui ne remplissaient pas le critère < ou plus grand ben il ont été déplacés aussi donc les prochains tours moins de travail

conclusion :
les méthodes insertion et bubble ne peuvent pas êtres améliorées pour des tri à grande échelle
le jump donne une toute petite amélioration dans les tableaux de petites tailles

passons au plus rapide

la quicksort et la fusion
et bien grosse déception de la fusion

la quicksort gagne la coupe
pas de beaucoup certes (l'ecart est de 0.01) ,et cela à chaque fois

donc 0.01 secondes de différence pour 10 000 items à trier
entre un code simple( la quicksort) et un code imbuvable (la fusion) mon choix sera vite fait

voila c’était les nouvelles du jour


je pense donc adapter la quicksort dans ma classe dictionary
Re @patricktoulon , @Dranreb et tous

J'ai du retard sur le post (trop surchargé :()

Pour ma part je comptais partir directement sur le quickSort qui est plus accessible que la fusion à mon niveau (mais je n'y suis vraiment pas habitué) et je n'ai envie de passer par une passerelle feuille/filtre …

sinon j'ai régler (normalement) les différents problèmes sur certaines fonctions (pas évident de faire son 1er module de clase) … là je travaille sur le quickSort …
Ha oui une dernière chose, j'aurais aimé y mettre les Objets, mais j'aurais surement besoin d'un peu d'aide dessus (une fois que j'aurais fini la 1e version)

PS : @patricktoulon
tu as fini de modifier ton code VBA qui permet d'écrire les pseudo en commentaires ?
 

RyuAutodidacte

XLDnaute Impliqué
Re Patrick
avec le lien que j'avais mis sur l'un de mes posts (Celui-ci), les explications sont claires, mais le comprendre et le faire sont 2 choses différentes qd on n'est pas habitué …
par contre là je repart d'un code existant que je vais modifier de Jacques Boigsontier (Paix à son âme) avec le TriShellMetzner que l'on trouve ici que je vais modifier pour être compatible à mon module de classe.

Je prendrai le temps par la suite à m'habituer à la logique du tri quickSort ;)

Bon si tout va bien, la version 1 je l'a fini ce soir en espérant que l'on ne trouve pas des couacs 🫣
 

RyuAutodidacte

XLDnaute Impliqué
Re,

Mon test de tri est ok sur les items et clé en ordre croissant et décroissant :
VB:
Sub testQSort()
Dim TB
    TB = Array("DKS§6", "Min§1", "MAX§3", "True§2", "False§4", "Boolean§5")
    TriShellMetzner TB
End Sub

'Code modifier RyuAutodidacte => origine code de Jacques Boigsontier
Function TriShellMetzner(a, Optional ordre As Boolean = True, Optional Sep As Integer = 167, Optional D$)
Dim inc As Long, i As Long, j As Long, n As Long, inv As Boolean, tmp As Variant, CheckOrder As Boolean
    n = UBound(a):       inc = n \ 2
    Do While inc <> 0
      For i = 1 To n - inc
        j = i
        inv = True
        Do While j > 0 And inv
          inv = False
          If ordre Then
            If Not IsMissing(Sep) And D = "D" Then CheckOrder = Mid(a(j), InStrRev(a(j), ChrW(Sep)) + 1) > Mid(a(j + inc), InStrRev(a(j + inc), ChrW(Sep)) + 1) Else CheckOrder = a(j) > a(j + inc)
            If CheckOrder Then tmp = a(j): a(j) = a(j + inc): a(j + inc) = tmp: inv = True: j = j - inc
          Else
            If Not IsMissing(Sep) And D = "D" Then CheckOrder = Mid(a(j), InStrRev(a(j), ChrW(Sep)) + 1) < Mid(a(j + inc), InStrRev(a(j + inc), ChrW(Sep)) + 1) Else CheckOrder = a(j) < a(j + inc)
            If CheckOrder Then tmp = a(j): a(j) = a(j + inc): a(j + inc) = tmp: inv = True:   j = j - inc
          End If
        Loop
      Next i
      inc = inc \ 2
    Loop
End Function

J'ai plus qu'a l'adapter dans mon module de classe sachant que il y a une partie non faite à rajouter pour que tout soit OK
 

patricktoulon

XLDnaute Barbatruc
je viens de le tester sur 10 000 nombres sans doublons il dure pareil que le fusion
donc à ce jour c'est quicksort qui gagne chez moi

et quand je regarde le code du trishellmetzner ca me fait penser au quicksort un peu quand même
il y a un pivot
mais c'est intéressant je vais l'ajouter dans le receuil
 

Statistiques des forums

Discussions
314 017
Messages
2 104 582
Membres
109 082
dernier inscrit
Narlock