OutIdx. Macro complémentaire, modules de classe et indexation

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour.
Essaye de compiler le projet OutIdx. Si ça coince, comme je le pense, sur ta machine, sur Private Declare Sub MoveMemory,
dans le module de classe TableIndex, mets au début la #Const AvecMoveMemory = 0 et réessaye de compiler le projet.
Mais à terme il serait souhaitable d'arriver à trouver comment on doit exactement écrire la Declare Sub MoveMemory sur ces machines.
Ce n'est pas normal, alors qu'elle est supposée plus rapide, d'être obligé d'y faire tourner une version dégradée de certains logiciels.
Si tu me trouve ça, je prévoirai une seconde valeur possible de cette constante de compilation conditionnelle qui appliquera cette syntaxe.

Je regarde pour mettre dans le prochain DémoOutIdx une animation qui classe un tableau.
À +
 

david84

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Re
Essaye de compiler le projet OutIdx.
Ci-joint les modification effectuées dans TableIndex :
Code:
#If AvecMoveMemory Then

#If VBA7 Then
 Private Declare PtrSafe Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#Else
 Private Declare Sub MoveMemory Lib "kernel32.dll" Alias "RtlMoveMemory" _
   (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#End If
' suite du code
Suite à cela, j'ai enregistré les fichiers.
Lors de l'ouverture du classeur Démo, il m'a été demandé d'actualiser les liaisons.
J'ai accepté et l'USF fonctionne correctement.
Pour l'instant, je n'ai donc pas eu besoin de modifier
Const AvecMoveMemory
Cette modification doit normalement permettre de garantir la compatibilité descendante avec les versions précédentes d’Office : cela fonctionne-t-il chez toi ?
NB : un message d'erreur peut apparaître lorsque tu colles ces modifications la 1ère fois. Si c'est le cas, enregistre quand même, ferme et ré ouvre le fichier pour voir ce que cela donne.
A+
 

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Résultat des courses: ça ne semble pas présenter d'inconvénient fonctionnel chez moi de l'écrire comme ça.
Cependant, à mon grand étonnement, alors que j'ai tout lieu de penser que l'instruction n'est pas compilée chez moi, elle est quand même signalée en erreur de syntaxe sur le mot clé PtrSafe (Attendu : Sub ou Function). Je vais devoir mettre un commentaire à coté pour expliquer que ce n'est pas grave. Curieux aussi que ce soit toujours kernel32.dll et pas kernel64.dll, et que ne soit pas utilisé un nouveau type de donnée que j'ai vu quelque part : LongLong. Mais enfin je te fais confiance, si tu dis que ça marche, je le laisse comme ça.
Ça vaudrait presque le coup de vérifier si, grâce à un accroissement de performance de ton MoveMemory, il n'y aurait pas lieu d'augmenter LimiteDicho. Mais je te préviens, il est très difficile de trouver l'optimal. Le quick-sort a beaucoup de mal à gagner inexorablement la partie à mesure qu'on augmente la taille des partitions traitées. Pourtant, dans cette méthode mixte, le gain en performance obtenu par la méthode dichotomique pour les petites partitions restantes est définitif: il s'accroît indéfiniment avec les tailles traitées en terme de temps absolu (parce qu'il y a alors de plus en plus de petites partitions qui en bénéficient), mais aussi de façon de plus en plus négligeable par rapport au temps mis par le quick-sort pur, quand les tailles deviennent vraiment grandes.
À +
 

david84

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Re
Cependant, à mon grand étonnement, alors que j'ai tout lieu de penser que l'instruction n'est pas compilée chez moi, elle est quand même signalée en erreur de syntaxe sur le mot clé PtrSafe (Attendu : Sub ou Function).
Cela a dû te le faire lors de la modification du code mais est-ce que cela ne te le signale ensuite ?

Curieux aussi que ce soit toujours kernel32.dll et pas kernel64.dll, et que ne soit pas utilisé un nouveau type de donnée que j'ai vu quelque part : LongLong
Je l'ai laissé en Long et cela fonctionne...j'ai pris mes infos Ce lien n'existe plus : regarde et dis-moi ce que tu en pense.
S'il faut faire d'autres tests sur la version 64 bits, je pourrai te les faire.

Ça vaudrait presque le coup de vérifier si, grâce à un accroissement de performance de ton MoveMemory, il n'y aurait pas lieu d'augmenter LimiteDicho. Mais je te préviens, il est très difficile de trouver l'optimal.
Peut-être plus tard. Attendons déjà de voir comment cela fonctionne sur les fichiers exemples où l'utilisation des différents modules de classe pourra être testée.
A+
 

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour.
Oups. J'ai oublié de te répondre david84.
Oui, l'erreur de syntaxe demeure définitivement signalée, mais n'empêche pas les compilations sans erreur du projet VBA.
Tu n'as qu'à ajouter PtrSife ou OuaterProuf dans l'ancien code chez toi, ça devrait faire pareil.

J'en pense que 64 bits ne simplifie pas les choses.

À par ça j'ai joint deux nouvelles versions des fichiers.
(Et je commence vaguement à me demander si je ne vais pas m'arrêter là…)

Cordialement.
 

david84

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour,
Fichiers testé sur une version 2007 (donc version 32 bits) avec les 2 fichiers enregistrés sur le bureau et pas en macro complémentaire : plantage à l'ouverture de OutIdx, évènement Click de BtReactu:
Code:
Me.Range(AL & "AidVM:AidDescr").Borders(xlEdgeTop).Weight = EpaissBordure: EpaissBordure = xlHairline
.Erreur dexécution 1004 "impossible de définir la propriété Weight de la classe Border".
Il serait sympa que d'autres personnes puissent tester pour savoir si cela fonctionne correctement chez eux.
À par ça j'ai joint deux nouvelles versions des fichiers.
Ce sont ces 2 fichiers que j'ai testés.
(Et je commence vaguement à me demander si je ne vais pas m'arrêter là…)
Ce serait dommage...
A+
 

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour.
Ce sont des instructions qui ne sont pas nécessaires à l'utilisation de OutIdx.
C'est propre à la feuille Aide et complètement indépendant du reste.
Chez moi, pas d'erreurs. Ces instructions visent à mettre une bordure épaisse au dessus d'un nouveau module (condition ZN = "": il n'y a pas de nom de procédure), moyenne au dessus de la 1ère procédure du module (définie dans EpaissBordure comme telle pour la suivante lors du 1er cas), et très fine au dessus des suivantes (définie comme telle pour la suivante à chaque coup). Faire une macro avec l'enregistreur pour voir comment la mise en place d'une bordure supérieure doit s'écrire sous 2007, et vérifier dans les instructions engendrées le type de donnée d'une valeur d’épaisseur de bordure affectée, que EpaissBordure As XlBorderWeight soit toujours bon. Ou bien mettre ces instructions en commentaires. Ou encore fusiller tout le code de Aide…
À +
 

david84

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Re
Ou bien mettre ces instructions en commentaires
c'est ce que j'avais fait mais je te signale ce qui plante pour que tu le saches.

Sinon, j'ai commencé à regarder tes exemples et je les trouve supers !

Exemple 1, j'ai compris je pense.

Exemple 2 : bien vu le tirage aléatoire !
Code:
Dim T() As Variant				
T = Me.[Tablo].Value				
Me.[Tablo].Value = OutIdx.TableauClassé(T, 9, 5, -12)
Peux-tu expliquer les 3 arguments après T, et notamment le -12 de ce tirage-là ?

Exemple 3 : le processus dichotomique est bien mis en évidence !

Exemple 5 (il n'y a pas d'exemple 4) : je ne comprends pas trop ce que tu as voulu mettre en évidence en utilisant cet exemple...peut-être pourrais-tu développer un peu.

De toutes les façons, le traitement de cas concrets issus des demandes placées sur le forum viendra utilement compléter et mettre en évidence l'intérêt de ces modules de classe.
C'est pourquoi il sera intéressant de placer en lien des discussions dans lesquelles ces modules auront servi à répondre aux attentes des demandeurs.

Ce n'est que par l'exemple que ceux qui suivent cette discussions arriveront progressivement à utiliser ces modules.

Concernant les modules de classe, suite à l'ouverture de ce fil, j'ai commencé à lire un tutoriel.
Je pense que j'aurai quelques questions à te poser plus tard.

FÉLICITATIONS !!!
A+
 

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Le problème c'est que je n'ai pas beaucoup de place pour expliquer ça, à moins de faire commencer le tableau beaucoup plus bas. Je vais quand même cet encadré: dis moi si c'est clair :
PlageClassée(Plage, Ags): Tableau de valeurs d'une plage reclassée.
TableauClassé(T, Ags): Tableau de Variant reclassé.
TbIdxTVcd(T, Ags): Objet TableIndex déjà indexé selon un tableau.
T: le tableau, Args: liste: signes: sens de classnt, val.abs.: n°colonnes
C'est un module tout fait pour les besoins les plus courants. Si besoin d'autre chose qui n'est pas non plus rendu par TbIdxTV de MDictionnArbo: s'écrire sa propre indexation (comme déjà vu ce sont très peu de lignes à écrire en dehors des comparaisons.)
Mais tu me fais penser qu'en dehors des démos il faudra que je mette une liste exhaustive de tous les services et fonctions de OutIdx avec des explications plus complètes.

Ben oui qu'est-ce que tu veux l'exemple 5 n'est pas encore fait. Je comptais un peu sur vous autres pour me soumettre au moins des sujets d'applications marrants. Mais je vois que je dois tout faire…:(
Qu'est-ce que je pourrais bien exploiter comme liste pour illustrer les dictionnaires arborescents utilisés en formules et références de noms ? Le sujet plus ou moins visé ce sont les liste de validations de saisies en cascades piquées d'une liste unique un peu comme celle pour la démo ComboBoxCasc.

À +
 

david84

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Re
Je vais quand même cet encadré: dis moi si c'est clair :
PlageClassée(Plage, Ags): Tableau de valeurs d'une plage reclassée.
TableauClassé(T, Ags): Tableau de Variant reclassé.
TbIdxTVcd(T, Ags): Objet TableIndex déjà indexé selon un tableau.
T: le tableau, Args: liste: signes: sens de classnt, val.abs.: n°colonnes
Pour pouvoir te répondre il faudrait déjà que je sois sûr de comprendre le mode d'emploi...
si je lis
Code:
Me.[Tablo].Value = OutIdx.TableauClassé(T, 1, 2, 3)
je comprends que le tableau est trié par ordre croissant en commençant par la colonne 1, puis la 2 puis la 3 : c'est cela ?
Si je lis
Code:
Me.[Tablo].Value = OutIdx.TableauClassé(T, -1, 2, 3)
, je comprends que le tableau est trié par ordre décroissant en colonne 1, puis par ordre croissant en colonne 2 puis en colonne 3 : c'est cela ?
Le problème, c'est que la génération des données telle qu'elle est proposée ne permet pas vraiment de se rendre compte au 1er coup d'œil des modifications suite au clic sur Exécution.

Mais tu me fais penser qu'en dehors des démos il faudra que je mette une liste exhaustive de tous les services et fonctions de OutIdx avec des explications plus complètes.
Effectivement

Ben oui qu'est-ce que tu veux l'exemple 5 n'est pas encore fait. Je comptais un peu sur vous autres pour me soumettre au moins des sujets d'applications marrants. Mais je vois que je dois tout faire…
Ben oui tant que les personnes ne savent pas utiliser tes modules, ils ne peuvent pas les exploiter.

Qu'est-ce que je pourrais bien exploiter comme liste pour illustrer les dictionnaires arborescents utilisés en formules et références de noms ? Le sujet plus ou moins visé ce sont les liste de validations de saisies en cascades piquées d'une liste unique un peu comme celle pour la démo ComboBoxCasc.
Et que pense-tu des listes en cascades que tu avais traitées ici ?
A+
 

MJ13

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour à tous

Merci Dranreb :) pour ta nouvelle version. J'ai bien testé, cela à l'air Ok sur XL2007, mais comme j'ai une autre vision de l'informatique, je ne pourrais pas suivre toutes tes périgrinations.

Je pense que pour 99,5 % des gens, cela va leur paraître un poil trop compliqué :eek:. C'est sans doute pour cela que tu n'as que David :) qui peut suivre et en plus il faut un peu de temps pout tout comprendre .
 

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour.
À David84. Oui le principe des Args de classement c'est tout à fait ça. Je suis ouvert à toute autre idée de génération de tables qui mettrait mieux en évidence le résultat. C'est justement ce qui me fait cruellement défaut: des idées de jeux de données
Ben oui tant que les personnes ne savent pas utiliser tes modules, ils ne peuvent pas les exploiter.
Je ne leur demande pas ça. Je demande seulement des jeux de données amusants.
Les liste en cascade que j'avais traitées comme ça, 1 je ne les trouve pas chouettes et 2 j'espère arriver à refaire ça avec moins de programmation, voire pas du tout (en dehors de OutIdx bien sur)

À MJ13. Dans son utilisation, c'est la simplicité qui est visée. On ne se pose pas de questions sur la complexité du solveur par exemple ! Je ne vais quand même pas masquer le projet OutIdx, pour qu'on ne puisse plus voir ce qu'il a dans le ventre, si ?
Cordialement.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour à tous

Dranreb
EDITION: Je viens de télécharger les nouvelles versions de tes fichiers.
Je prends le temps de les étudier et je repasserai dans le fil en parler avec vous.


...
Je ne vais quand même pas masquer le projet OutIdx, pour qu'on ne puisse plus voir ce qu'il a dans le ventre, si ?
Cordialement...

Surtout pas, Dranreb !

PS: Je suis assidument cette discussion, hélas pour le moment en lecture seule, par manque de temps.
J'essaierai de rejoindre mes petits camarades ce week-end et cette fois non plus en tant que lecteur ;)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour à tous.
La nouvelle version 5 à été jointe.
OutIdx: pas de grands changements. 1 Nouvelle fonction et 1 nouvelle méthode (d'usage marginal)
DémoOutIdx: Une liste des fournitures en tête, la vérification du lien à OutIdx mise également au service d'autre classeurs que lui même, un graphique mettant en évidence la part Quick-Sort du fonctionnement de l'indexation, enfin la démo DicArbo développée sur un thème gastronomique.
Cordialement.
 

david84

XLDnaute Barbatruc
Re : OutIdx. Macro complémentaire, modules de classe et indexation

Bonjour,
Merci Dranreb pour cette version actualisée.
Tout d'abord, à l'ouverture du fichier Démo, plantage sur $Left et $Mid : l'ajout de VBA. devant ces fonctions permet de régler le problème (test effectué sur une version 2007).

J'ai commencé à regarder ceci :
enfin la démo DicArbo développée sur un thème gastronomique
Pour info, lors du choix de la catégorie et de l'aliment, la casse n'est pas ignorée (Viandes ok/viandes ne donne rien).

Code:
=OutIdx.xls!DicArbo(1;LstCatg;LstAlim)
A quoi correspond l'argument 1 de cette fonction ?
Peut-on le faire varier ?
La phrase en J44 ne me paraît pas complète.
J'arrête là pour le moment.
A+
 

Discussions similaires

Statistiques des forums

Discussions
314 634
Messages
2 111 427
Membres
111 133
dernier inscrit
dominique001