Entrepot-emplacement-route de prelevement
Bonjour à tous,
Tout nouveau sur le site et ultra-quiche en Excel.
Voici mon challenge:
J'ai un entrepôt, composé d'emplacements, situés dans des allées, des colonnes, des rangées.
Exemple: l'emplacement 12-74-10 se trouve dans l'allée 12, colonne 74, rangée(étage) 10.
J'ai 30 allées, 88 colonnes par allée, et 50 étages par colonne.
En fonction des commandes, un opérateur logistique doit préparer la marchandise. Et donc aller la chercher dans les bons emplacements que mon système lui donne.
Jusque là, pas de soucis.
Le système donne une "route de prélèvement" à l'opérateur afin que celui-ci puisse préparer la commande en avançant dans les allées sans jamais devoir faire de marche arrière.
La route est la suivante: on commence par le début de l'allée 1 et 2, colonne par colonne, du plus petit étage au plus grand. Une fois arrivé au bout de l'allée 1 et 2, l'opérateur passe directement à l'allée 3 et 4 en commençant par le fond, colonne par colonne. Et ce zig-zag continue jusqu'à la 30 ième allée.
Le système se base sur une code croissant (entre 0 et 9 999 999) pour générer les routes de prélèvement. Cependant c'est le bordel total et les codes ont été mal attribués.
Je cherche un moyen via Excel de reproduire ligne après ligne la route complète de prélèvement afin de pouvoir y placer une code croissant. Et ainsi pouvoir facilement le charger dans mon système.
Imaginons que mon entrepôt fasse 6 allées, chaque allée comporte 3 colonnes et chaque colonne contient 2 étages. Voici ce que devrait donner l'excel.
Allée Colonne etage code
01 01 00 0
01 01 01 1
02 01 00 2
02 01 01 3
01 02 00 4
01 02 01 5
02 02 00 6
02 02 01 7
03 02 00 8
03 02 01 9
04 02 00 10
04 02 01 11
03 01 00 12
03 01 01 13
04 01 00 14
04 01 01 15
05 01 00 16
05 01 01 17
06 01 00 18
06 01 01 19
05 02 00 20
05 02 01 21
06 02 00 22
06 02 01 23
Dans le système les emplacements encodés avec des tirets. ex:06-54-28
Vous comprenez que je n'ai pas envie de faire manuellement 30 X 88 X 50 lignes....
D'avance un tout grand merci à ceux qui pourront m'aider!
SyrahFab
Bonjour,
Si j'ai bien compris, ci-contre le fichier avec vos emplacements et le code VBA si vous avez besoin d'encoder une plus large plage d’emplacements. Il s'agit d'une boucle imbriquée de 3 variables avec format texte et personnalisé de type "00".
Cdlt,
bonjour à tous,
comme je n'ai pas tout à fait la même compréhension que toi, Ergotamine , une autre proposition
Sub aargh()
Dim t() As String 'table des codes
pa = 30 'nb allées
pc = 88 'nb colonnes par allée
pe = 50 'nb étages par colonne
ReDim t(1 To pa * pc * pe, 1 To 4) 'adaptation taille du tableau en fonction des valeurs pa,pc,pe
For a = 1 To pa Step 2 'pour chaque paire d'allées
If a Mod 4 = 1 Then dc = 1: fc = pc: sc = 1 Else dc = pc: fc = 1: sc = -1 'détermine si on part de la colonne 1 ou de la dernière colonne
For c = dc To fc Step sc
For o = 0 To 1 ' on alterne l'allée pour une colonne
For e = 1 To pe 'pour chaque étage
n = n + 1 'incrémente numéro
t(n, 1) = Format(a + o, "00") 'allée
t(n, 2) = Format(c, "00") ' colonne
t(n, 3) = Format(e, "00") 'étage
t(n, 4) = n 'code
Next e
Next o
Next c
Next a
'mettre tableau sur la feuille
Cells.ClearContents
Range("A1").Resize(1, 4) = Split("allée,colonne,étage,code", ",")
Range("A2").Resize(UBound(t), 4) = t
End Sub@Ergotamine.
Merci pour le fichier mais effectivement ce n'est pas ce que je recherche. Comme décrit, je voudrais trouver le moyen d'ordonner mes emplacements pour que je puisse attribuer un code à chaque emplacement en fonction de la logique de prélèvement. Mais merci quand-même.
++ Syr.
@h2so4
WOW!! C'est exactement ca!! Un énorme merci!
Où comment éviter de se taper 132k lignes!!
Encore merci c'est ultratop!
Excellente journée à tous!
SyrahFab.
@h2so4
Je viens de me rendre compte qu'il manque les rangées 00. Je pensais qu'il fallait juste initialiser le compteur 'e' de 0 a PE:
For e = 0 To pe
Mais hélas non, je reçois un "l'indice n'appartient pas à la sélection".
Thanks pour le coup de main!
Syrah.
bonjour,
je pense qu'il suffit de remplacer cette instruction et vérifier le nombre de rangées.
t(n, 1) = Format(a + o, "00") 'alléepar
t(n, 1) = Format(a + o - 1, "00") 'alléeLa macro doit être adaptée si le nombre de rangées est impair.