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:

laurent950

XLDnaute Barbatruc
Bonjour @Dranreb, @patricktoulon

La différence porte dans la directive "Attribute Item.VB_UserMemId = 0" ajoutée au fichier du module par voie externe, et à ma Sub TestDico qui fonctionne chez moi sans qu'il ne soit plus absolument nécessaire de préciser Item dans

C'est cela la méthode pour arriver à faire ce que tu fais ?

la possibilité de définir la propriété par défaut d'une classe personnalisée en VBA, de manière à ce que vous n'ayez pas à spécifier le nom de la propriété lors de son utilisation.

1) Exportation du module : Tout d'abord, vous exportez le module de classe (qui contient votre classe personnalisée) depuis l'éditeur VBA. Cela générera un fichier texte (.cls) contenant le code de la classe.

2) Modification du code : Ensuite, vous ouvrez ce fichier texte dans un éditeur de texte, tel que WordPad. Vous pouvez ajouter une ligne dans le module pour spécifier quelle propriété doit être la propriété par défaut. Par exemple, si votre propriété est "Nom", vous pourriez ajouter une ligne comme celle-ci :
Attribute Nom.VB_UserMemId = 0
Cela indique que la propriété "Nom" doit être la propriété par défaut (VB_UserMemId = 0).

3) Sauvegarde des modifications : Après avoir fait cette modification, vous enregistrez le fichier texte.

4) Importation du module modifié : De retour dans l'éditeur VBA, vous importez le module modifié pour remplacer le module d'origine.

5) Utilisation de la propriété par défaut : Une fois que cela est fait, les utilisateurs de votre classe pourront accéder à la propriété par défaut sans avoir à spécifier son nom. Par exemple, si la propriété "Nom" est définie comme propriété par défaut, vous pourrez faire ceci :
Dim MaPersonne As New ClassePersonne
MaPersonne.Nom = "John Doe" ' Pas besoin de spécifier .Nom
MsgBox MaPersonne ' Cette ligne fonctionnera comme si vous aviez écrit MaPersonne.Nom

C'est cela @Dranreb ?
 

patricktoulon

XLDnaute Barbatruc
re
voila ce que j'ai

demo.gif
 

Dranreb

XLDnaute Barbatruc
Il vaudrait mieux faire des essais avec un autre module de classe, parce que la propriété par défaut d'un Dictionary c'est Item, pas Keys ! Là je ne vois rien dans cette animation, ça va trop vite. À peine eu le temps d'y apercevoir que la 1ère occurrence de la Property Keys dans les vraies lignes reproduites du fichier module ne semblait pas suivie de la directive Attribute Keys.VB_UserMemId = 0
Ah, si je l'ai vue ensuite, mais elle est précédées d'une Function Keys ? qu'est-ce que c'est que ce bazar ?
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
RE
Ah, si je l'ai vue ensuite, mais elle est précédées d'une Function Keys ? qu'est-ce que c'est que ce bazar ?
j'ai simplement remplacé la fonction keys par la property get keys avec le même code à l’intérieur


  1. J ai pris mon classeur
  2. ajouter ton module
  3. changer Item pour "Keys" dans l'appel de ta sub dans ton module
  4. j'ai envoyé la sauce
  5. enlever le".keys" dans ma sub qui teste ma classe
  6. et j'ai lancer le ême test que j'ai montrer depuis le debut
résultat dicoP("toto") me renvoie un rien du tout mais je n'ai pas d'erreur
 

laurent950

XLDnaute Barbatruc
Re @Dranreb
Oui, encore que la Sub InstallerMembreParDéfaut de mon module MItemParDéfaut s'occupe de toutes les manip.
On lui indique en arguments le Nom du membre à assumer par défaut, le classeur dont le projet est à changer et le nom du module de classe concerné.
Nécessite un accès approuvé au modèle d'objet du projet VBA.

Cela a l'air assez complexe quand même, je n'ai pas l'idée de comment vous réaliserez cela.
C'est intéressant comme concept mais je vois pas comment créer cela ?
Vous êtes très fort.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour @Dranreb
le voici
il ne te reste plus qu'a lancer ta sub et à remplacer "patrickdictionary" par "patrickdictionary1" dans le module1 et suprimer les ".keys" dans la sub de tests après avoir lancé ta sub

teste avant de mettre ton astuce et teste après
 

Pièces jointes

  • exemple pour XLD classe sans collection.xlsm
    25.2 KB · Affichages: 2
Dernière édition:

RyuAutodidacte

XLDnaute Impliqué
Coucou tous ;),

J'aime bien !!! les post de ce genre ca m'avait manqué 🤣
Hein … n'est ce pas Patrick ;) ou nous partons sur l'exploration des possibilités ;)

Bon j'ai bien avancé sur ma version, il me manque le Tri et le reverse, si je n'ai pas oublié autre chose …
j'ai l'overwrite et le cumule
 

patricktoulon

XLDnaute Barbatruc
re
a ben moi j'explore plus
j'ai 3 modèles qui fonctionnent (2collection / 1 collection / sans collection)
j'ai même des fonctions en plus que le vrai dico n'a pas

non en fait je suis intéressé par l'astuce de @Dranreb c'est tout ,qui me permettrait d'imiter à 100% le vrai dico dans son utilisation dans une sub ;)
ça serait le pompon
 

Dranreb

XLDnaute Barbatruc
Bonjour.

Après avoir exécuté
InstallerMembreParDéfaut Membre:="keys", Wbk:=ThisWorkbook, Classe:="patrickdictionary"
J'ai chez moi les mêmes résultats affichés à l'exécution de la Sub test_dico_de_patrick après y avoir enlevé les .Keys, c'est à dire à ces 3 instructions :

VB:
'    k = dicoP.keys
    k = dicoP
    …

'    MsgBox dicoP.keys("toto")   'donne la valeur associé à toto
'    MsgBox dicoP.keys(k(1))     'donne la valeur associé à toto
    MsgBox dicoP("toto")   'donne la valeur associé à toto
    MsgBox dicoP(k(1))     'donne la valeur associé à toto
le 1er affiche la liste des clés, chacun des 2 autres: 34

Le Dictionary le plus proche possible de celui de la Scripting c'est ce que j'essaye de faire depuis le début.
Sauf que ça ne me paraissait pas trop gênant de devoir préciser .Item, vu que le code ainsi corrigé continue ainsi de fonctionner après avec un Scripting.Dictionary
 

Membres actuellement en ligne

Statistiques des forums

Discussions
315 111
Messages
2 116 340
Membres
112 721
dernier inscrit
Ulricn