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 :

image

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 :

image

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 :

image

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 :

image

@ 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 :

3path.xlsx (13.55 Ko)

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é :

4path.zip (298.95 Ko)

@ 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 :

5path.xlsm (33.40 Ko)

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 Sub

Les 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.

capture d ecran 2026 10 25 065154

@+

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) - 1

Le moins avait pour effet d'inverser les Y.

Chapeau et merci !

@+

Rechercher des sujets similaires à "pathfinder studio successeur propagation"