Deplacer Formes/Shapes pour gerer l'espace dans un entrepot

Bonjour à tous et bonne annee!

Je vous ecris car je dois creer un fichier Excel de gestion de stock et d'espace d'un entrepot. Le sujet a deja ete aborde des centaines de fois sur tous les forums excel que j'ai pu trouver, cependant, a ma connaissance, aucun n'apporte de solution a un aspect que je voudrais developper : une interface graphique interactive.

Je vais vous decrire ce que j'entends par la et savoir si c'est realisable, puis avoir un peu d'aide sur une partie de code que je ne maitrise pas (Precision : je ne suis pas un killer en VBA mais j'en maitrise les bases je dirais...)

Pose du probleme:

On veut entreposer des boites longilignes sur des etageres. Le programme doit pouvoir servir a renseigner l'emplacement d'une nouvelle boite (ou le nouvel emplacement d'une boite qui a ete deplacee) et a rechercher ou se trouve une boite en particulier.

*Espace de stockage:

L'entrepot en question est consitue de 11 portants (2 portants forment un "RACK") disposes sur 3 niveaux ("LEVEL") et chaque niveau ayant 4 espaces ("POSITION") occupables possibles. Cependant vu que l'on peut empiler deux boites l'une sur l'autre, j'ai mis dans mon programme 6 niveaux, 2 niveaux "virtuels" par niveau reel.

Chaque rack fait 10 feet de long (=espace entre deux portants). Ainsi lorsque l'on pose une boite sur le Level 1, 3 et 5 elle doit faire au moins 11 feet pour tenir. Pas de limitation de taille pour le Level 2, 4 et 6 lorsqu'il y a une boite dans le niveau d'en dessous sur laquelle se reposer. Les petites boites sont donc logiquement rangees au dessus des plus longues. Derniere subtilite, puisqu'on pose des boites sur des portants avec le vide au milieu, les box depassent des racks en longueur a droite et a gauche forcement, donc pour le rack le plus a gauche et le rack le plus a droite j'ai augmente l'espace de stockage possible pour representer cela. Une autre consequence de ceci est le fait que la position d'une boite sera definie par la position de son milieu.

*Materiel a entreposer:

Des boites ayant chacune un numero unique qui leur est attribue et que l'on renseigne lorsqu'on la cree. Une boite occupe une position sur un level d'un rack.

*Ce que j'ai fait jusqu'a present:

J'ai cree un bouton qui ouvre un userform et demande a l'utiisateur de remplir les caracteristiques de l'equipement: Equipment (ex: Profile, Pipe..), Box Number (ex: L-456-789), Owner (ex: Cirtec..), Dimension ft (ex: 10). Cela cree une shape de la taille renseignee dans l'userform et comportant le numero d'identification, a l'emplacement "To store".

*Ce que j'aimerais pouvoir faire dans l'ideal:

  • >J'aimerais que l'utilisateur puisse ensuite avec sa souris bouger la forme et la mettre a l'emplacement desire. Bien sur idealement il ne pourrait pas la poser sil ya deja une shape a l'emplacement desire (message d'erreur eventuellement), il ne pourrait pas la mettre aux etages 1,3 et 5 si elle fait moins de 10ft, ni aux etages 2, 4 et 6 s'il n' a pas de box a la meme position a l'etage inferieur. Puis il cliquerait sur le bouton "Save". Pour etre sur qu'elle est positionne de maniere correcte dans un emplacement et non un chevauchement, le programme la positionnerait dans la cellule top.right correspondante et demanderait a l'utilisateur si l'emplacement correspondant (rack, level, position) lui convient. S'il dit oui, le programme enregistre l'emplacement et l'affiche a cote des informations deja presente pour la boite dans la worksheet, s'il dit non elle revient a l'emplacement "to Store" en attendant d'etre replacee. Ceci est le cas de figure ou une nouvelle boite est ajoute. Un process similaire devrait etre fait lorsqu'une boite deja en place change de position, on updaterait ses informations d'emplacement.
  • >Enfin, cerise sur le gateau, je voudrais faire une deuxieme worksheet qui enregistrerait les modifications apportees par tel ou tel utilisateur du document.

Mon probleme numero 1 c'est que je ne sais pas gerer la manipulation des formes par la souris.

  • Comment savoir ou est situe une forme et comment enregistrer son emplacement.
  • Comment effectuer mes tests pour savoir si la forme a le droit de se positionner la ou pas
Mon probleme numero 2 c'est l'enregistrement de l'historique des modifications en fonction de l'utilisateur (absolument aucune idee de comment on fait ca)

Je vous joins mon fichier tel qu'il est actuellement.

En vous remerciant pour toute aide eventuelle,

69booktest.xlsm (50.52 Ko)

Bonjour et bienvenu(e)

A tester pour le problème 1

Bonjour Banzai64 et merci pour le souhait de bienvenue!

Merci beaucoup pour ta contribution, c'est bien ce que je voulais! =)

Impressionnant, j'ai compris le code mais je n'aurais pas reussi a l'ecrire moi-meme je pense...

Mes remarques:

-Super pour le fait qu'une boite comme Z-ERT-GH5 ne soit pas autorisee a etre posee en (4-5 [36-50],1,2), en effet, elle ne serait appuyee que sur un portant et donc tomberait physiquement par terre. Donc c'est bien.

-On s'attend a ce que l'utilisateur ne fasse pas ca, mais si je range ma forme ailleurs que dans l'espace de stockage en cellule U31 par exemple, le programme n'indique pas d'erreur, meme s'il ne renvoie pas la nouvelle position de la forme. J'ai donc rajoute un IF dans tes lignes de codes pour modifier ca.

Bug trouves:

1. Si je deplace la boite H-456-R67 de l'emplacement (rack, level, position)=(1,2,4) vers l'emplacement (1,2,3) le programme plante. Physiquement, elle tomberait donc c'est rassurant que ca plante. Mais tout comme la boite de 11 ft GHU-45-56, il faudrait que le message d'erreur avertissant d'un mauvais positionnement lui soit applique et qu'elle devienne rouge (super idee d'ailleurs le changement de couleur, c'est tres parlant). Je pense qu'il faudrait refaire un test le dessus en le finissant par message d'erreur et End Sub, je vais essayer d'adapter un de ceux que tu as fait.

2. De meme si je deplace la boite U-789-1 de l'emplacement (1-3,1,2) vers (1-3,1,3) le programme plante.

Physiquement c'est impossible de bouger cette boite toute seule. Soit son mouvement vers la position 3 entraine le mouvement des boites qui sont poses sur elle, en l'occurence GHU-45-56et RTY-53 (si ces boites en question ne chevauchent pas deux boites du niveau d'en dessous car a ce moment la l'edifice tomberait si l'on souleve U-789-1 avec notre forklift), soit un message d'erreur indique de bouger d'abord ce qu'il y a au dessus avant de pouvoir bouger ce qu'il y a en dessous (beaucoup plus simple a mon avis)

Qu'en penses-tu?

3. Suppression d'une box. J'ai rajoute un bouton supprimer qui supprime la shape selectionnee. J'essaye actuellement de mettre a jour le tableau pour faire disparaitre la shape supprimee de celui ci et ainsi eviter de faire beuguer la procedure Record_Positions.

Je te joins le fichier modifie pour que tu me dises ce que tu en penses

Bonjour

Réparation (j'espère) du bug signalé

A voir une autre approche : Vérification initiale si toutes les boites sont répertoriées

Un début pour l’historique

A vérifier

Bonjour Mr Banzai,

Merci pour le fichier, il commence vraiment a ressembler a quelque chose!

Je l'ai teste et voice mes remarques. (Bizarre j'avais repondu deja hier soir je ne sais pas pourquoi je ne retrouve pas mon message alors je le remets ici...)

Remarques:

  • Test du check que chaque boite soit repertoriee dans la liste: marche comme un charme. Par contre la reciproque provoque un beau bazar. Pas vraiment grave selon moi.
  • Ok pour le "Hors Zone de Stockage" c'est en effet plus elegant que ma boucle If
  • Je n'avais pas vu ton message alors j'ai quand meme bosse sur le bouton Delete, vu qu'il a l'air de marcher je le laisse. Je trouve que ca evite :
*dans le cas d'un grand nombre de boites a chercher dans la liste le numero de la boite qui convient pour supprimer cette ligne

*que l'utilisateur qui veut supprimer cette boite ne me supprime la ligne entiere et par le meme coup les zones de stockage

Re-Tests des beugs precedents:

  • Pour le numero 1: bien corrige, c'est parfait!
  • Pour le numero 2: lie au numero 1, corrige par la meme occasion du coup, bien!

Autres Bugs trouves:

1. Pas de grosses consequences: C'etait deja le cas dans les versions precedentes en fait je n'avais pas fait gaffe mais les Adr Dep et ADr Fin en Colonne D et E donnent des resultats faux, ce qui est bizarre vu que le code me semble bon...

2. Un bug un peu bizarre que j'ai eu quand j'ai tente de positionner la box H-78-78-78 a un emplacement, une autre box qui n'a rien a voir s'est mise en rouge et un message d'erreur "2 boites superposees" est apparu. Apres recherche, ceci est du au fait que lorsque jai cree cette forme Excel l'a nommee Box81, nom qui etait deja pris par la box precedente. Quand on supprime des box j'ai l'impression que l'incrementation ne se fait pas et qu'on arrive avec deux fois le meme nom... (cf screenshot)

Pour se debarasser du message j'ai du supprimer la forme ensuite.

3. L'history marche bien, il enregistre les nouvelles entrees (creation) et les modifications, mais pas les sorties (suppression). Que ce soit fait via mon bouton Delete ou via le check du debut regardant si toutes les boites sont dans la liste et que l'on choisit supprimer.

4. History encore, lorsque je cree une forme et que je la positionne mal (par exemple sur deux racks et pas trois) et que j'appuie sur save, j'ai un message d'erreur, Ok. Mais du coup quand je la replace correctement et que je reclique sur save, dans l'history ca gere ca comme une modification (colonne G, H et I occupees) et pas comme une creation, ce qui n'est pas ideal..

Je te joins le fichier modifie avec le Delete_Item

Un grand merci pour ton aide en tout cas!

bug prgm entrepot a bug prgm entrepot b

Bonjour

Lea13 a écrit :

Par contre la reciproque provoque un beau bazar

Il faut m'expliquer

Lea13 a écrit :

mais les Adr Dep et ADr Fin en Colonne D et E donnent des resultats faux

Les résultats sont justes mais étonnants (bizarres) car normalement elles doivent avoir la même colonne

Pour la cellule du haut j'utilise TopLeftCell et pour la cellule du bas j'utilise BottomRightCell

Mais si la boite en largeur dépasse la largeur de la colonne on se retrouve avec des coordonnées bizarres mais logiques

Mais pour te dire ces valeurs ne me sont pas utiles en l'état

A tester

Bonjour Banzai,

Super merci, ton aide m'est tres precieuse!

J'ai bien teste le fichier et j'ai encore quelques remarques, les voici ci dessous.

Remarques:

  • J'aime bien le fait que lorsque plusieurs modifications sont faites et qu'on appuie sur save a la fin, l'history mette une meme couleur, ce qui representerait une journee de travail ou en tout cas une session de travail a l'entrepot. Bonne idee!
  • Le bouton Delete marche egalement avec ta maniere, en plus efficace puisqu'on economise une boucle For, au top!
  • Ce que je voulais dire en parlant de reciproque:
Si je supprime une ligne de la liste, mais pas la boite, le programme ouvre une boite de dialogue pour m'informer qu'il n'y a pas match et me propose d'ajouter la ligne ou de supprimer la boite, parfait. Je voulais parler du cas inverse ou je supprime une boite et pas la ligne correspondante dans la liste. Dans ce cas, pour une boite suffiamment "haute" dans la liste, quand j'appuie sur save, cela supprime toutes les positions des boites de la liste et un message m'avertit qu'il ne trouve pas la boite en question, mais je n'ai pas la possibilite de regler le probleme en la creant ou en la supprimant. Je ne peux pas non plus cliquer sur "create new item", il faut que je supprime la ligne en question dans la liste et generalement tout cela fait planter le programme a un moment donne.

Re-Test des beugs precedents:

  • En ce qui concerne Adr Dep et Adr Fin, bien note ton explication, merci ca semble logique.
  • les numeros de box s'incrementent bien, plus de beug a ce niveau la, super!

Nouveaux beugs trouves:

1. Lorsque je supprime une boite via delete item, la boite se supprime. Si j'appuie sur save ensuite, le programme plante. Ceci est du au fait que l'on se met alors a comparer dans l'historique des tableaux de taille differente. Il faut donc rajouter dans la procedure de Delete_Item de supprimer aussi la ligne correspondante dans le tableau du worksheet Warehouse Storage. Je l'ai fait et ca marche.

2. Lorsque je cree/supprime un item et que j'appuie sur save il ne se passe rien dans l'history. Il n'y a pas enregistrement dans le tableau colore de gauche de la creation/suppression d'un article. Et le tableau de droite se met a jour seulement lorsque l'on a fait une modification sur des boites pas sur de la creation/suppression. On est capable de suivre le mouvement d'une boite qui se balade dans l'entrpot donc (utile pour toujours savoir ou elle est) mais on aura plus de mal a savoir si et quand une boite est rentree ou sortie de l'entrepot, ce qui est important.

3. Gestion des erreurs dans l'History Supposons qu'une boite est a un emplacement (x,Y,Z)=(rack,level,position). Lorsque je la deplace a une position (X',Y',Z') non valide et que jappuie sur save, meme si on a un message d'erreur, (X,Y,Z) est ecrase au profit de (X',Y',Z'), et lorsque je positionne ma boite a un emplacement (X'',Y'',Z'') valide cette fois, l'history voit ca comme une modification de la boite en question de (X',Y',Z') vers (X'',Y'',Z''), ce qui donne une fausse info. Je detaille ci-après tous les cas possibles, certains sont sans probleme, d'autres ont le dysfonctionnement decrit precedemment

Cas 1__ lorsque j'ai une boite au level 2 pose sur une autre, que je la deplace dans la meme colonne jusqu'a quelle "depasse" de la boite sur laquelle elle repose->error "pas de boite en dessous". Je la deplace dans une position valide, ailleurs au level 1 par exemple. L'history n'enregistrera que ce dernier mouvement position invalide intermediaire vers position valide finale. ==> CAS NOK

Cas 2__ la boite est en (2-3,2,1) je la deplace hors zone de stockage, save->error "hors zone de stockage". cette fois il n'y a pas ecrasement de l'emplacement, mais suppression. et c'est retranscrit comme ca dans l'history (2-3,2,1) ( , , ). Puis lorsque je la replace a un autre emplacement valide (3-5,1,1), le nouvel emplacement est ecrit et dans l'history on a donc ( , , ) (3-5,1,1). Cf egalement le screen shot joint ==> CAS NOK

Cas 3__ la boite est dans un emplacement valide (x.Y,Z), je la deplace sur un des labels "Level 1", save->error "emplacement interdit". Je la replace ailleurs ou cest valide (X',Y',Z'), save, et l'historique n'enregistre que le deplacement (x,Y,Z)->(X',Y',Z') ==> CAS OK

Cas 4__ la boite est dans un emplacement valide (x.Y,Z) et est <12ft, je la deplace du Level 2 ou elle etait posee sur une autre boite, au level 1, save->error "cette boite ne peut etre positionnee comme ceci". Je la replace ailleurs ou cest valide (X',Y',Z'), save, et l'historique n'enregistre que le deplacement (x,Y,Z)->(X',Y',Z') ==> CAS OK

Cas 5__ la boite est dans un emplacement valide (x.Y,Z), je la deplace sur un emplacement occupe par une autre boite, save->error "2 boites superposees". Je la replace ailleurs ou cest valide (X',Y',Z'), save, et l'historique n'enregistre que le deplacement (x,Y,Z)->(X',Y',Z') ==> CAS OK

Le fichier mis a jour du beug 1 est en PJ

A te lire,

exemple bug 3

Bonjour

Je préfère te prévenir

Ne soit pas pressé, il faut que j'y réfléchisse et que je retrouve l'envie de chercher

Pas de souci tu m'aides deja enormement! =) En plus ce projet est un fil rouge pour moi, je n'ai pas d'imperatifs de temps tres contraignants, et je dois partir a l'etranger a partir de cette semaine pour un bon moment donc aurai moins le temps de me pencher dessus.

Je vais continuer de mon cote a developer le fichier, et si je fais des updates importantes je les posterai dans ce sujet en attendant.

Si quelqu'un d'autre du forum est inspire qu'il n'hesite pas, ne laissez pas Banzai tout seul! =)

A tres vite et encore merci

Rechercher des sujets similaires à "deplacer formes shapes gerer espace entrepot"