Methode de calcule paramétrage RACK-Segment

Coucou le formun, j’ai vraiment besoin d’aide pour des avis ou vision differente s’il vous plait. :scream: :hot_face:

J’arrive plus a m’ouvrir sur d’autre piste je suis fige dans le meme raisonnement c’est horrible.

Le fichier :

« sim_picking_rack » = position des racks id ,
« sim_racks_on_path » position des Racks dans leur segment ,
« sim_path_segment » = coordonné des chemins de picking ,

les coordonnées sont obtenu par Excel avec un point 0 d’une cellule A1.

Le nom de rack suit une suite logique

« 101A0 ; 101A5 : le premier chiffre indique sont area_id , deuxième et troisième chiffre indique le secteur , le lettre suite la logique de placement : A = premier Rack , B= deuxième Rack ainsi de suite.
Le dernier Chiffre indique si le rack_id es place a gauche ou a droit : 0 = droite , 5 = gauche

Onglet : sim_picking_rack

Colonne A = area_id
Colonne B = rack_id
Colonne C = coordonnée X
Colonne D = corrdonnée Y
Colonne E = Largeur x
Colonne F = longuer y

Onglet : sim_racks_on_path »

Colonne A = rack_id
Colonne B = segment_id
Colonne C = position en pourcentage du rack_id dans sont segment_id

Onglet « sim_path_segment

Colonne A = segment_id
Colonne B = area_id
Colonne C = Start X (sx)
Colonne D = Start Y (sy)
Colonne E = end X (ex)
Colonne F = end Y (sy)
Colonne K = Two_direction ( indique que le pickeur doit revenir au coordonnée start du segment avant de passe au suivant.
Colonne L = Start_segment ( valeur Vrai = début du chemin de picking de la Zone ; Valeur FAUX suite logique des changements de segment)
Colonne M = End_segment ( valeur VRAI = fin du chemin de picking dans la Zone ; Valeur Faux , suite logique des changements de segment.

Colonne L et M détermine le début et la fin du parcoure a faire dans la Zone.

Onglet « error » .

Colonne A = rack_id
Colonne B = Statut soit : Présent dans les deux ( toute va bien ) ; soit Présent uniquement dans sim_picking_rack

Je pense que nous avons toutes les informations nécessaires pour construire une mise en place avec un code vba qui va lire la feuille « error » détecter les erreurs ( Module : Trouver_Erreur_Rack_segment)

Nous avons l’indication de la zone , nous avons l’indication des position rack_id , et l’indication du segment

Nous savons avec le 0 et le 5 si la position est à droite ou à gauche il suffit de calculer par rapport aux start et aux end du segment leur les positions dans leur segment renvoyé le N° de segment et sa position.

Exemple : 101D0 et forcement plus loin de le segment que 101A0 , nous savons que nous pouvons pas dépasse 100 , cette logique ne peux pas avoir de default.

On connaît la taille et la position des étagères, leur zone, leur segment. Je n’arrive pas à lui faire comprendre de calculer la taille du segment grâce au début et à la fin, et ensuite de trouver les coordonnées au plus proche et de localiser les racks _id à chaque extrémité pour ensuite calculer leur position grâce au début et à la fin du segment.

Il devrait repérer le dernier rack_id du segment, par exemple le dernier rack_id du segment 2 est le 102Q0. Le rack_id manquant, 101C5 (onglet « error »), doit être placé entre le 101B5 et le 101D5.

Les « y » des racks à gauche sont les mêmes c’est sur la meme ligne. Il doit insérer le rack_id dans la position avec les coordonnées et ajuster la position des racks dans la feuille « sim_racks_on_path » avec les erreurs qu’il trouve dans « error » .

c’est horrbile je vois la logique a suivre pour arrivé au résultat mais j’arrive pas a lui explique

Help me please :pray: Merci beaucoup

Forum_Location_forme.xlsm (91,5 Ko)

1 « J'aime »

Je n’ose pas interpoler pour ce 101C5 entre 101B5 et 101D5, ce n’est qu’un petit effort d’ajouter ce rack_id manquant dans cette feuille
Puis pour vérifier la distance entre les 4 coins d’une forme et le segment, j’ai écrit quelque chose dans « Le_plus_Proche » et quelque modifications dans vos 2 macros pour montrer des etiquettes pour chaque forme ou segment. (plus facile pour contrôler tout !)
Donc si vous lancez maintenant « Tout_Visuel », on recommence de rien et reconstruit tout.
Si vous passez après sur un carré, une ligne ou une étoile vous verrez de l’information.
Pour les carrés, les 3 premières lignes viennent des 3 feuilles, la 4eme ligne vous montre le coin le plus proche (T=Top, B=Bottom, L=Left et R=Right) et la distance de ce coin vers le segment.
J’ai ajouté une étoile sur le coin le plus proche.
Ce n’est qu’un début …
Forum_Location_forme (1).xlsm (134,3 Ko)

Bonjour Cow,

Merci infiniment de venir à mon secours :blush:

Quand vous dites :

pensez-vous qu’il sera plus simple d’insérer une ligne à l’emplacement ? Est-ce qu’il va pouvoir placer les coordonnées ?
Nous devons placer chaque Rack_id manquant qui sort dans la feuille « erro » à la main pour qu’il calcule leur position et le segment ?

Les Rack_id sont établis grâce à la feuille « sim_racks_on_path » ? Comme le rack_102A0 n’est pas présent dans cette feuille, il n’a pas pu l’incrémenter.

image

Votre approche est d’effectuer une localisation grâce aux étoiles pour déterminer l’emplacement des Rack_id de leur segment afin qu’il puisse calculer leur position ?

Rendre automatique les Rack_id présents dans la feuille « error » pour qu’il les replace dans leur bonne position avec les bonnes coordonnées et leur bon emplacement dans leur segment sera-t-il possible en ajoutant une ligne dans les bonnes feuilles avec le nom des Rack_id manquants ?

Merci pour votre soutien.

l’étoile tait là pour vous montrer comment on peut calculer avec la surface du carré, j’ai pris les 4 coins et calculé la distance entre ce coin et la ligne « segment » et le coin le plus proche reçoit l’étoile, mais je me demande quand je le vois dans « Visuel Segment », souvent il y a 2 coins avec la même distance, ne faut-il pas choisir le centre des 2 points comme « picking point », même exagérer et placer cette étoile dehors le carré à une distance de par exemple « 10 »
Ce serait peut-être intéressant de joindre votre (CreerFormesRack) et ma macro pour mieux gérer tout et changer le couleur des « erreurs » en orange par exemple.

un moment …

Sub test()
     Dim x
     x = Voisins("101C5")                    'vous cherchez les voisins de qui ?
     If UBound(x) = 0 Then                   'la fonction retourne 1 élément ?
          MsgBox x(0)                        'le message d'erreur
     Else
          MsgBox "les 2 voisins sont " & x(0) & " et " & x(1) & vbLf & " à une distance de " & x(2) & " et " & x(3) & vbLf & "en segment " & x(4) & " et " & x(5) & vbLf & "et en position " & x(6) & " et " & x(7), , "101C5"     'tous les éléments de la réponse
     End If

End Sub

Function Voisins(Carré)
     Dim aPick, aRack, aCalc, i, i1, i2, i3, d1, d2, Nom1, Nom2, r, r1, r2, Pick1, Pick2, Pos1, Pos2
     aPick = Sheets("sim_picking_Rack").Range("A2:F133").Value2     'vos données
     aRack = Sheets("sim_racks_on_path").Range("A2:D134").Value2

     ReDim aCalc(1 To UBound(aPick))         'préparer une matrice pour le résultat (=les distances)
     r = Application.Match(Carré, Application.Index(aPick, , 2), 0)     'position dans "pick" du carré
     For i = 1 To UBound(aPick)              'boucler tous les carrés
          If i <> r Then
               aCalc(i) = WorksheetFunction.Power((aPick(i, 3) - aPick(r, 3)) ^ 2 + (aPick(i, 4) - aPick(r, 4)) ^ 2, 0.5)     'la distance entre ces 2
          End If
     Next

     On Error GoTo err1
     d1 = WorksheetFunction.Small(aCalc, 1)  'la distance la plus petit
     i1 = Application.Match(d1, aCalc, 0)    'le voisin le plus proche
     Nom1 = aPick(i1, 2)                     'nom du voisin
     d2 = WorksheetFunction.Small(aCalc, 2)  'distance vers le 2eme voisin (espérons que la distance n'et pas égale)
     i2 = Application.Match(d2, aCalc, 0)    'n° de ce voisin
     Nom2 = aPick(i2, 2)                     'nom de voisin2
     On Error GoTo err2
     Pick1 = WorksheetFunction.VLookup(Nom1, aRack, 2, 0)     'segment de voisin1
     Pick2 = WorksheetFunction.VLookup(Nom2, aRack, 2, 0)     'segment de voisin2
     Pos1 = WorksheetFunction.VLookup(Nom1, aRack, 3, 0)     'segment de voisin1
     Pos2 = WorksheetFunction.VLookup(Nom2, aRack, 3, 0)     'segment de voisin2
     On Error GoTo 0

     Voisins = Array(Nom1, Nom2, d1, d2, Pick1, Pick2, Pos1, Pos2)     'envoyer les résultats
     Exit Function

err1:
     Voisins = Array("problème 2 voisins")   'envoyer raison d'erreur
     Exit Function

err2:
     Voisins = Array("problème 1 des voisins n'est pas dans ""Rack on path"" non plus")     'envoyer raison d'erreur
End Function

macro « test » parie sur les 2 voisins, donc ce n’est pas 100% surtout si les segments sont différents.

Super , cette approche a du sens :slight_smile: merci , je parviens pas trop a comprendre les distances et position 19 et 10 et suite au calcule des coins ?

Quand j’ai voula place les autres rack_id , il a renvoyé un message d’erreur

image

image

Incompatibilité de Type

Nous pourrions pense qu’il va etre possible un traitement des erreurs automatique ? :slight_smile:

Merci Cow

distance entre un point et une ligne droite (text en néerlandais, mais c’est la formule qui nous intéresse)
image

pour calculer cet a & b d’un segment, on a les 4 points dans les colonnes C:F de « sim_path_segment » et avec la fonction RC, on reçoit une matrice avec a comme premier élément et b comme 2eme élément

Function RC(x1, y1, x2, y2)
     x = WorksheetFunction.LinEst(Array(y1, y2), Array(x1, x2), 1, 1)
     RC = Array(x(1, 1), x(1, 2))
End Function

Puis on a ces 2 For…Next avec lesquels on calcule pour chaque point du carré la distance vers le segment, et on récupére le plus petit.

Ces positions, c’est la colonne C de « sim_racks_on path », ce pourcentage que vous avez calculé.

un peu de fantaisie, si vos segments sont perfectement horizontaux ou verticaux (les x’s ou y’s égaux), l’étoile sera au milieu de 2 coins.
j’étais surpris que l’étiquette de segment 2 n’était pas correcte mais apparament dans la macro « CréerSegments » vous utilisez encore les données de « Feuil15 » :crazy_face:
Forum_Location_forme (2).xlsm (136,4 Ko)

une nouvelle version pour chercher le voisin, macro « Test »
Forum_Location_forme (2).xlsm (135,4 Ko)

Bonjour Cow,

C’est top :slight_smile: ! Est-ce que du coup on peut rajouter une confirmation pour savoir si on souhaite les inserts ou pas ? Pour qu’ils s’insèrent entre les deux voisins ? :slight_smile:

Mille mercis, Cow, votre approche est prometteuse.

une toute petite amélioration des carrés inconnus … :sweat_smile:
Forum_Location_forme (2).xlsm (170,9 Ko)
cela servira à quoi plus tard ? Ou avez-vous l’intention de corriger ces chiffres ?

Bonjour Cow,

Merci infiniment pour votre accompagnement.

J’ai essayé de jouer un peu avec le fichier, mais j’ai des messages d’erreur :frowning: .
image

il me dit que l’indice n’appartien pas a la selection

Je travaille sur un projet logistique avec une simulation pour calcule notre efficencience et rentabilité.

L’objectif est d’automatiser le calcul des données pour leur position Rack_id et leur segment.

Si nous effectuons un changement ou si un nouveau Rack_id est créé, tout le paramétrage doit être refait si non le logiciel renvera des messages d’erreur ( Pas d’emplacement , rack_id manquent ect… )

L’idée est de faire une extraction de notre système de Rack_id et qu’il calcule leur emplacement lorsque des Rack_id sont retirés ou ajoutés.

Également, si nous souhaitons effectuer une simulation en changeant la disposition de la zone, on n’a juste à refaire le segment pour qu’il calcule leur nouvelle position.

De cette façon, les fichiers CSV pour la simulation pourront être mis à jour pour correspondre au changement. vous voyé l’idée ?

C’est parfait cette approche , nous pourrions prendre en compte le Y des positions qui finisse part 0 ou 5 ? , le Y sera a 90% le meme qui sont voisin, le risque des 10% et qu’il soit sur un autre segement que sont voisin mais cette problématique et rare et peux etre vite corrige.

Vos 2 images ne sont pas bien transmis, donc je ne vois pas le message d’erreur. C’est possible, que je n’ai pas déclaré un variable dans une macro (en cas qu’il n’est pas Public) ?
Vous l’avez peut-être vu, mais j’avais modifié les coordinates des segments de « Sim_pah_Segments » (et ne plus Feuil15) de manière que ces segment sont maintenant perfectement horizontaux ou verticaux. Comme çà, je sais placer l’étoile au milieu d’un côté d’un Rack, donc je connais la façade et son longueur de cette facade,« Rack » et comme, je suppose, vous avez 5 positions dans chaque rack, je sais parfaitement diviser ces 5 positions de gauche à droite sur cette longueur. Peut-être, cela est une manière plus facile pour savoir ces positions.

PS. Pour le moment, je ne l’ai pas encore fait, mais je peux aussi trouver la façade d’un rack, si le segment n’est pas perfectement horizontal ou vertical, si cela vous intéresse.

Ces fichiers CSV, leur disposition, c’est comment ? Ce tableau structuré est un problème ?

x_proche = aPath(Segm, 3) + Pos * (aPath(Segm, 5) - aPath(Segm, 3)) 'calculation de « sx » en relation avec position : c’est ici qu’il dit que l’indice n’appartien pas a la selection.

Désole j’ai compris cette partie pour les 5 positions.

Oui le tableau es parfait et ca structure ne pose aucun soucis il me suffit de place en forme du fichier cvs
image.

vous dites si c’est le X et pas le Y qui le meme ?

bonsoir,
j’ai volontairement changé les débuts fins des segments 2 et 3 de manière qu’ils ne sont plus horizontaux ou verticaux. En même temps, j’ai ajouté une fleche jaune, qui pointe toujours vers la droite, si on se met sur la ligne du segment et on regarde la façade du rack.
Puis vous avez dit, je pense qu’il y a encore 5 sous-positions par rack, bon, je vous les donne dans ce tableau en mauve. Le milieu, c’était la position de l’étoile de hier (colonne J et K) et puis les autres 4 points sont à 1/6, 2/6, 4/6 et 5/6 de la facade, les coordinates sont dans les colonnes M:P.
Je pense que comme çà, vous n’avez plus le problème des carrés verts de la semaine passée.
Forum_Location_forme (2).xlsm (180,8 Ko)
Si cela vous convient, je dois récrire (plutôt supprimer) certains parts du code, parce que maintenant tout est plus facile à calculer …

.

1 « J'aime »

Hello Cow, wahou, super, cela es vraiment top.

Dans le sens où les segments sont justes mais pas le rack, merci infiniment :slight_smile: parfait.

Dans l’autre sens , J’ai travaillé avec une autre zone, où nous avons les segments qui ont bougé car nous avons rajouté des rack_id.

Comme les segments ne sont pas justes, il est normal qu’il ne puisse pas renvoyer les valeurs justes.

Pensez-vous qu’on puisse aussi faire une action inverse, recalculer les segments avant de relancer le calcul de position ?

Si nous prenons la distance entre le rack de gauche et de droite pour calculer la ligne du chemin, nous savons que s’il y a un changement de l’alignement grâce aux X et Y, on détermine la distance pour évaluer la fin d’un segment et le début.

Grâce à la feuille « sim_path_segment », on connaît le sens du chemin.

Une fois la ligne de passage établie, on établit une distance raisonnable pour déterminer l’emplacement du début.

qu’en pensez vous ?

Merci pour votre aide et accompagnement

Forum_Location_formeV2.xlsm (186,1 Ko)

j’ai manuellement ajouté 4 nouvelles lignes (celles en bleu) et je les ai nommé « Ligne… »
Puis une macro « Lignes_Nouvelles » boucle toutes les formes de « Visuel_Segment » et met celles nommé « Ligne… » dans ce tableau de « Sim_Path_Segment ». Et puis, c’est à vous d’ajouter cela ou de remplacer des valeurs existantes dans les colonnes A:F de cette feuille.

Oeps, je vois que la macro « Ma Zone » ignore la zone demandée et refait tout, je dois verifier cela ou c’est okay ?

PS. si le segment se trouve en dessous le rack, le « pick-side » (colonne I) sera « BL-BR » (ou l’inverse) et la flèche est vers droite. Si le segment se trouve au dessus le rack, le « pick-side » est « TL-TR » est la flèche est vers gauche.Si le segment est à gauche du rack, le « pick-Side » est « TL-BL » est la flèche est « UP » et puis 4eme possibilité est « TR-BR » avec une flèche « DOWN ». C’est important que le segment ne peut jamais passer par ce rack, autrement, je peux me tromper.
Forum_Location_formeV2.xlsm (210,8 Ko)

PS2. j’ai exagéré avec ces lignes, c’est mieux de les mettre bien au milieu du couloir, donc horizontal ou vertical, mais vous voyez que je n’ai pas de problème si cela n’est pas le cas.

1 « J'aime »

Bonjour Cow,

Encore merci pour votre soutien.

J’ai travaillé hier après-midi sur votre dernière proposition. J’ai peur de ne pas avoir compris comment fonctionne la suite logique.

J’ai bien replacé les nouvelles données du « TBL_Ligne » dans « sim_path_segment », mais il laisse les anciennes dans « Visuel_segment ». Si j’ai bien compris la Macro3, elle calcule tous les rack_id présents sur la (Nouvelle ) ligne, est-ce qu’elle peut replacer leur position dans « sim_racks_on_path » ?

Oui, c’est bon, le délai de traitement est rapide pour qu’il puisse tout refaire :slight_smile: C’est même beau à voir :slight_smile: . Merci Cow, la perspective que cela apporte est incroyable.

image

re, voici quelque modifications et améliorations.
Pour mieux voir les zones, on a les macros « ZOOM_… » avec des raccourcis CTRL+MAJ+U pour zone Une, CTRL+MAJ+S pour zone Six et CTRL+MAJ+T pour Toutes les zones.
Pour la zone 6, les anciens segments, je les ai supprimé, comme çà, vous ne les voyez plus. Il y avait un truc avec le rack 600L5 (je crois) qui est dans le segment 1, donc si vous lancez la macro « Ma_Zone » est est traité trop tôt et vous voyez sa flèche dans la mauvaise direction. Et si vous dirigez le souris vers ce rack, dans la 3eme ligne du « screentip » vous voyez 6 pour la zone (okay) et 1 pour le segment (ce qui est faux)

Pour mieux savoir les coordinates des segments, vous pouvez ajouter des nouvelles lignes, mais vous pouvez aussi modifier des lignes existantes. Exemple, utilisez CTRL+MAJ+S pou mieux voir la zone Six.Maintenant vous clicquez avec le souris droite sur une des 4 lignes des segments pour les sélectionner. (ce n’est pas facile, de temps en temps, cela ne réussit pas du premier coup et je pense que c’est plus facile aux extrémités). Vous voyez maintenant cette ligne avec 2 petits circles au bouts. Bon, vous commencez avec le renommer comme « Ligne??? » (quelque chose au lieu des ?) et maintenant vous selectionnez un des circles et vous le déplacez vers l’endroit voulu. Puis vous lancez la macro « Lignes Nouvelles » et puis vous modifiez les coordinates avec ce que vous voyez dans le tableau que la macro vous présente.

Il y a aussi un doublon avec « 104O0 » mais si vous regardez à ce coin, il y a encor des choses qui me semblent bizarre. Et si vous vous rappelez le problème ici dessus … , sa flèche est faux parce que (regardez la 3eme ligne du screentip), le rack est dans segment 10 au lieu de 11.

Pour les 5 « Picking Points » dans la façade de chaque rack, avez-vous un nom, je suppose que c’est ce dernier chiffre dans le nom ou avez-vous encore un autre nom pour mettre au dessus du tableau, les cellules M1:P1

Concernant un rack dans le mauvais segment, on a la colonne « Distance » dans ce fameux tableau. Si vous utilisez l’autofilter, vous voyez que les valeurs normalles sont inférieur à 150, il y a quelqu’unes qui dépassent cela, mais une distance de 500, cela est trop. Donc peut-être vous pouvez ajouter une MFC sur cette colonne pour des valeurs >250(?).

Forum_Location_formeV3.xlsm (209,4 Ko)