Pathfinder Studio, le successeur de Propagation
Bonjour,
Merci pour votre lien LouReeD, vous constaterez que https://excel-pratique.com/en/downloads/mathematical-tools-c13 s'est étoffé de mon app.
Dommage que vous aussi vous éloignez d'Excel, ça manque d'ajout récent d'applications dans les téléchargements... L'IA nous a-t-elle tous tués ?
@+
Bonsoir,
L'IA ne "nous" a pas tués.
Il semblerait que les nouveaux et les anciens intervenants l'utilisent pour répondre...
Même les demandeurs l'utilisent mais finissent par "revenir" ici car certaine demande ne sont pas encore compréhensible par l'IA.
J'ose espérer que le site restera debout encore longtemps.
Pour ce qui est de mon éloignement c'est surtout du au fait de mon manque d'envie de me plonger dans les nouveautés "ô" combien intéressante d'Excel nouvelle génération. Donc comme indiqué dans ma signature je suis resté sur la version "2014"... C'est pourquoi mon application Hero mais du temps à sortir...
mais il n'y a pas qu'Excel en jeu dans cet éloignement, je me rend compte que "plus rien" ne m'intéresse comme avant... Un manque d'envie générale ! Mais ça va revenir avec l'hivers où plutôt que de tourner en rond dans la maison je vais me remettre à la "vielle" programmation VBA.
Après pour les téléchargements à l'international, avez vous rechercher des plateforme dédiées ?
@ bientôt
LouReeD
Bonsoir,
un essai de représentation du chemin en 3D, avec Z=3, X=4 et Y=3 :
Mon cube n'est pas super symétrique... l'idée serait d'avoir un cube type, bien formé, puis en faire des copies, et en fonction des coordonnées, les placer au bon endroit sur la feuille.
mon cube affiche toutes les arrêtes car j'étais parti sur le fait de visualiser les "vides", mais cela surcharge trop l'image. l'idéal du coup serait de faire un "cube" à 3 faces visibles, deux losanges et un carré, et en remplissant le chemin du fond vers l'avant cela devrait donner une idée du parcours pour la recherche en 3D :
Là encore en bleu la perspective n'est pas forcément bonne, car la diagonale devrait faire la moitié du côté du carré, mais c'est pour l'idée.
Aller un chemin un peu plus complexe :
Départ rouge, arrivée Vert... A vous de jouer ! Et oui je ne suis qu'un donneur d'idée !
Et la possibilité de faire cette représentation vue de face, de côté ou de dessus, tous est question d'ordre de lecture des cases de passages en fonction de la vue voulue :
@ bientôt
LouReeD
Bonjour LouReeD,
je me rend compte que "plus rien" ne m'intéresse comme avant... Un manque d'envie générale !
Pas très bon ça... J'espère vite retrouver le LouReeD d'avant enthousiaste et hyperactif sur les téléchargements et sur le forum !
J'ai essayé de refiler le lien Excel-Pratique de Pathfinder Studio sur reddit.com/r/excel pour promouvoir mon application à l'international, mais il n'a pas passé le cap modération, pas assez d'ancienneté et de karma sur cette plateforme. Du coup je vais attendre un peu, essayer de participer à leur forum et je retenterai ma chance... Sait-on jamais ?
Pour votre deuxième Post est-ce dans Excel que vous avez accompli ce petit prodige ou avez-vous eu recours à un logiciel tierce puis fait un montage ? Si c'est la première hypothèse je serais très intéressé que vous m'expliquiez comment ?
@+
Bonjour,
c'est sous Excel, mais à la main, mais quand on fait à la main ce n'est pas loin d'être possible sous VBA !
Comme je l'ai dit : insertion forme carrée, puis insertion forme losange, qui une fois à la bonne taille il suffit de dupliquer et d'inverser le sens comme cela on se trouve avec 3 formes qui permettent de reconstituer un cube en perspective cavalière. On les regroupent, cela donne un objet que l'on pourra copier coller autant de fois que nécessaire. Ensuite il suffirait de connaitre les variations en X et Y sur la feuille afin de les positionner comme il faut pour respecter la perspective du chemin et il faudrait commencer à placer le cube au fond en bas à gauche et remonter à la vertical, ou bien en diagonal pour placer les autres et recommencer pour la couche de devant afin de garder l'ordre de superposition. Pour cela il faut avoir les cellules correspondantes au chemin en mémoire avec leur position en "coordonnées" sur les trois axes, vu qu'il est possible de sélectionner le chemin, ces valeurs sont connues mais peut-être pas dans "le même format".
L'avantage c'est que la forme groupée peut changer de couleur "facilement" afin de faire une cellule de départ, d'arrivée et intermédiaire.
Nouveau projet ? Bien évidemment avec la possibilité de réduire au d'augmenter la taille de la forme, de jouer sur le zoom de la feuille, il est possible de faire de grand chemin, mais au delà d'une certain taille l'option pourrait être inaccessible...
Je vais essayer de mon côté d'arriver à remplir un cube de 10 x10 x10 avec mon idée, ensuite dans la boucle, avoir un false ou true pour savoir s'il faut allumer ou éteindre le cube et voir au résultat...
Le fichier sans code à la main :
Bon weekend à vous en espérant vous avoir mis du pain sur la planche !
@ bientôt
LouReeD
Bonjour,
voilà un cube 10 x10 x 10 avec affichage aléatoire des cubes.
Maintenant l'affichage des cubes devrait correspondre aux cellules où le chemin passe pour cela il suffit d'avoir un tableau à trois dimensions et de tester la valeur de ce dernier pour chaque cube de coordonnées X, Y et Z. et encore plutôt que d'afficher ou de masquer il suffit de créer ou non le cuble.
Le fichier avec le code non optimisé :
@ bientôt
LouReeD
Bonjour LouReeD,
Effectivement vous m'avez mis "du pain sur la planche". J'essaierai (juste pour le fun) d'implémenter les procédures nécessaires pour travailler avec les Shapes que je n'ai encore jamais utilisé dans mes codes. Pas mal de défis à relever avant d'arriver à une version où l'on puisse afficher différentes résolutions et choisir entre vue de face, dessus et côté !
Ceci dit je ne modifierai plus le fichier dans les Téléchargements, tout au plus une mise à disposition ici sur cette page de forum.
Merci pour les fichiers d'exemple et pour l'amusement que ce codage va me procurer !
@+
Dans votre code, dans quelle(s) variable(s) se trouve les coordonnées du chemin pour une recherche 3D ?
Juste pour le fun
@ bientôt
LouReeD
Re Bonjour,
Le chemin est stocké dans le Module1 : Public Path3D As Range, dans ce module il y a également la Procédure Calcul qui stocke le résultat du pathfinding dans la variable Path qui contient des vecteurs de voisinage (composantes -1, 0 ou1) peut être plus simple à exploiter ???
Path = sfPathFinder222_3D.fPath(NbX, NbY, NbZ, StartAddress, EndAddress, PropMode)
' ...
NbSteps = UBound(Path) + 1
For i = NbSteps - 1 To 0 Step -1
edv = Path(i)
x = x + (edv Mod 3) - 1 ' (edv mod 3) - 1 est le vecteur de voisinage
y = y + Int((edv Mod 9) / 3) - 1
z = z + Int(edv / 9) - 1
With Range(StartAddress).Offset(y + z * (NbY + 1), x)Prenez du fun
Un essai avec une feuille qui représente le parcours :
Je n'ai pas réussi à "redresser" l'axe des Y
@ bientôt
LouReeD
Good job !
Je viens de recopier votre code dans mon classeur. Un peu de travail d'adaptation à mon application en vue pour moi ce soir.
Challenge: Arriver à vous proposer dès demain ma version, vous m'aurez sérieusement mâché le boulot !
@+
Bonsoir,
bon courage à vous !
Ci dessous le code modifié afin de le rendre "variable" au niveau de la taille du cube d'origine en fonction de la taille de la grille ce dernier devrait être plus ou moins gros, et la position du point en bas au fond, qui lui aussi doit être ajusté en fonction de la taille de la grille.
dans les deux cas c'est plutôt fonction du X et Y, car Z prend moins de place, mais tout de même il faut faire attention.
Le code :
Sub Test()
Dim X, Y, Z, Sh As Shape
Dim Cube(1 To 5, 1 To 10, 1 To 10)
Dim Taille, LeTop
Set Sh = ActiveSheet.Shapes("Cube")
Sh.LockAspectRatio = msoTrue
Sh.Width = 10 ' ici le 10 devrait être variable en fonction de la taille de la grille
LeTop = 330 ' ici le top "du bas" de la structure devrait être en fonction de la taille de la grille
Taille = ActiveSheet.Shapes("carre").Width
For Z = 5 To 1 Step -1
For Y = 1 To 10 '10 To 1 Step -1
For X = 1 To 10
Cube(Z, 11-Y, X) = Feuil2.Cells(Y, X + ((Z - 1) * 10)) ' le 11-Y permet d'afficher à l'endroit
Next X
Next Y
Next Z
For Each Sh In ActiveSheet.Shapes
If Left(Sh.Name, 1) = "_" Then Sh.Delete
Next
For Z = 1 To 5
For Y = 1 To 10
For X = 1 To 10
If Cube(Z, Y, X) <> "" Then
Set Sh = ActiveSheet.Shapes("Cube").Duplicate
Sh.Name = "_" & Sh.Name
If Cube(Z, Y, X) = "D" Then
Sh.Fill.ForeColor.RGB = 255
ElseIf Cube(Z, Y, X) = "F" Then
Sh.Fill.ForeColor.RGB = RGB(0, 255, 0)
ElseIf Cube(Z, Y, X) = "1" Then
Sh.Fill.ForeColor.RGB = RGB(20, 100, 200)
End If
Sh.Top = LeTop + (Z * Taille / 3) - (Y * Taille)
Sh.Left = LeTop - 30 - (Z * Taille / 3) + (X * Taille)
End If
Next X
Next Y
Next Z
End SubLes valeurs en dur sont liées à la taille du cube de référence bleu foncé, j'ai arrondi à 2 décimales, mais il y en a jusqu'à 6, donc il se peut qu'il y est des tout petit décalage.
@ bientôt
LouReeD
Bonjour LouReeD,
Et voila le travail, c'est dans le Module0. La seule modif apportée au reste a été de virer le Dim Path() de la procédure Module1.Calcul
On peut lancer le calcul dans la Feuil1 aussi en appuyant sur la touche t.
Il y a des petits défauts d'apparence que je n'ai pas réussi à solutionner.
@+
Bonjour,
Est ce que avec ce code le visuel est meilleur ?
Sub TraceChemin()
Dim X1%, Y1%, Z1%, i%, j%
Dim Taille!, CoteDuCarre!, DecalageZ!
Dim Chemin$()
Dim edv As Byte
Dim Shp As Shape, Shp1 As Shape, Shp2 As Shape
Dim zoneCible As Range
Dim DecaleTop, DecaleLeft
'on relance le calcul de la grille
Calcul
Feuil1.Cells.Interior.Pattern = xlNone
Taille = 50
Set Shp = Feuil1.Shapes("Cube")
Shp.Width = Taille: Shp.Height = Taille
For Each Shp1 In Feuil1.Shapes
If Left(Shp1.Name, 1) = "_" Then Shp1.Delete
Next
Set Shp1 = Shp.Duplicate
Shp1.Top = 600
Shp1.Left = 600
Shp1.Fill.ForeColor.RGB = vbRed
Shp1.Name = "_" & Shp1.Name
CoteDuCarre = Feuil1.Shapes("Cube").Width
' Insertion du point de départ dans le chemin
ReDim Chemin(0)
Chemin(0) = Shp1.Name
For i = UBound(Path) To 0 Step -1
edv = Path(i) ' Lecture du vecteur de déplacement
X1 = (edv Mod 3) - 1 ' X = (-1, 0 ou 1)
Y1 = -(Int((edv Mod 9) / 3) - 1) ' Y = (-1, 0 ou 1)
Z1 = Int(edv / 9) - 1 ' Z = (-1, 0 ou 1)
Set Shp2 = Shp.Duplicate
Shp2.Fill.ForeColor.RGB = vbGreen
Shp2.Name = "_" & Shp.Name & j
' analyse du décalage
If X1 = 1 Then
DecaleLeft = 37.5
ElseIf X1 = -1 Then
Shp2.ZOrder msoSendToBack
DecaleLeft = -37.5
End If
If Y1 = 1 Then
Shp2.ZOrder msoSendToBack
DecaleTop = 37.5
ElseIf Y1 = -1 Then
DecaleTop = -37.5
End If
If Z1 = -1 Then
Shp2.ZOrder msoSendToBack
DecaleTop = 13.5
DecaleLeft = -13.5
ElseIf Z1 = 1 Then
Shp2.ZOrder msoSendToBack
DecaleTop = -13.5
DecaleLeft = 13.5
End If
' positionnement par rapport au dernier cube
Shp2.Top = Shp1.Top + DecaleTop
Shp2.Left = Shp1.Left + DecaleLeft
j = j + 1
ReDim Preserve Chemin(j)
Chemin(j) = Shp2.Name
' on change le cube de r&éférence
Set Shp1 = Shp2
' on initialise les variables
X1 = 0: Y1 = 0: Z1 = 0
DecaleLeft = 0: DecaleTop = 0
Next i
Shp2.Fill.ForeColor.RGB = vbCyan
Feuil1.Shapes.Range(Chemin).Group
Set Shp = Feuil1.Shapes(Feuil1.Shapes.Count)
Shp.Name = "_Chemin"
Feuil1.Range(Shp.TopLeftCell, Shp.BottomRightCell).Select
ActiveWindow.Zoom = True
Shp.TopLeftCell.Select
End Sub@ bientôt
LouReeD
Les valeurs en dur correspondent au cube de référence et j'ai simplifié les calculs en prenant le dernier cube posé comme référence.
@ bientôt
LouReeD
Super, le problème est solutionné.
Seul changement pour rester conforme à mes grilles 2D:
Y1 = Int((edv Mod 9) / 3) - 1Le moins avait pour effet d'inverser les Y.
Chapeau et merci !
@+