|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | |
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Salut a tous.
Je souhaiterais réaliser des macros excel pour.... je vais t'enter d'expliquer. J'ai des données d'entrées par type (support, prefixe, suffixe)(les trois étant obligatoire pour un objet complet) qui si on en mélange deux, en donne une troisième (sauf si on mélange les deux même forcément) Le but étant de savoir si avec x données on arrive en mélangeant (dans tous les sens possibles) on arrive au résultat que l'on désire (avec affichage de comment avec les données d'entrée arriver au résultat) C'est pour un jeux, dans lequel nous pouvons faire évoluer nos personnages avec leurs équipements (comme dans bcp de jeux RPG) Le but étant de faire de meilleurs équipements à moindre frais. Voici un exemple de donnée d'entées, et sous l'onglet "Fusion" une pseudo vue de ce que je souhaiterais obtenir A telecharger EDIT: je viens de voir que les liens externes étaient coupés... je ne sais donc pas si mon problème est assez explicite Citation:
Merci Kenavo =) |
|
|
|
10
|
|
|
#2 | |||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Hello Mangaku,
Founir entre les balises [code] et [/code] la description de votre feuille suivant le modèle suivant :Code :
Citation:
Etre concret au lieu de "x données", précisez le type des données et une exemple simple de jeu de test minimal. Décrire avec précision dans les commentaires des constantes les données en entrée et le résultat attenu. ___________ En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.
|
|||
|
|
10
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Une réponse
Je me désespérais =) Pour répondre aux questions, j'ai justement mit le lien vers le fichier XLSX. Les données sont un tableaux. Ou le croisement en X et Y donne une valeur définie. Si on reprend cette valeur, et que l'on regarde ce qu'elle donne avec une autre valeur, donc toujours selon X ou Y, on obtiendra une nouvelle valeur. Le nom des constantes est tout a fait variable. Peut etre justement créer un code en mettant des 1,2,3,4,5,6,7 en fonction plutot que des noms? Un peu comme dans mon fichier sous l'onglet "anneau" ??? Ma demande est assez étrange, et même moi je ne sais comment le définir. Je comprends ce que je veux (forcément) mais je ne vois pas comment l'expliquer plus qu'avec mon fichier joint au premier post Je suis pas dedans moi... les liens externes ne fonctionnent pas -____-' Je vous mets trois images du fichier explicatif: Le premier pour un onglet "anneau" Un pour l'onglet Arme a Distance L'autre pour ce que je souhaiterais: les fusions. Sachant qu'il y a de nombreux autres onglets d'objets: anneau, amulette, arme une main, arme deux main, pantalon, armure, casque... --------------------------------- --------------------------------- EDIT: Plus d'actualité --------------------------------- --------------------------------- Merci, et désolé de mon manque d'attention PS: les images sont grandes, mais le forum ne les accepte pas autrement |
|
|
10
|
|
|
#4 | |||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Probablement dans un premier temps les deux premières captures arrivent trop tôt.
Partez de la dernière plus synthétique et décrivez chaque colonne telle que Cible, En Stock, Prix et comment retrouver l'information comme le Prix en commentaire selon le principe basique. Code :
Selon votre niveau d'implication dans votre projet, vous aurez des lecteurs qui pourront s'intéresser à votre projet et répondre à des questions précises. Citation:
Citation:
Qu'est-ce qu'on peut acheter ? Combien cela coûte ? De quelle rangée à quelle autre rangée ? Dans quelle colonne. Etc. Où doit-on afficher le résultat ? Citation:
C'est pour cela que j'ai pris le temps de fournir un exemple concret pour que vous puissiez dès maintenant créer votre module ModRpg et décrire ce que vous voyez dans votre feuille. Il ne faut pas répondre dans les dix minutes. Il faut prendre le temps d'analyser le projet. |
|||||
|
|
10
|
|
|
#5 | ||||||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Citation:
Car cela permettrait en plus de regarder les possibilités avec des objets que l'on serait susceptible d'obtenir, donc de prévoir un peu à l'avance. Pour le prix, ceci n'est qu'une indication. Comme je le dis, un prix plus élevé peut etre plus avantageux quand meme. C'est juste que au final, il n'est pas un facteur primordial, et que ce n'est un facteur que seul celui qui fera les fusions calculera et prendra en compte. Citation:
- fusionner deux objets => si objet obtenu = objet désiré, retenir la solution, et essayer avec une nouvelle combinaison => si objet obtenu différent de l'objet désiré, garder objet obtenu en vue de le fusionner avec un autre en stock + essayer avec une nouvelle combinaison d'objets Citation:
On peut tout acheter. Mais on a pas tout en stock. Pour ca que le stock rentré "à la mano" semble la bonne solution. Avec ce stock, et avec les relations définies sous les autres onglets (onglet anneau par exemple) regarder avec le stock rentré à la main ce que l'on peut obtenir, et si on peut obtenir ce que l'on désire (l'objet que l'on aura renté comme désiré) afficher comment le faire. Citation:
Voici un exemple de ce que j'ai déjà pu faire: Citation:
Citation:
Et que du A+B+C nous a donné le résultat final. En espérant avoir été plus explicite, ou plus clair. (jamais été très bon pour expliciter tout ce que j'ai en tête EDIT: pas l'habitude de noter. Effectivement, +1 pour ton aide, et ton orientation dans les explications que je peux donner |
||||||
|
|
10
|
|
|
#6 | ||||||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
La description ci-dessus est parfaite ... dans un forum RPG.
Dans un forum Excel VBA, vous allez transcrire vos réponses du langage naturel en langage VBA. Ce qui est demandé pour votre prochain message est de poster le code de votre module ModMerge entre les balises [code] et [/code]. Quand vous ne savez pas la syntaxe VBA, vous écrivez la ligne en commentaire VBA c-a-d avec une simple apostrophe ' (quote) en début de ligne. Il faut éviter la complexité des pronoms, relatives, etc. du langage naturel et écrire en commentaire des phrases courtes, une par ligne. 1. Ouvrir votre classeur Fusion.xls 2. Cliquez l'Excel menu "Outils" > "Macro" > "Visual Basic Editeur" (Alt+F11) appelé VBE Le VBE s'ouvre en avant-plan des feuilles Excel. Dans la fenêtre "Project - VBAProject", vous reconnaîtrez votre VBAProject (Fusion.xls) avec la branche "Microsoft Excel Objects" contenant vos trois feuilles "Anneaux", "Armes à Distance", "Fusion" et ThisWorkbook. 1. Créez le module ModMerge Cliquez sur le VBE menu "Insérer" > "Module" Une nouvelle fenêtre s'ouvre dans le VBE : c'est la fenêtre d'Edition du code de Module1. Dans la fenêtre "Project - VBAProject", la nouvelle branche "Modules" est apparue. Elle contient Module1. 1.1 Préparez l'environnement de développement En général on trouve la fenêtre "Propriétés" sous ou à côté de la fenêtre "Project - VBAProject". Si ce n'est pas le cas, cliquez sur le VBE menu "Affichage" > "Propriétés" (F4) Après un menu, on indique entre parenthèse le raccourci clavier. Suivant la langue d'Excel, les libellés des menus peuvent différer. Vous retrouverez le menu à cliquer également grâce au raccourci clavier. Tant que vous êtes dans le VBE menu "Affichage", cliquez sur : VBE menu "Affichage" > "Fenêtre d'Exécution" (Ctrl+G) (Immediate Window) VBE menu "Affichage" > "Fenêtre des Variables Locales" (Locals Window) Réarranger la fenêtre d'Exécution immédiate et Locale dans la même rangée sous la fenêtre d'Edition de code qui doit prendre la place prépondérante. Dans la fenêtre des Propriétés, renommer "Module1" en "ModMerge". Cela n'a pas de sens de laisser le nom par défaut. Bien sûr vous pouvez choisir un autre nom commençant par "Mod" puis un autre nom débutant par une majuscule tel que "ModFusion". Déjà cela montrera au lecteur, le but de votre module en choisissant un nom judicieux. 2. Description de la feuille "Anneaux" Copier le modèle de code du message #2 et coller le dans ModMerge. En ligne 3, il y a la constante nameSheetSource = "..." C'est à vous à la renommer en : Code :
Public Const nomFeuilleSrcAnneaux = "Anneaux" ' Commentaire ... C'est à vous à trouver les abréviations telle que "Src" signifie "Source" de données en donnant l'explication en commentaire. Si on lit l'information dans la feuille nomFeuilleSrcAnneaux, si on n'y écrit jamais, utiliser "Src" dans son nom. Voilà le genre d'information indispensable pour qu'une macro puisse utiliser cette feuille. Si ce n'est pas le cas par exemple si on peut renseigner c-a-d écrire dans la zone de recherche, expliquez en commentaire de certaines rangées ou colonnes, que c'est là qu'il faudra écrire. Cela facilite le projet d'avoir certaines feuilles en lecture seule. S'il faut également y écrire, cela complexifie la description et le code final. Notez après la valeur "Anneaux" de la constante nomFeuilleSrcAnneaux, l'apostrophe ' qui annonce un commentaire obligatoire. Un commentaire apparaît en vert dans la fenêtre d'Edition de ModMerge. Si vous pouvez garantir que cette feuille restera en première position dans le classeur Fusion.xls, alors remplacer cette constante par un n° de feuille, cela sera plus efficace qu'un nom de feuille. Code :
Public Const indFeuilleSrcAnneaux = 1 ' La feuille "Anneaux" est la première du classeur. Elle permet de ... 2.1 Le premier tableau "Recherche dans les tableaux" On y voit une zone "Recherche dans les tableaux" Décrivez à quelle rangée cette zone commence. Code :
Code :
Attention il ne faut jamais mettre d'accent dans les noms des constantes, variables, procédures. Ce tableau semble (il n'y a que vous pour savoir interpréter correctement chaque tableau) n'avoir qu'une colonne de ... Stroumph ... (inventer le terme qui caractérise cette colonne) : Code :
Public Const colSearchStroumph = 3 ' En colonne C = 3ème lettre dans l'alphabet, on trouve ... Excel menu "Outils" > "Options" > Onglet "General" Cochez l'option [x] R1C1 reference style Notez comment les coordonnées rowSearchSupport et colSearchStroumph partagent le même cœur "Search" qui identifie le fait qu'elles appartiennent au même tableau "Search". 2.2 Le second tableau Dans le second tableau, il faudra trouver un nom bien sûr différent, et expliquez en commentaire pourquoi certaines cellules sont vertes. On voit également un chiffre de 1 à 3 au-dessus et à droite du tableau. Indiquez en commentaire le pourquoi de cette numérotation alors qu'on peut la déduire du nombre de rangées et de colonnes. 2.3 Le troisième tableau Dans le troisième tableau étant donné que c'est une matrice 28 x 28, il y a intérêt à trouver une structuration de type : nombre maximum, début et fin : Code :
Attention le fait d'éviter de définir les 28 constantes de rangées et 28 autres de colonnes n'empêche pas une description supplémentaire. la création de la famille Stroumphette impose de décrire chaque élément. Ce n'est plus en terme de colonne ou de rangée mais de n° d'item dans la famille Stroumphette. On parle alors de l'énumération des 28 éléments constituant la famille Stroumphette : Code :
Appliquer la même approche descriptive pour le 4ème tableau. 3. Description de la feuille "Armes à Distance" Maintenant que vous avez vu le principe de nommage des constantes, vous allez le décliner sur la seconde feuille. Notez comment en ligne 2 et 11 du modèle du message #2, on a utilisé un commentaire avec des séries de "=========" pour bien marquer (structurer) la séparation entre la description de deux feuilles et commencer la description d'une nouvelle feuille. La second feuille de nom nomFeuilleSrcGun ou d'indice indFeuilleSrcGun a une structure identique à la précédente. Il faudra être inventif pour créer des noms de famille représentatifs. 4. Description de la feuille "Fusion" La troisième feuille de nom nomFeuilleTargetMerge ou d'indice indFeuilleTargetMerge a une structure de feuille cible (Target) sur laquelle il faudra vraisemblablement écrire un résultat attendu qu'il va falloir décrire avec précision en commentaire des constantes de rangées et de colonnes. On y voit en rangée rowCible = rowStock, une structure identique Objet, Préfixe, Suffixe sauf que le concept de "Support" de la feuille indFeuilleSrcAnneaux a disparu et a été remplacé par le concept d'"Objet" alors qu'il semblerait qu'ils recouvrent le même concept. C'est la que vous intervenez pour lever les ambiguïtés parce que si un "Support" est différent d'un "Objet", il va falloir expliquer la différence et donner les règles de passage de l'un à l'autre. Une notion de "Prix" est introduite en colonne colPrice. Il faudra indiquer comment on obtient chaque prix. En guise d'exemple, je commence pour vous montrer ce qui est attendu comme commentaire dans ModMerge. Code :
Notez comment les phrases sont courtes et tiennent sur une seule ligne préfixée par ' Si vous ne passez pas une bonne heure à structurer la description de vos feuilles, un tel langage sera incompréhensible si ce n'est pas vous qui crée chaque notion en inventant le nom le plus approprié, vos commentaires étant là pour que les lecteurs puissent vous relire. 5. Résultat attendu de la fusion La feuille indFeuilleTargetMerge propose deux solutions. Cela signifie que l'algorithme doit lister une ou deux solutions dans une combinatoire à définir. Au-delà de la description statique par des constantes, on s'intéressera ultérieurement à l'aspect dynamique. Il faudra alors indiquer comment construire chaque solution, évaluer son score c-a-d son prix et lister la ou les deux meilleures. Il faudra indiquer en commentaire de la procédure Merge() dans le module ModMerge, le scénario d'une session tel que : 1. Saisie du stock par l'utilisateur. 2. Définir la cible souhaitée? 3. Recherche et affichage du ou des solutions. |
||||||||||
|
|
10
|
|
|
#7 | ||||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Pfiouuuu. Moi qui y connait rien, j'ai surnagé parfois :o
J'ai commencé à créer ce qui me semblait... opportun. A noter que les feuilles nomFeuilleSrcAnneaux ne sont que des tableaux indicatifs. La coloration verte est dépendant de la case "Rechercher dans les tableaux" qui pearmet de faire ressortir ce que l'on cherche, dans le cadre d'une recherche de fusion à la main. J'ai refais mon fichier, pour qu'il corresponde peut être plus à ce qui serait utile. Citation:
Citation:
J'ai supprimé la colonne prix, qui n'était qu'à titre indicatif. Elle ne sera utile que de manière manuelle. Donc pas à implémenter. J'ai aussi modifier Support/Objet. Il s'agissait bien de la même chose. Sorry pour l'ambiguité ! Nouvelle question cependant: peut-on du coup mettre plusieurs données différentes dans la même feuille (Anneau et AAD par exemple) (comme je l'ai fait du coup) ou doit-on créer une feuille par type d'objet ? (il faut savoir que j'aurais a terme 10 objets différents possible. Anneau et AAD en étant que deux) En espérant avoir un peu comprit tout ça, et donc avoir rempli correctement le fichier. Et que ce sera plus clair du coup EDIT: Si on par sur le principe de: Code :
J'ai comme l'impression que ca va pas être clair du tout, tout ce que je viens de rajouter en EDIT |
||||
|
|
10
|
|
|
#8 | |||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
C'est un début prometteur !
![]() 1. Fusion version 0.7 Il sera intéressant que vous assurez la gestion d'un numéro de version. Le dernier indice .1 indique le nombre de republication pour évolution ou correction de bugs. Exemple Fusion07.xls que vous incrémenterez à chaque version. 1. Ouvrir votre classeur Fusion07.xls 2. Ouvrir le VBE (Alt+F11) Cliquez sur le module ModMerge pour ouvrir sa fenêtre d'Edition de code. Sélectionner l'ancien code et remplacer le par celui après un copier-coller : Code :
2. Tester le module ModMerge Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER : La feuille "Données Fusion" a été lue par VBA en moins d'une seconde. 3 Le "?" signifie que l'on pose une question à VBA. Et il répond à la ligne suivante dans la fenêtre d'Exécution immédiate. Attention il ne faut pas d'accent dans les noms de constantes comme indRingSuppChevalière ou indRingPrefDistingué, variables et procédures. On ne peut mettre des accents que dans des chaînes littérales comme "Chevalière". Code :
? SupportToString(indObjRing, indRingSuppChevaliere) La fonction SupportToString() convertit, pour l'objet indObjRing, le support indRingSuppChevaliere en chaîne de caractère : "Chevalière". On a renommé le nom de la constante en mettant le nom de l'objet "Ring" avant sa propriété "Supp" signifiant support. Les noms sont plus courts. Code :
? PrefixeToString(indObjRing, indRingPrefAstucieux) Voici un préfixe de l'objet Ring. Code :
? SuffixeToString(indObjAad, indAadSuffPerfection) Notez comment on a changé d'objet avec le premier paramètre indObjAad. Le second paramètre de SuffixeToString() est le n° de suffixe que l'on obtient en interrogeant la relation entre les propriétés "Beauté" et "Concentration". Vous vérifierez plusieurs combinaisons pour chaque objet et comparerez avec la feuille des supports, préfixes et suffixes afin de valider qu'il n'y a pas de bugs dans ce tableau. Code :
? SuffixeToString(indObjRing, SuffixeRelation(indObjRing, indRingSuffBeaute, indRingSuffConcentration)) Code :
? CorrelationToString(indObjAad, indSupport, indAadSuppPilum, indAadSuppShuriken) CorrelationToString() est plus générique puisqu'on passe en paramètre le type d'objet, le type de propriété et les deux propriétés dont on cherche la troisième. 3. Questions et réponses Citation:
Citation:
Il faut veiller à respecter le même nombre de rangées vides entre deux familles d'objets. Citation:
Code :
' Peut-on envisager une macro de vérification syntaxique de l'objet cible, et des objets en stock
4. Décrire la feuille "Fusion" Pour le bouton "Recherche des Solutions", préférerez "Fusion" puisqu'il ne faut trouver qu'une solution au singulier. Comme il s'agit d'un bouton, préfixer son nom par "Btn" signifiant bouton. Dans ses propriétés, la première est : Elle peut devenir : C'est un nom interne connu que du développeur de macro. Ce que voit le joueur est la propriété Caption = "Fusion" ou "Solution". Code :
' Un classement croissant fonction du nombre d'iteration a réaliser pour obtenir l'objet cible serait un plus
Raffinez la description de MergeObject(). Passe-t-on comme paramètre l'objet cible à atteindre ? Quelle est la relation entre l'objet cible et les objets en Stock ? Répondez sous forme de commentaire VBA dans un extrait de ModMerge décrivant le Stock et l'objet cible. |
|||||
|
|
10
|
|
|
#9 | |||||||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Et bhe...
Quelle évolution ! Merci déjà. Ca m'encourage à vraiment comprendre ce qui se passe et y mettre mon petit grain de "folie" Sinon, il y a pas mal de choses que je ne comprends plus du coup faut bien avouer ![]() Code :
Code :
? SuffixeToString(indObjRing, SuffixeRelation(indObjRing, indRingSuffBeaute, indRingSuffConcentration)) Merci ! Citation:
Mais je souhaiterais que si la fonction Merge() trouve, par exemple, 7 solutions elle m'indique ces 7 soltions afin que je puisse décider de quelle solution semble la plue pérenne pour moi dans le jeux. Citation:
Quand j'aurais implémenté les 8 autre types d'objets (avec leur supports, préfixes et suffixes, je regarderais ça de plus prêt !) Citation:
Je me demandais juste si cela aurait favorisé le codage, et la durée de traitement par excel. Citation:
En simplifiant: faire un bouton qui lance la macro: vérifier l'orthogaphe ET un autre bouton qui lance la macro Merge(). Non? Citation:
Mais si la fonction merge trouve une solution en 3étapes, une autre en 4étapes, et deux dernières en 5étapes, ce serait bien qu'elle affiche dans l'ordre: 3étapes - 4étapes - 5étapes - 5étapes J'ai tenté de décrire encore un peu la fonction merge ! Merci...again ![]() PS: j'aurais donc les données, comme dans mon fichier d'hier à implémenter pour les autres types d'objets La fonction Sub InitRpg() Toutes les parties Case des fonctions suivantes C'est bien cela? (en espérant que je ne me tromperais pas !) PS2: je dois zipper le fichier car il fait 150Ko et c'est au dessus de la limite autorisée par le forum EDIT: à noter que je n'ai plus accès au clique droit sur mon bouton, lorsque je suis sur le feuille Fusion. Et que je ne peux plus le déplacer non plus -___-' |
|||||||
|
|
10
|
|
|
#10 | |||||||||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
Citation:
![]() 1. La quatrième dimension Citation:
en un seul tableau à ... 4 dimensions. Cela simplifiera les modifications pour ajout d'autres objets. Les quatre dimensions sont :
Code :
Les tableaux de corrélation sont déjà décrits dans la feuille "Donnés fusion". InitRpg() lit le tableau et copie chaque relation dans le tableau interne arrObjRel dont le nom est construit en prenant les 3 premières lettres de array, objet, relation. Si on copie ces relations dans un tableau VBA, c'est que l'accès sera beaucoup plus rapide que de relire plusieurs fois les cellules de la feuille. 2. Description simplifiée des objets Citation:
3. Comment utiliser la fenêtre d'Exécution immédiate ? Citation:
Vous avez dû ouvrir la fenêtre d'Exécution immédiate dans 1.1 Préparez l'environnement de développement du message #8. Sinon ouvrez cette fenêtre. Cliquez sur le VBE menu "Affichage" > "Fenêtre d'Exécution" (Ctrl+G) Cette fenêtre permet de lancer une macro en indiquant son nom ou tester une expression VBA en ajoutant un point d'interrogation devant ou apprendre le langage VBA. Copier-coller l'expression suivante et valider par ENTER : 18/08/2011 Contrairement au français où le point d'interrogation se trouve en fin de phrase, en informatique il faut souvent inverser les choses. Le point d'interrogation débute la requête dans la fenêtre d'Exécution immédiate pour demander à VBA d'évaluer l'expression qui suit. On a demandé à VBA d'afficher la date courante en utilisant le mot-clé "Date" qui est une fonction intégrée dans VBA retournant la date courante. Cette fonction VBA est basique. Elle n'a pas de paramètre à mettre entre parenthèse. Ce n'est pas le cas de la fonction SuffixeToString() qui demande deux paramètres : l'objet et la propriété de type "Suffixe". Code :
? SuffixeToString(indObjRing, SuffixeRelation(indObjRing, indRingSuffBeaute, indRingSuffConcentration)) La chaîne littérale "Justesse" a été écrite dans la fenêtre d'Exécution immédiate par la macro SuffixeToString() qui convertit une propriété de type "Suffixe" en String c-a-d en chaîne de caractère. Cette propriété de type "Suffixe" appartient à l'objet Ring identifié par le 1er paramètre à savoir son indice indObjRing dans la famille des objets. L'indice de la propriété de type "Suffixe" a été calculé par une autre macro que l'on pourrait lancer indépendamment par : Code :
? SuffixeRelation(indObjRing, indRingSuffBeaute, indRingSuffConcentration) C'est la propriété de corrélation entre "Beauté" et "Concentration" dans la propriété Suffixe de l'objet Ring. Seulement 10, ce n'est pas très parlant d'afficher que c'est la 10ème propriété de type "Suffixe" de l'objet Ring. C'est pourquoi on a demandé de convertir ce nombre en une String. Justesse Maintenant si vous remplacez le 10 par l'appel de la fonction SuffixeRelation() avec ses deux paramètres, vous obtiendrez l'expression initiale avec ses parenthèses imbriquées. C'est l'imbrication de fonctions en mathématique : f(x, g(y)) d'où les deux parenthèses fermantes imbriquées "))". Le but est de vérifier que la corrélation entre "Beauté" et "Concentration" donne bien "Justesse" même si cela a été indiqué dans la feuille "Données Fusion". S'il y a une erreur d'indice, un décalage, un mauvais n° de description de la 1ere rangée ou de colonne, la fonction renverra la chaîne vide invisible ou n'importe quoi au lieu de "Justesse". Il faut donc bien vérifier que cette fonction SuffixeRelation() ainsi que les autres fonctionnent correctement en prenant d'autres exemples de propriétés de type "Suffixe". Idem pour les autres types. 4. Modification du classeur vs. du module Vous avez ajouté un commentaire en fin de ModMerge. Il vaut mieux éviter de publier le .zip s'il n'a pas modification importante d'une feuille. Copier-coller l'extrait du module entre les balises [code] et [/code]. Dans la barre d'outils de l'éditeur du message du forum, sélectionner l'extrait de code à la souris et cliquez sur le bouton "#" qui ajoutera ces deux balises automatiquement pour vous.Il faut faire des phrases courtes dans un style télégraphique en utilisant les constantes définies dans ModMerge. Une seule phrase par ligne sans parenthèses. 5. Commentaire en pseudo-code Code :
' Exemple de mon casque. J'ai comme objet cible un chapeau tigre de l'adrénaline.
Il faut indiquer son nom de constante ou la mettre entre guillemets et décomposer si nécessaire chaque élément en terme de support, préfixe et suffixe. Je suis incapable de dire si "Chapeau" est un support, "Tigre" un préfixe et "adrénaline" un suffixe ou si l'ensemble "chapeau tigre de l'adrénaline " est un support. Comparer avec les deux lignes suivantes : Code :
Citation:
Refaire un exemple avec un objet Cible déjà connu tel que Ring et/ou Aad et un Stock minimal que l'on décrira. Lister chaque étape dans le détail, d'où l'idée d'avoir un Stock minimal et une Cible, les deux les plus simples possibles pour limiter le nombre d'étapes. Cela devrait tenir sur une seule ligne par itération éventuellement avec un commentaire en fin de ligne. Si la description d'une étape comme la première nécessite plus d'une ligne, on pourra la raffiner. Décrire en pseudo-code VBA sans se préoccuper de la syntaxe puisque c'est du commentaire. Code :
Le pseudo-code est un style télégraphique, court où on a isolé les termes utilisés par ModMerge. Chaque phrase commence par un majuscule. Cela signifie que la précédente est terminée. Ce n'est surtout pas littéraire avec des relatives et des pronoms mais syntaxique avec des délimiteurs, des séparateurs, des guillemets, un point d'interrogation pour poser une question, des égalités, des justifications sur les indices de boucles, étape suivante, critère d'arrêt. Il faut qu'à la lecture, on puisse en déduire le cas général pour une famille d'objets ou pour plusieurs types de propriétés. Qu'est-ce qui est fixe d'une itération à l'autre ? Qu'est-ce qui change d'une itération à l'autre ? Réponse en commentaire. 6. Interface Graphique Utilisateur (GUI) sur la feuille "Fusion" Citation:
On pourra lancer les procédures et fonctions dans la fenêtre d'Exécution immédiate pour les tester. Citation:
Pour passer d'un mode à l'autre, il y a dans la barre d'outils de VBA au-dessus de la feuille "Fusion", le bouton "Design Mode" dont l'icône est une équerre bleue. Il faut au préalable avoir mis la barre d'outil VBA qui montre également l'enregistreur de macros. |
|||||||||||||
|
|
10
|
|
|
#11 | |||||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Sincèrement... merci !
C'est juste génial de lire vos post. Vous arrivez à expliquer clairement les lignes de code ! Je ne sais pas si on arrivera au terme de ce projet, mais j'en retire déjà baucoup d'enseignements. Franchement, encore et encore merci ! Je vais donc refaire la partie description que j'ai mit en fin de code VBA comme vous le demandez: Code :
Le but ici étant d'afficher TOUTES les solutions possibles. Encore moi. Je me permets de poster une archive ZIP, car j'ai rajouté toutes les feuilles manquantes, et incrémentés ma feuille de données. Par contre, dans les macros, pour implémenter les nouveaux objets... je bloque. Je ne comprends pas: Code :
PS: j'ai un message d'erreur lorsque je ferme mon fichier: Citation:
|
|||||
|
|
10
|
|
|
#12 | ||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
parce qu'il est défini deux fois : oubli de le renommer dans Amu.
Code :
Code :
Quand deux objets ont été fusionnés pour en générer un troisième, est-ce qu'on peut réutiliser une nouvelle fois les deux objets --bien qu'ils soient déjà fusionnés -- ou on ne peut utiliser que l'objet fusionné résultant ? |
||||
|
|
10
|
|
|
#13 | ||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Merci pour la réponse.
Effectivement, me suis raté sur un remplacement de nom de variable ! Pour les fusions: imaginons qu'en stock nous ayons: A,B,C,D et E Si A+B=Z Si on utilise Z par la suite pour obtenir le résultat désiré (Z+D=cible), on ne peut donc pas utiliser A. Mais peut etre par contre que A+D=cible. Donc il ne faut pas oublier quand même de vérifier avec chaque élément de base du stock. Tout comme: A+B=Z, D+E=Y, Z+Y=cible. PS: pour l'insertion d'objet? EDIT: j'ai continué à implémenter des objets. J'ai donc rempli totues les [case] Merci J'ai continué à chercher à comprendre Je me suis donc essayé à renommer les données d'entrées pour les Ring et en ai profité pour ajouter les données pour Amu Voila ce que cela donne: Code :
Si oui, je vais continuer à renter les données pour les autres types d'objets ! En tout cas, j'avoue que cela m'amuse d'essayer de comprendre, et de faire évoluer ces macros ! ![]()
|
||
|
|
10
|
|
|
#14 | ||||||||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
1. Impacts de l'absence des constantes intermédiaires
Code :
Voici la future procédure de test pour initialiser le Stock grâce aux constantes nommées. Code :
Code :
Pour résumer, les constantes intermédiaires de support ne sont réellement utiles que pendant le test dans StockInit(). Il n'est plus nécessaire de définir les tableaux arrAmuSuppRel, arrAmuSuppName et compagnie car ils ont été remplacés par arrObjRel dans 1. La quatrième dimension du message #11. 2. Questions Quel est le nombre maximum d'objets dans le Stock ? Peut-on toujours atteindre la cible ? Quel est le nombre maximum d'étapes pour l'atteindre ? Donnez un ordre d'idée. 10 ? 1000 ? Plus ? Est-ce qu'on est sûr avec les tables de corrélation qu'un objet ne peut jamais changer de famille par exemple de Ring vers Aad ? 3. Simulateur de fusion Ce module VBA de test n'est pas à intégrer dans le classeur Fusion.xls On peut le tester dans un classeur vide. Il a pour but de valider le principe de fusion et voir si la première étape de recherche de la cible est bien dans la combinatoire suivante. Dans le VBE d'un classeur vide, insérez Module1 et copier-coller le code VBA suivant : Code :
0: A B 1: AB Le Stock initial comprend deux objets A et B. On simule la fusion de l'objet A et de l'objet B en les collant sans séparateur blanc entre eux. "AB" représente donc la fusion de A & B. 0: A B C 1: AB C 2: AC B 3: A BC Nombre total de combinaisons générées : 3 Nombre d'évolutions du stock : 3 Nombre de fusions uniques : 3 0: A B C D 1: AB C D 2: AC B D 3: AD B C 4: A BC D 5: A BD C 6: A B CD 7: AB CD 8: AC BD 9: AD BC Nombre total de combinaisons générées : 9 Nombre d'évolutions du stock : 9 Nombre de fusions uniques : 6 Connaissez-vous la formule mathématique qui donnerait le nombre de combinaisons uniques du Stock après un premier niveau de fusion ? ... 761: A B C D EF GH 762: A B C D EG FH 763: A B C D EH FG Nombre total de combinaisons générées : 763 Nombre d'évolutions du stock : 763 Nombre de fusions uniques : 28 ===================================== : Analyse combinatoire Nombre des combinaisons sans répétition de n éléments pris k à k Combinaison sans remise C(k, n): 8! / (2! * (8-2))! = 28 ' C'est le nombre de fusions uniques. Combin. avec remise C(k, n+k-1): (8+2-1)! / (2! * (8-1))! = 36 Arrangement A(k, n) sans rept. : 8! / (8-2)! = 56 Arrangement A(k, n) avec rept. : 8^2 = 64 Permutations sans repetition : 8! = 40320 Permutations avec repetition : 8! / 2! = 20160 Vérifiez que ce simulateur de fusion fait bien ce que sera la première étape de recherche de la cible avec les objets dans le Stock. |
||||||||
|
|
10
|
|
|
#15 | ||||||||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Pour la partie 1:
J'avoue que la comme ça... j'ai pas comprit ![]() Apparemment, les Code :
Dans le doute, je vais continuer à les implémenter, quit à les supprimer plus tard ! Pour le point2: Citation:
Mais on part dans l'hypothèse que il n'y a pas de limite. Citation:
Citation:
Mais disons qu'au dessus de 20 cela deviendrait non-rentable. Donc on peut fixer une limite dans cet ordre de grandeur Citation:
Pour le point 3: Je vais tenter de comprendre et faire un feedback dans la soirée ! Mais déjà, a voir la macro.... IMPRESSIVE !!!!!! EDIT: le support Pg des Cieux me pose problème. J'ai complété les données CaC1H comme cela: Code :
|
||||||||
|
|
10
|
|
|
#16 | |
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
^ Oui, cela me semble correct.
Citation:
Il faut donner un ordre de grandeur car cela influencera sur la représentation interne du Stock. Si pour un Stock de 8 objets, la combinatoire de premier niveau se compte en centaines, il faut savoir si le Stock comprendra une dizaine, une centaine, un millier, etc. d'objets de la même famille que la cible ? Comme il n'y a pas de mutation d'un objet d'une famille à l'autre, c'est l'ordre de grandeur du nombre d'objets maximum dans le Stock appartenant à la famille de la cible qui importe. Le no limit n'existe pas en informatique. Sinon on risque d'attendre un siècle devant son PC pour avoir le message "Not enough memory". |
|
|
|
10
|
|
|
#17 |
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Dans ces cas la, on va dire: 30 objets de la même famille maximum !
EDIT: voici la version 6 avec toutes les données d'entrées. Est ce que cela est correct ? |
|
|
10
|
|
|
#18 |
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
La nouvelle présentation de la V0.6 est chouette et on apprécie tous les ajouts y compris dans les Select Case des procédures et surtout l'initialisation des objets.
Au niveau des constantes, il ne fallait pas effacer les constantes, qui existaient déjà. L'optimisation proposée pour les nouveaux objets a pour but de faciliter leur ajout mais on n'a pas besoin de supprimer les constantes qui fonctionnent avec Ring et Aad. En lançant InitRpg() dans la fenêtre d'Exécution immédiate, j'ai l'erreur : Code :
Public Const indRingSuppAnneau = indRingSuppFirst ' Premier élément de la famille RingSupp J'ajouterai ce qu'il faut car il y a eu un important changement entre la 0.3 et 0.3.1 dans le message 9. |
|
|
10
|
|
|
#19 | |||||
|
Nouveau Membre du Club
![]() Grégory Ingénieur PI Inscription : août 2011 Messages : 16 ![]() |
Citation:
EDIT: je viens de me rendre compte qu'il manquait des possibilités. On peut logiquement faire: Code :
AB C D. Le résultat ici est différent de celui que l'on obtiendrait avec AB D C Puisque l'ordre des fusions impact sur l'objet obtenus. Pas si on fait AB ou BA. Mais ABC sera différent de ACB. A noter que la solution 0 et 1 sont semblables au final. Pour les données intermédiaires, si il faut les ajouter de nouveaux, j'ai toujours les anciennes versions en stock au pire =) Il suffira de me dire. Citation:
EDIT: j'ai tenté avec: Code :
Const nbrObjMerged = 2, nbrObjMax = 30, nbrCombMax = 100000 Citation:
Mais, en final, si l'objet obtenu lors de l'essai n'est pas l'objet ciblé, alors il peut supprimer la solution, donc il n'y aura pas de manque de case. Si ? |
|||||
|
|
10
|
|
|
#20 | ||
|
Membre éclairé
![]() Inscription : juillet 2011 Messages : 141 ![]() |
C'est déjà pas mal d'avoir indiqué un n° d'erreur et sa description : "Dépassement de capacité", mais il faut être encore plus précis : n° de ligne et contexte des variables lors du bug.
En fait il s'agissait d'un overflow lors du calcul de la factorielle pour l'analyse combinatoire. On a republié dans le message 14 le simulateur de combinaison de Stock avec nbrObjMax = 10 et nbrCombMax = 100000 et en passant les Integer 16-bit en Long 32-bit. Cette maquette n'a pas été prévue pour rechercher le max car elle teste l'unicité des combinaisons. On a augmenté la limite à 10 objets parce qu'au-delà, cela commence à être longuet. Par contre on peut très bien réserver un tableau de 100000 String. ____________ La version 0.7 a été publiée dans le message 8 ci-dessus. 1. Décrire la feuille Fusion En lançant InitRpg() dans la fenêtre d'Exécution immédiate, on obtient : L'état du stock est : 01 Ring: Anneau, Diamant, Délit 02 Ring: Anneau, Dur, Peau Dur 03 Ring: Anneau, Argent, Astuce 04 Ring: Anneau, Platine, Justesse 05 Ring: Anneau, Distingué, Art 06 Ring: Anneau, Argent, Sagesse 07 Ring: Bracelet, Astral, Sagesse 08 Ring: Bracelet, Bronze, Sagesse 09 Ring: Bracelet, Bronze, Peau Dur 10 Ring: Chevalière, Bronze, Génie 11 Ring: Chevalière, Or, Sagesse La cible à atteindre est : Ring: Anneau, Titane, Jouvence Cependant ni le stock, ni la cible ne sont lus sur la feuille "Fusions" parce que les constantes de rangées et de colonnes n'ont pas été encore codés. Il y a vos propres commentaires en ligne 309. Il faut traduire ces commentaires en constantes VBA exactement comme ce qui a été fait avec la feuille "Données Fusion" qui est maintenant complètement décrite. Vers la ligne 309, on trouve le commentaire suivant : Code :
2. Prise en compte des nouveaux objets Vérifier si les nouveaux objets ont été correctement compris par le programme. Dans la fenêtre d'Exécution immédiate, copier-coller et valider par ENTER : Code :
? IdObjFromProper(indObjArmor, indArmorSuppPleineArmure, indArmorPrefMortel, indArmorSuffOrchidee) Le programme attribue un n° unique à l'objet, mais ce numéro n'a aucune signification tant qu'on ne le traduit pas en chaîne de caractère avec la fonction ObjToString(). Armor: Pleine Armure, Mortel, Orchidée En composant les deux fonctions en un seul appel : Code :
? ObjToString(IdObjFromProper(indObjArmor, indArmorSuppPleineArmure, indArmorPrefMortel, indArmorSuffOrchidee)) Explorer les nouveaux objets en changeant les paramètres de IdObjFromProper() d'autant plus qu'il n'y a pas les constantes de propriétés intérmédiaires mais uniquement la première et la dernière pour un type de propriété donnée. Afficher le résultat par ObjToString() afin de vérifier que les tables ont été correctement lues. Idem avec les tables de corrélation : Code :
? PrefixeToString(indObjPant, PrefixeRelation(indObjPant, indPantPrefCourt, indPantPrefMortel)) |
||
|
|
10
|
Copyright © 2000-2012 - www.developpez.com